{
  "version": 1,
  "generatedAt": "2026-05-25T11:41:33.166Z",
  "runId": "v4-1779707139870-rlu0248l",
  "graphFingerprint": "uvubmk",
  "fileCount": 187,
  "nodeCount": 1230,
  "edgeCount": 1196,
  "unresolvedReferenceCount": 960,
  "nodes": [
    {
      "id": "class:109ebx2:verifygroundednesscommandhandler",
      "kind": "class",
      "fileId": "file:2eckht:verifygroundednesscommand-cs",
      "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "canonicalName": "VerifyGroundednessCommandHandler",
      "shortLabel": "VerifyGroundednessCommandHandler",
      "longLabel": "VerifyGroundednessCommandHandler",
      "purpose": "Defines a MediatR command and its handler that delegates verification of an answer's groundedness to the application's IKnowledgeService.",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "ai"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1133tob:class1",
      "kind": "class",
      "fileId": "file:43kjze:class1-cs",
      "path": "NexusReader.Infrastructure.Mobile/Class1.cs",
      "canonicalName": "Class1",
      "shortLabel": "Class1",
      "longLabel": "Class1",
      "purpose": "Placeholder/infrastructure mobile file; defines an empty class in the NexusReader.Infrastructure.Mobile namespace. Likely a stub for MAUI platform-specific services but contains no runtime behavior.",
      "domainTags": [
        "nexusreader-infrastructure",
        "class1"
      ],
      "technologyTags": [
        "dotnet"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "class1-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:11gdjq4:billingservice",
      "kind": "class",
      "fileId": "file:13phiik:billingservice-cs",
      "path": "NexusReader.Infrastructure/Services/BillingService.cs",
      "canonicalName": "BillingService",
      "shortLabel": "BillingService",
      "longLabel": "BillingService",
      "purpose": "Implements billing-related reactions (subscription updated/deleted) tying Stripe product events to local user subscription plan and token limits.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "billingservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:11lr4zo:knowledgegraph",
      "kind": "class",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "canonicalName": "KnowledgeGraph",
      "shortLabel": "KnowledgeGraph",
      "longLabel": "KnowledgeGraph",
      "purpose": "Blazor UI component that renders and manages an interactive knowledge graph visualization via JS interop, wiring app-level graph services and user interactions to the client-side graph module.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:140cn9s:dashboard",
      "kind": "class",
      "fileId": "file:1b5rrku:dashboard-razor",
      "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
      "canonicalName": "Dashboard",
      "shortLabel": "Dashboard",
      "longLabel": "Dashboard",
      "purpose": "Razor UI page component that renders the user dashboard and, on initialization, loads the current user's profile from an injected identity service.",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "dashboard-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:14xe27n:increasehashlength",
      "kind": "class",
      "fileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "canonicalName": "IncreaseHashLength",
      "shortLabel": "IncreaseHashLength",
      "longLabel": "IncreaseHashLength",
      "purpose": "EF Core migration that updates column types/constraints: increases the ContentHash length and switches certain DateTime columns to use 'timestamp without time zone' (with a Down method to revert).",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:154519v:synchub",
      "kind": "class",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "canonicalName": "SyncHub",
      "shortLabel": "SyncHub",
      "longLabel": "SyncHub",
      "purpose": "Defines a SignalR Hub that accepts authenticated client connections and forwards reading-progress updates to the application layer via MediatR, and manages per-user SignalR groups on connect/disconnect.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "class",
      "fileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "canonicalName": "GetUserProfileQueryHandler",
      "shortLabel": "GetUserProfileQueryHandler",
      "longLabel": "GetUserProfileQueryHandler",
      "purpose": "MediatR query handler that reads user profile data from the application's EF Core DbContext, projects it into UserProfileDto and returns it wrapped in a FluentResults Result.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:15qe4r2:readerlayout",
      "kind": "class",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "canonicalName": "ReaderLayout",
      "shortLabel": "ReaderLayout",
      "longLabel": "ReaderLayout",
      "purpose": "Razor layout component that renders the reader UI (main content, AI sidebar, footer) and manages runtime concerns: device/platform detection, event subscriptions for UI updates, and JS interop to initialize a layout resizer.",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:181ukvc:fixknowledgeunitebookid",
      "kind": "class",
      "fileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "canonicalName": "FixKnowledgeUnitEbookId",
      "shortLabel": "FixKnowledgeUnitEbookId",
      "longLabel": "FixKnowledgeUnitEbookId",
      "purpose": "EF Core migration designer file that describes the target EF model for the migration 'FixKnowledgeUnitEbookId'; it encodes entity mappings, indices, relationships, extension usage and seed data used by the migration snapshot.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:18bavme:ifocusmodeservice",
      "kind": "class",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "canonicalName": "IFocusModeService",
      "shortLabel": "IFocusModeService",
      "longLabel": "IFocusModeService",
      "purpose": "Defines the IFocusModeService interface for UI focus mode control (querying state, initialization, toggling, and change notifications).",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:18r7noo:readerinteractionservice",
      "kind": "class",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "canonicalName": "ReaderInteractionService",
      "shortLabel": "ReaderInteractionService",
      "longLabel": "ReaderInteractionService",
      "purpose": "A small UI-shared interaction service that exposes events for UI components (node selection, scrolling, highlighting, text selection) and provides methods to raise those events for subscribers.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:18sfucp:iepubmetadataextractor",
      "kind": "class",
      "fileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
      "canonicalName": "IEpubMetadataExtractor",
      "shortLabel": "IEpubMetadataExtractor",
      "longLabel": "IEpubMetadataExtractor",
      "purpose": "Defines an application-layer abstraction for extracting metadata from an EPUB stream, returning a Result-wrapped LocalEpubMetadata asynchronously.",
      "domainTags": [
        "epub",
        "metadata",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-inversion"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubmetadataextractor-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:18xcrf7:mauistorageservice",
      "kind": "class",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "canonicalName": "MauiStorageService",
      "shortLabel": "MauiStorageService",
      "longLabel": "MauiStorageService",
      "purpose": "Platform-specific MAUI implementation of INativeStorageService that wraps Preferences and SecureStorage operations and returns FluentResults-wrapped outcomes.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:19ihp67:getinitializationstatusqueryhandler",
      "kind": "class",
      "fileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "canonicalName": "GetInitializationStatusQueryHandler",
      "shortLabel": "GetInitializationStatusQueryHandler",
      "longLabel": "GetInitializationStatusQueryHandler",
      "purpose": "A simple application query handler that responds to a GetInitializationStatusQuery with a constant success message indicating the application is initialized.",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:19wn0m3:routes",
      "kind": "class",
      "fileId": "file:1sm6kjd:routes-razor",
      "path": "NexusReader.UI.Shared/Routes.razor",
      "canonicalName": "Routes",
      "shortLabel": "Routes",
      "longLabel": "Routes",
      "purpose": "Blazor routing and global error boundary component that wires application-level navigation, authorization gating, NotFound fallback and a UI error screen with a retry (recover) action.",
      "domainTags": [
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "routes-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1a23wve:ithemeservice",
      "kind": "class",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "canonicalName": "IThemeService",
      "shortLabel": "IThemeService",
      "longLabel": "IThemeService",
      "purpose": "Defines an abstraction for a UI theme service that exposes current theme mode, an event for theme changes, and a toggle operation for switching themes.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1a6v1w9:initialpostgres",
      "kind": "class",
      "fileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "canonicalName": "InitialPostgres",
      "shortLabel": "InitialPostgres",
      "longLabel": "InitialPostgres",
      "purpose": "EF Core auto-generated migration designer for the InitialPostgres migration; describes the target model (tables, columns, keys, indexes, relationships, and provider annotations) for applying the schema to a Postgres database.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ajhp9e:subscriptionplan",
      "kind": "class",
      "fileId": "file:1b03oou:subscriptionplan-cs",
      "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "canonicalName": "SubscriptionPlan",
      "shortLabel": "SubscriptionPlan",
      "longLabel": "SubscriptionPlan",
      "purpose": "Defines the domain entity SubscriptionPlan which models subscription tiers, pricing, and token/quota limits for the application.",
      "domainTags": [
        "subscriptionplan",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "dataannotations-ef-core"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "subscriptionplan-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ay0je3:mainactivity",
      "kind": "class",
      "fileId": "file:1246987:mainactivity-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "canonicalName": "MainActivity",
      "shortLabel": "MainActivity",
      "longLabel": "MainActivity",
      "purpose": "Android platform entry Activity for the MAUI app; provides the Android lifecycle hook used to start the MAUI application on Android.",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "frontend",
        "boundaryHints": [
          "program-entry",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1baxnes:readernavigationservice",
      "kind": "class",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "canonicalName": "ReaderNavigationService",
      "shortLabel": "ReaderNavigationService",
      "longLabel": "ReaderNavigationService",
      "purpose": "Provides navigation and in-memory reader state (current ebook, chapter index, total chapters, chapter title) and notifies subscribers when navigation changes; integrates with Blazor NavigationManager to navigate to a book view.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ca124f:adddescriptiontoebook",
      "kind": "class",
      "fileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "canonicalName": "AddDescriptionToEbook",
      "shortLabel": "AddDescriptionToEbook",
      "longLabel": "AddDescriptionToEbook",
      "purpose": "EF Core migration that adds a nullable text Description column to the Ebooks table and can remove it on rollback.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1cca8vk:knowledgecoordinator",
      "kind": "class",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "canonicalName": "KnowledgeCoordinator",
      "shortLabel": "KnowledgeCoordinator",
      "longLabel": "KnowledgeCoordinator",
      "purpose": "Coordinates knowledge-graph and quiz generation in the UI layer: subscribes to UI interactions, orchestrates calls to knowledge/graph/quiz/platform services, updates graph state, and exposes an event when graph data is available.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1e23oyo:aisettings",
      "kind": "class",
      "fileId": "file:11mkiaz:aisettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "canonicalName": "AiSettings",
      "shortLabel": "AiSettings",
      "longLabel": "AiSettings",
      "purpose": "Defines typed configuration/settings for AI (Google) integration used for options binding and runtime configuration of model, embedding, token limits, retries, and temperature.",
      "domainTags": [
        "ai",
        "model-selection",
        "embedding",
        "rate-retry-and-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-dto"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "aisettings-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1e8p0hy:mauiprogram",
      "kind": "class",
      "fileId": "file:1uay25w:mauiprogram-cs",
      "path": "NexusReader.Maui/MauiProgram.cs",
      "canonicalName": "MauiProgram",
      "shortLabel": "MauiProgram",
      "longLabel": "MauiProgram",
      "purpose": "Bootstraps and configures the MAUI application: creates the MAUI host builder, registers DI services (UI, platform, identity, app services), configures MediatR and returns the built MauiApp.",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "unknown",
        "boundaryHints": [
          "program-entry",
          "unknown",
          "nexusreader-maui",
          "mauiprogram-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1eb2dy:addebookreadyflag",
      "kind": "class",
      "fileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "canonicalName": "AddEbookReadyFlag",
      "shortLabel": "AddEbookReadyFlag",
      "longLabel": "AddEbookReadyFlag",
      "purpose": "Entity Framework Core migration that adds a boolean 'IsReadyForReading' flag to the 'Ebooks' table and provides a rollback to remove it.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1eh84ev:addebookprogressandchapter",
      "kind": "class",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "canonicalName": "AddEbookProgressAndChapter",
      "shortLabel": "AddEbookProgressAndChapter",
      "longLabel": "AddEbookProgressAndChapter",
      "purpose": "EF Core migration designer: describes the target EF Core model state for the migration named AddEbookProgressAndChapter (schema, entity mappings, relationships, indices, and seed data).",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ehqpz0:themeservice",
      "kind": "class",
      "fileId": "file:i1pwrm:themeservice-cs",
      "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "canonicalName": "ThemeService",
      "shortLabel": "ThemeService",
      "longLabel": "ThemeService",
      "purpose": "A small UI-shared service that tracks and toggles light/dark theme state and notifies subscribers when the theme changes.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "themeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1far2m1:getmyebooksqueryhandler",
      "kind": "class",
      "fileId": "file:16axv5i:getmyebooksquery-cs",
      "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "canonicalName": "GetMyEbooksQueryHandler",
      "shortLabel": "GetMyEbooksQueryHandler",
      "longLabel": "GetMyEbooksQueryHandler",
      "purpose": "MediatR query and handler that reads the current user's ebooks from the AppDbContext, projects them into LastReadBookDto instances, and returns them wrapped in a FluentResults Result.",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1g09xpu:appdbcontextfactory",
      "kind": "class",
      "fileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "canonicalName": "AppDbContextFactory",
      "shortLabel": "AppDbContextFactory",
      "longLabel": "AppDbContextFactory",
      "purpose": "Design-time EF Core DbContext factory: locates solution/web project, builds configuration, resolves a Postgres connection (with fallback), configures DbContextOptions (including pgvector) and returns an AppDbContext for design-time tooling (migrations, scaffolding).",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "unknown",
        "boundaryHints": [
          "unknown",
          "nexusreader-data",
          "persistence",
          "appdbcontextfactory-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1gb1hzf:makeknowledgeunitebookidnullable",
      "kind": "class",
      "fileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "canonicalName": "MakeKnowledgeUnitEbookIdNullable",
      "shortLabel": "MakeKnowledgeUnitEbookIdNullable",
      "longLabel": "MakeKnowledgeUnitEbookIdNullable",
      "purpose": "EF Core migration that makes the KnowledgeUnits.EbookId column nullable in the database schema and provides a reversible Down migration.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1gem37m:makeknowledgeunitebookidnullable",
      "kind": "class",
      "fileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "canonicalName": "MakeKnowledgeUnitEbookIdNullable",
      "shortLabel": "MakeKnowledgeUnitEbookIdNullable",
      "longLabel": "MakeKnowledgeUnitEbookIdNullable",
      "purpose": "EF Core migration designer that defines the target EF Core model for the migration 'MakeKnowledgeUnitEbookIdNullable' — configures entities, relationships, indices, vector extension, identity settings and seeds subscription plan data.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1gyz12d:iplatformservice",
      "kind": "class",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "canonicalName": "IPlatformService",
      "shortLabel": "IPlatformService",
      "longLabel": "IPlatformService",
      "purpose": "Defines a platform abstraction for device capabilities (vibration) and device metadata (device context) used by application code to remain platform-agnostic.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1h9lza8:knowledgepacket",
      "kind": "class",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "canonicalName": "KnowledgePacket",
      "shortLabel": "KnowledgePacket",
      "longLabel": "KnowledgePacket",
      "purpose": "Defines data transfer objects (records) used to represent AI knowledge artifacts (concepts, quiz questions, knowledge units/links, and aggregated knowledge packets) for serialization across the Application layer.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1hxasb:prouserhandler",
      "kind": "class",
      "fileId": "file:1hyu1ez:prouserhandler-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "canonicalName": "ProUserHandler",
      "shortLabel": "ProUserHandler",
      "longLabel": "ProUserHandler",
      "purpose": "Authorization handler that enforces 'Pro' user access by checking the current user's subscription and AI token usage against limits in the application's database.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1j6dl20:normalizeauthor",
      "kind": "class",
      "fileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "canonicalName": "NormalizeAuthor",
      "shortLabel": "NormalizeAuthor",
      "longLabel": "NormalizeAuthor",
      "purpose": "EF Core migration that normalizes authors by replacing an Author string column on Ebooks with an Authors table and an AuthorId FK, and provides the inverse Down migration.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1jcp5tl:updatesubscriptionplanisunlimitedtokens",
      "kind": "class",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "canonicalName": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "shortLabel": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "longLabel": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "purpose": "EF Core migration designer that builds the target EF Core model for the migration UpdateSubscriptionPlanIsUnlimitedTokens; contains the model snapshot/configuration (entities, properties, indexes, relations, and seed data) used by EF migrations.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1jh8uof:fixknowledgeunitebookid",
      "kind": "class",
      "fileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "canonicalName": "FixKnowledgeUnitEbookId",
      "shortLabel": "FixKnowledgeUnitEbookId",
      "longLabel": "FixKnowledgeUnitEbookId",
      "purpose": "EF Core migration that replaces KnowledgeUnits.SourceId (string) with KnowledgeUnits.EbookId (Guid), adds index and FK to Ebooks, and provides the reverse Down migration.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1jtdq7s:error",
      "kind": "class",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "canonicalName": "Error",
      "shortLabel": "Error",
      "longLabel": "Error",
      "purpose": "A Blazor Razor page component that renders an error UI and exposes the current request identifier (from Activity or HttpContext) for diagnostic display.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1jwtkwo:syncservice",
      "kind": "class",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "canonicalName": "SyncService",
      "shortLabel": "SyncService",
      "longLabel": "SyncService",
      "purpose": "Client-side service that establishes a SignalR hub connection to synchronize reading progress (pages) with a remote server, providing debounce logic, event exposure, and lifecycle disposal.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1k2zgaa:ebook",
      "kind": "class",
      "fileId": "file:lcvwj6:ebook-cs",
      "path": "NexusReader.Domain/Entities/Ebook.cs",
      "canonicalName": "Ebook",
      "shortLabel": "Ebook",
      "longLabel": "Ebook",
      "purpose": "Defines the domain entity representing an uploaded or owned e-book, including metadata, relationships (Author, NexusUser), tenancy and ingestion/readiness status for application use and persistence.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "ebook-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1k4its0:authlayout",
      "kind": "class",
      "fileId": "file:18yxzxe:authlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
      "canonicalName": "AuthLayout",
      "shortLabel": "AuthLayout",
      "longLabel": "AuthLayout",
      "purpose": "Blazor layout component that renders a full-screen, fixed authentication shell, injects a shared CSS resource, and renders child content via the layout Body.",
      "domainTags": [
        "nexusreader-ui",
        "layout",
        "authlayout"
      ],
      "technologyTags": [
        "layout-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "authlayout-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1kfpdx9:isyncbroadcaster",
      "kind": "class",
      "fileId": "file:441s21:isyncbroadcaster-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "canonicalName": "ISyncBroadcaster",
      "shortLabel": "ISyncBroadcaster",
      "longLabel": "ISyncBroadcaster",
      "purpose": "Defines an application-layer abstraction for broadcasting real-time synchronization and ingestion progress events to connected client devices (keeps Application layer decoupled from SignalR).",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1kfw737:ingestebookcommandhandler",
      "kind": "class",
      "fileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "canonicalName": "IngestEbookCommandHandler",
      "shortLabel": "IngestEbookCommandHandler",
      "longLabel": "IngestEbookCommandHandler",
      "purpose": "Handles ingestion of an uploaded ebook: saves files to storage, resolves/creates author, creates Ebook entity and persists it to the repository, returning the new Ebook Id or a failure result.",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1kl84eu:addebooklastchapterindex",
      "kind": "class",
      "fileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "canonicalName": "AddEbookLastChapterIndex",
      "shortLabel": "AddEbookLastChapterIndex",
      "longLabel": "AddEbookLastChapterIndex",
      "purpose": "An Entity Framework Core migration that adds an integer LastChapterIndex column (default 0) to the Ebooks table, and can remove it on rollback.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1l2fmrv:serveridentityservice",
      "kind": "class",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "canonicalName": "ServerIdentityService",
      "shortLabel": "ServerIdentityService",
      "longLabel": "ServerIdentityService",
      "purpose": "Provides server-side identity operations for the web app: validating credentials, registering users, reading the authenticated profile, and small no-op token/logout helpers tailored for Blazor Server constraints.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1l7wkbd:normalizeauthor",
      "kind": "class",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "canonicalName": "NormalizeAuthor",
      "shortLabel": "NormalizeAuthor",
      "longLabel": "NormalizeAuthor",
      "purpose": "EF Core migration designer snapshot that defines the target database model for the \"NormalizeAuthor\" migration: maps entities, properties, keys, indices, relationships, and seed data used by migrations at runtime.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1lgm7qp:getreaderpagequeryhandler",
      "kind": "class",
      "fileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "canonicalName": "GetReaderPageQueryHandler",
      "shortLabel": "GetReaderPageQueryHandler",
      "longLabel": "GetReaderPageQueryHandler",
      "purpose": "Query handler that responds to GetReaderPageQuery by delegating to an IEpubReader to fetch a ReaderPageViewModel for a given ebook/chapter and user.",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1lmiwem:mappingconfig",
      "kind": "class",
      "fileId": "file:w6cklc:mappingconfig-cs",
      "path": "NexusReader.Application/Mappings/MappingConfig.cs",
      "canonicalName": "MappingConfig",
      "shortLabel": "MappingConfig",
      "longLabel": "MappingConfig",
      "purpose": "Defines an IServiceCollection extension to configure Mapster mappings and register mapping services (TypeAdapterConfig and IMapper) into the application's DI container.",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "mappings",
          "mappingconfig-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1lzvao4:semanticsearchresultdto",
      "kind": "class",
      "fileId": "file:1k69za4:semanticsearchresultdto-cs",
      "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
      "canonicalName": "SemanticSearchResultDto",
      "shortLabel": "SemanticSearchResultDto",
      "longLabel": "SemanticSearchResultDto",
      "purpose": "Defines a simple Data Transfer Object (DTO) representing a semantic search result used by the Application layer to carry search snippet, relevance and metadata.",
      "domainTags": [
        "semanticsearch",
        "ai",
        "searchresult",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1mgndci:storagekeys",
      "kind": "class",
      "fileId": "file:g197tx:storagekeys-cs",
      "path": "NexusReader.Application/Constants/StorageKeys.cs",
      "canonicalName": "StorageKeys",
      "shortLabel": "StorageKeys",
      "longLabel": "StorageKeys",
      "purpose": "Holds string constant keys used for storing authentication and user-related values in client/app storage (e.g., local storage or secure storage).",
      "domainTags": [
        "authentication",
        "user",
        "nexusreader",
        "constants"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "constants",
          "storagekeys-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1mqu7tw:stripesettings",
      "kind": "class",
      "fileId": "file:faws7u:stripesettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
      "canonicalName": "StripeSettings",
      "shortLabel": "StripeSettings",
      "longLabel": "StripeSettings",
      "purpose": "Defines a configuration model for Stripe-related settings (product IDs) used for binding application configuration (Options pattern).",
      "domainTags": [
        "stripe",
        "billing",
        "products",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-poco"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "stripesettings-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1n4pq65:asklibraryquestionqueryhandler",
      "kind": "class",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "canonicalName": "AskLibraryQuestionQueryHandler",
      "shortLabel": "AskLibraryQuestionQueryHandler",
      "longLabel": "AskLibraryQuestionQueryHandler",
      "purpose": "Defines a MediatR query (AskLibraryQuestionQuery) and its handler which validates input and delegates question answering to an IKnowledgeService, returning a GroundedResponseDto result.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1nsniny:author",
      "kind": "class",
      "fileId": "file:1y56eud:author-cs",
      "path": "NexusReader.Domain/Entities/Author.cs",
      "canonicalName": "Author",
      "shortLabel": "Author",
      "longLabel": "Author",
      "purpose": "Domain entity representing an author with identity, name, and a collection of authored ebooks for persistence and ORM mapping.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "author-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ojuflh:addebooklastchapterindex",
      "kind": "class",
      "fileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "canonicalName": "AddEbookLastChapterIndex",
      "shortLabel": "AddEbookLastChapterIndex",
      "longLabel": "AddEbookLastChapterIndex",
      "purpose": "EF Core migration designer file that captures the target model snapshot for the AddEbookLastChapterIndex migration; used by EF Core to recreate the model/state for migrations and tooling.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1onwz:updatereadingprogresscommand",
      "kind": "class",
      "fileId": "file:xocicc:updatereadingprogresscommand-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
      "canonicalName": "UpdateReadingProgressCommand",
      "shortLabel": "UpdateReadingProgressCommand",
      "longLabel": "UpdateReadingProgressCommand",
      "purpose": "Defines a MediatR command record that carries data for updating a user's reading progress for an ebook (used in sync operations).",
      "domainTags": [
        "readingprogress",
        "ebook",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1opd2vh:getuserprofilequery",
      "kind": "class",
      "fileId": "file:vjfxh7:getuserprofilequery-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
      "canonicalName": "GetUserProfileQuery",
      "shortLabel": "GetUserProfileQuery",
      "longLabel": "GetUserProfileQuery",
      "purpose": "Defines a MediatR query message used to request a user's profile (UserProfileDto) by user id.",
      "domainTags": [
        "user",
        "userprofile",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-request-message"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1owrs1t:inativestorageservice",
      "kind": "class",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "canonicalName": "INativeStorageService",
      "shortLabel": "INativeStorageService",
      "longLabel": "INativeStorageService",
      "purpose": "Defines an application-level abstraction for platform/native key-value storage including secure and non-secure reads, writes, and removals.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1oxys0a:epubmetadataextractor",
      "kind": "class",
      "fileId": "file:d3gg9l:epubmetadataextractor-cs",
      "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "canonicalName": "EpubMetadataExtractor",
      "shortLabel": "EpubMetadataExtractor",
      "longLabel": "EpubMetadataExtractor",
      "purpose": "Provides a lightweight infrastructure service that reads metadata (title, author, description, cover image) from an EPUB stream without persisting anything; used by the ingestion UI prior to upload confirmation.",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubmetadataextractor-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1qgqpgy:getknowledgegraphquery",
      "kind": "class",
      "fileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
      "canonicalName": "GetKnowledgeGraphQuery",
      "shortLabel": "GetKnowledgeGraphQuery",
      "longLabel": "GetKnowledgeGraphQuery",
      "purpose": "Defines a CQRS query record used to request a knowledge graph extraction from provided text within a tenant scope and optional ebook context.",
      "domainTags": [
        "knowledge-graph",
        "tenant",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "queryobject"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1qurvhs:login",
      "kind": "class",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "canonicalName": "Login",
      "shortLabel": "Login",
      "longLabel": "Login",
      "purpose": "Razor UI page for user login: renders email/password and Google auth UI, validates input, calls identity service to authenticate, and triggers a hidden form JS submission for cookie-based sign-in.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1r9yuyl:subscriptionplandto",
      "kind": "class",
      "fileId": "file:9775p0:subscriptionplandto-cs",
      "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
      "canonicalName": "SubscriptionPlanDto",
      "shortLabel": "SubscriptionPlanDto",
      "longLabel": "SubscriptionPlanDto",
      "purpose": "Defines a data-transfer object representing a subscription plan (id, display name, token limits, and monthly price) used across the application layer.",
      "domainTags": [
        "subscriptionplan",
        "billing",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record-c-9"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1t4ptj6:dbinitializer",
      "kind": "class",
      "fileId": "file:136c3oe:dbinitializer-cs",
      "path": "NexusReader.Data/Persistence/DbInitializer.cs",
      "canonicalName": "DbInitializer",
      "shortLabel": "DbInitializer",
      "longLabel": "DbInitializer",
      "purpose": "Database seeder that runs at application startup to ensure initial data (subscription plans, roles, admin user, sample author and ebook) exist in the AppDbContext.",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "boundary": {
        "role": "bootstrap",
        "layer": "data",
        "boundaryHints": [
          "bootstrap",
          "data",
          "nexusreader-data",
          "persistence",
          "dbinitializer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1t69b7g:quizstateservice",
      "kind": "class",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "canonicalName": "QuizStateService",
      "shortLabel": "QuizStateService",
      "longLabel": "QuizStateService",
      "purpose": "In-memory UI/shared service that holds quiz-related state (current quiz, block id, hydration and new-quiz flag) and notifies subscribers via events when the quiz is requested or updated.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1tn889i:currentreadingwidget",
      "kind": "class",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "canonicalName": "CurrentReadingWidget",
      "shortLabel": "CurrentReadingWidget",
      "longLabel": "CurrentReadingWidget",
      "purpose": "Blazor UI component that displays the user's current reading/book progress card and provides navigation actions to continue reading or go to the library.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1uirugg:webstorageservice",
      "kind": "class",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "canonicalName": "WebStorageService",
      "shortLabel": "WebStorageService",
      "longLabel": "WebStorageService",
      "purpose": "Provides a web-local-storage backed implementation of INativeStorageService for Blazor/JS runtime using IJSRuntime to persist and read simple string/bool values with Result wrapping and basic error handling.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1v2rkom:appdbcontextmodelsnapshot",
      "kind": "class",
      "fileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "canonicalName": "AppDbContextModelSnapshot",
      "shortLabel": "AppDbContextModelSnapshot",
      "longLabel": "AppDbContextModelSnapshot",
      "purpose": "EF Core model snapshot that records the database model (entities, properties, indexes, relationships, and seed data) for AppDbContext so migrations can compare model changes at runtime.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "appdbcontextmodelsnapshot-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1v3riqz:error",
      "kind": "class",
      "fileId": "file:1awldsb:error-razor",
      "path": "NexusReader.Web/Components/Error.razor",
      "canonicalName": "Error",
      "shortLabel": "Error",
      "longLabel": "Error",
      "purpose": "Blazor UI component that displays a generic error message and, when available, expandable technical details from an Exception parameter.",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "error-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1vvya1l:localepubmetadata",
      "kind": "class",
      "fileId": "file:485hwz:localepubmetadata-cs",
      "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
      "canonicalName": "LocalEpubMetadata",
      "shortLabel": "LocalEpubMetadata",
      "longLabel": "LocalEpubMetadata",
      "purpose": "Defines a simple data transfer shape that carries metadata extracted from a local EPUB file (title, author, cover bytes, description).",
      "domainTags": [
        "epub",
        "book",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1wekmss:relevantcontext",
      "kind": "class",
      "fileId": "file:q380me:relevantcontext-cs",
      "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
      "canonicalName": "RelevantContext",
      "shortLabel": "RelevantContext",
      "longLabel": "RelevantContext",
      "purpose": "Defines a small data transfer object that carries a piece of text along with its source identifier and a confidence score for AI/processing scenarios.",
      "domainTags": [
        "relevantcontext",
        "ai-context",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "data-transfer-object-dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "kind": "class",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "canonicalName": "SearchLibrarySemanticallyQueryHandler",
      "shortLabel": "SearchLibrarySemanticallyQueryHandler",
      "longLabel": "SearchLibrarySemanticallyQueryHandler",
      "purpose": "Provides a MediatR query and handler that performs a semantic search over a tenant-scoped semantic knowledge cache: it generates an embedding for the input query (with retry), runs a vector similarity DB query, maps results to DTOs, and returns them.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1x9y5vk:promptregistry",
      "kind": "class",
      "fileId": "file:ha7eft:promptregistry-cs",
      "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
      "canonicalName": "PromptRegistry",
      "shortLabel": "PromptRegistry",
      "longLabel": "PromptRegistry",
      "purpose": "Holds centralized, reusable LLM prompt templates and schemas used by the infrastructure layer for knowledge extraction, graph extraction, summary/quiz generation, and KM segmentation.",
      "domainTags": [
        "knowledge-extraction",
        "knowledge-graph",
        "quiz-generation",
        "knowledge-unit-segmentation"
      ],
      "technologyTags": [
        "dotnet",
        "registry",
        "constants"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "promptregistry-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1xcfdo4:isyncservice",
      "kind": "class",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "canonicalName": "ISyncService",
      "shortLabel": "ISyncService",
      "longLabel": "ISyncService",
      "purpose": "Defines a shared synchronization service contract for reporting and receiving ebook reading progress within UI layers.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1xhm2de:initialpostgres",
      "kind": "class",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "canonicalName": "InitialPostgres",
      "shortLabel": "InitialPostgres",
      "longLabel": "InitialPostgres",
      "purpose": "An Entity Framework Core migration that creates the initial PostgreSQL schema for identity tables, application user/ebook tables and a semantic knowledge cache for the NexusReader application.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1y1hevk:iknowledgegraphservice",
      "kind": "class",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "canonicalName": "IKnowledgeGraphService",
      "shortLabel": "IKnowledgeGraphService",
      "longLabel": "IKnowledgeGraphService",
      "purpose": "Defines the UI-shared contract for a knowledge-graph state service: read-only state properties, events for change notifications, and async commands to update/clear state.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ybxixo:knowledgeservice",
      "kind": "class",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "canonicalName": "KnowledgeService",
      "shortLabel": "KnowledgeService",
      "longLabel": "KnowledgeService",
      "purpose": "Infrastructure implementation of IKnowledgeService: orchestrates retrieval/creation of structured knowledge from text using AI, caches results in Postgres, de-duplicates concurrent requests, stores/updates KnowledgeUnits and links, and provides RAG search/grounding via Qdrant + Neo4j.",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1yjf0sw:nexusauthenticationstateprovider",
      "kind": "class",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "canonicalName": "NexusAuthenticationStateProvider",
      "shortLabel": "NexusAuthenticationStateProvider",
      "longLabel": "NexusAuthenticationStateProvider",
      "purpose": "Provides Blazor AuthenticationStateProvider implementation that reads persisted user authentication info (token, email, tenant, roles) from a native secure storage service, caches the computed AuthenticationState, and notifies consumers about authentication changes.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:1ynrixc:epubreaderservice",
      "kind": "class",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "canonicalName": "EpubReaderService",
      "shortLabel": "EpubReaderService",
      "longLabel": "EpubReaderService",
      "purpose": "Service that locates an EPUB file for an ebook in the DB, reads and parses a chapter into content blocks (text segments and AI-trigger blocks) for the reader UI.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "class",
      "fileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "canonicalName": "UpdateReadingProgressCommandHandler",
      "shortLabel": "UpdateReadingProgressCommandHandler",
      "longLabel": "UpdateReadingProgressCommandHandler",
      "purpose": "MediatR handler that persists a user's reading position (User and Ebook entities) and broadcasts the progress update to other connected devices.",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:36xxdc:iquizstateservice",
      "kind": "class",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "canonicalName": "IQuizStateService",
      "shortLabel": "IQuizStateService",
      "longLabel": "IQuizStateService",
      "purpose": "Defines the UI-shared contract for a quiz state service used by frontend components to read quiz state, request quizzes, and signal updates.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:3a8sch:addquizresults",
      "kind": "class",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "canonicalName": "AddQuizResults",
      "shortLabel": "AddQuizResults",
      "longLabel": "AddQuizResults",
      "purpose": "EF Core migration that adds a new QuizResults table (with columns, PK, FK to AspNetUsers, and an index) and provides rollback to drop it.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:3ugxc0:groundednessbadge",
      "kind": "class",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "canonicalName": "GroundednessBadge",
      "shortLabel": "GroundednessBadge",
      "longLabel": "GroundednessBadge",
      "purpose": "Blazor UI component that displays a groundedness badge for an Answer relative to a Context by invoking an application verification command and showing status, icon and rationale.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:42ukrv:prouserrequirement",
      "kind": "class",
      "fileId": "file:1vi6r42:prouserrequirement-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
      "canonicalName": "ProUserRequirement",
      "shortLabel": "ProUserRequirement",
      "longLabel": "ProUserRequirement",
      "purpose": "Defines an authorization requirement used to gate features to users with an active \"Pro\" subscription or sufficient AI tokens.",
      "domainTags": [
        "pro-subscription",
        "ai-tokens",
        "authorization-requirement",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-policy"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "application",
        "boundaryHints": [
          "middleware",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:471u2p:mainapplication",
      "kind": "class",
      "fileId": "file:p180ke:mainapplication-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "canonicalName": "MainApplication",
      "shortLabel": "MainApplication",
      "longLabel": "MainApplication",
      "purpose": "Android platform entry for the MAUI app; provides the Android Application subclass that creates the MauiApp via MauiProgram and surfaces startup logging and error reporting.",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:4nrp60:iquery-tresponse",
      "kind": "class",
      "fileId": "file:1k4g04u:iquery-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
      "canonicalName": "IQuery<TResponse>",
      "shortLabel": "IQuery<TResponse>",
      "longLabel": "IQuery<TResponse>",
      "purpose": "Defines a generic marker/query contract for application queries that return a FluentResults-wrapped response via MediatR.",
      "domainTags": [
        "query",
        "result-t",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediator",
        "result-wrapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:4p0c5r:addebookreadyflag",
      "kind": "class",
      "fileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "canonicalName": "AddEbookReadyFlag",
      "shortLabel": "AddEbookReadyFlag",
      "longLabel": "AddEbookReadyFlag",
      "purpose": "EF Core migration designer snapshot that builds the target model for the migration AddEbookReadyFlag; it defines tables, columns, indexes, relationships, Postgres extensions and seed data used to represent the current schema in code.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:588td0:updatesubscriptionplanisunlimitedtokens",
      "kind": "class",
      "fileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "canonicalName": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "shortLabel": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "longLabel": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "purpose": "EF Core migration that adds an IsUnlimitedTokens column to the SubscriptionPlans table and adjusts seeded SubscriptionPlans data (AITokenLimit and StripeProductId) to reflect the new column; reversible via Down.",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:59bgj0:planconstants",
      "kind": "class",
      "fileId": "file:qqutlm:planconstants-cs",
      "path": "NexusReader.Application/Constants/PlanConstants.cs",
      "canonicalName": "PlanConstants",
      "shortLabel": "PlanConstants",
      "longLabel": "PlanConstants",
      "purpose": "Holds application-wide default constants for plan behavior (default plan name, token limit, and activity label).",
      "domainTags": [
        "plan",
        "tokenlimit",
        "activitylabel",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "application",
        "boundaryHints": [
          "unknown",
          "application",
          "nexusreader-application",
          "constants",
          "planconstants-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:5jkcay:dependencyinjection",
      "kind": "class",
      "fileId": "file:qieb5i:dependencyinjection-cs",
      "path": "NexusReader.Application/DependencyInjection.cs",
      "canonicalName": "DependencyInjection",
      "shortLabel": "DependencyInjection",
      "longLabel": "DependencyInjection",
      "purpose": "Provides Application-layer dependency registrations (mappings, MediatR) and exposes the assembly for registration discovery.",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:5wh0z0:selectionaipanel",
      "kind": "class",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "canonicalName": "SelectionAiPanel",
      "shortLabel": "SelectionAiPanel",
      "longLabel": "SelectionAiPanel",
      "purpose": "Blazor UI component that shows an AI assistant panel for a user text selection, requests summaries/quizzes via an injected KnowledgeCoordinator, and notifies the reader interaction service when closed.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "class",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "canonicalName": "SignalRSyncBroadcaster",
      "shortLabel": "SignalRSyncBroadcaster",
      "longLabel": "SignalRSyncBroadcaster",
      "purpose": "Provides a SignalR-based implementation of ISyncBroadcaster to push sync and ingestion progress updates to a user's connected devices via IHubContext<SyncHub>.",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:8viv8y:mainpage",
      "kind": "class",
      "fileId": "file:ua9rra:mainpage-xaml-cs",
      "path": "NexusReader.Maui/MainPage.xaml.cs",
      "canonicalName": "MainPage",
      "shortLabel": "MainPage",
      "longLabel": "MainPage",
      "purpose": "Defines a MAUI UI page class (MainPage) that initializes its XAML-backed view. Minimal code-behind that calls the generated InitializeComponent to build the UI.",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-maui",
          "mainpage-xaml-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:904yf3:getinitializationstatusquery",
      "kind": "class",
      "fileId": "file:1m26se1:getinitializationstatusquery-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
      "canonicalName": "GetInitializationStatusQuery",
      "shortLabel": "GetInitializationStatusQuery",
      "longLabel": "GetInitializationStatusQuery",
      "purpose": "Defines a CQRS query message used to request the application's initialization status (string) from the Application layer.",
      "domainTags": [
        "initializationstatus",
        "nexusreader",
        "queries",
        "system"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "query-object"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:9ftatg:addquizresults",
      "kind": "class",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "canonicalName": "AddQuizResults",
      "shortLabel": "AddQuizResults",
      "longLabel": "AddQuizResults",
      "purpose": "EF Core migration designer that defines the target database model (tables, columns, keys, indices, and relationships) for the AddQuizResults migration.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:9gxpik:ireadernavigationservice",
      "kind": "class",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "canonicalName": "IReaderNavigationService",
      "shortLabel": "IReaderNavigationService",
      "longLabel": "IReaderNavigationService",
      "purpose": "Defines the shared UI navigation contract for an ebook reader (state, navigation commands, metadata updates and an event to notify consumers).",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:9rdcag:tokenlimitrequirement",
      "kind": "class",
      "fileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
      "canonicalName": "TokenLimitRequirement",
      "shortLabel": "TokenLimitRequirement",
      "longLabel": "TokenLimitRequirement",
      "purpose": "Defines an authorization requirement type used to represent a policy that checks whether a user has exceeded an AI token limit.",
      "domainTags": [
        "tokenlimit",
        "authorization-policy",
        "nexusreader",
        "identity"
      ],
      "technologyTags": [
        "dotnet",
        "policy-based-authorization",
        "requirement-authorizationrequirement"
      ],
      "boundary": {
        "role": "entity",
        "layer": "unknown",
        "boundaryHints": [
          "entity",
          "unknown",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimitrequirement-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:a8yza:app",
      "kind": "class",
      "fileId": "file:62lucr:app-xaml-cs",
      "path": "NexusReader.Maui/App.xaml.cs",
      "canonicalName": "App",
      "shortLabel": "App",
      "longLabel": "App",
      "purpose": "Defines the MAUI Application subclass for the app and sets up the initial UI by initializing XAML components and assigning the MainPage.",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "app-xaml-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:andjgd:submitanswercommandhandler",
      "kind": "class",
      "fileId": "file:hc4koi:submitanswercommandhandler-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
      "canonicalName": "SubmitAnswerCommandHandler",
      "shortLabel": "SubmitAnswerCommandHandler",
      "longLabel": "SubmitAnswerCommandHandler",
      "purpose": "Handles quiz answer submission: verifies the selected answer against the correct index, triggers a platform vibration on correct answers, and returns a success/failure Result.",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:byhisx:ingestebookcommand",
      "kind": "class",
      "fileId": "file:1tk8lz4:ingestebookcommand-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
      "canonicalName": "IngestEbookCommand",
      "shortLabel": "IngestEbookCommand",
      "longLabel": "IngestEbookCommand",
      "purpose": "Defines a CQRS command DTO used to ingest a new ebook into the library, carrying ebook metadata and binary payloads (cover and EPUB) across the application boundary.",
      "domainTags": [
        "ebook",
        "library",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:c49vab:nexussearchbox",
      "kind": "class",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "canonicalName": "NexusSearchBox",
      "shortLabel": "NexusSearchBox",
      "longLabel": "NexusSearchBox",
      "purpose": "A Blazor UI component that renders a search input, exposes parameters for placeholder/icon, tracks local search text, invokes a parent-provided search callback when Enter is pressed, and allows clearing the input.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:cmiilf:submitanswercommand",
      "kind": "class",
      "fileId": "file:dskay:submitanswercommand-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
      "canonicalName": "SubmitAnswerCommand",
      "shortLabel": "SubmitAnswerCommand",
      "longLabel": "SubmitAnswerCommand",
      "purpose": "Defines a simple application command that carries a quiz answer selection (selected index and correct index) to be handled by the application's command pipeline.",
      "domainTags": [
        "quiz",
        "answer-submission",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:cps3pc:globalintelligencepanel",
      "kind": "class",
      "fileId": "file:1niza9w:globalintelligencepanel-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "canonicalName": "GlobalIntelligencePanel",
      "shortLabel": "GlobalIntelligencePanel",
      "longLabel": "GlobalIntelligencePanel",
      "purpose": "Blazor UI component that renders a 'Global Intelligence' semantic search panel, shows loading/results/empty states, and forwards search queries via an EventCallback.",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "globalintelligencepanel-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:daunpv:iqueryhandler",
      "kind": "class",
      "fileId": "file:ayj9r2:iqueryhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "canonicalName": "IQueryHandler",
      "shortLabel": "IQueryHandler",
      "longLabel": "IQueryHandler",
      "purpose": "Declares an application-layer abstraction for handling queries (CQRS) where handlers return a FluentResults.Result<TResponse> via MediatR.",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:dceqku:tokenlimithandler",
      "kind": "class",
      "fileId": "file:38gozs:tokenlimithandler-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "canonicalName": "TokenLimitHandler",
      "shortLabel": "TokenLimitHandler",
      "longLabel": "TokenLimitHandler",
      "purpose": "Authorization handler that enforces per-user AI token limits by loading the user and their subscription from the DB and succeeding the requirement when tokens remain or the plan is unlimited.",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "infrastructure",
        "boundaryHints": [
          "middleware",
          "infrastructure",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimithandler-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:e0216a:semanticknowledgecache",
      "kind": "class",
      "fileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "canonicalName": "SemanticKnowledgeCache",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "SemanticKnowledgeCache",
      "purpose": "Defines a domain entity that persists cached semantic knowledge (original text, model/prompt metadata, JSON payload) and its vector embedding for semantic search.",
      "domainTags": [
        "semanticknowledgecache",
        "embedding",
        "modelid",
        "promptversion"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-mapped-model-ef-core-style-with-data-annotations",
        "embedding-cache"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "semanticknowledgecache-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:euc6fx:iepubreader",
      "kind": "class",
      "fileId": "file:1mo9e25:iepubreader-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "canonicalName": "IEpubReader",
      "shortLabel": "IEpubReader",
      "longLabel": "IEpubReader",
      "purpose": "Defines the application service contract for reading and parsing EPUB content for a specific ebook and chapter (async, tenant-aware).",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubreader-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:fhmi44:webplatformservice",
      "kind": "class",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "canonicalName": "WebPlatformService",
      "shortLabel": "WebPlatformService",
      "longLabel": "WebPlatformService",
      "purpose": "Concrete Web platform implementation of IPlatformService for the Blazor Web client: exposes device context and a vibration API via JS interop, returning FluentResults for error propagation.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:frxocr:ebookrepository",
      "kind": "class",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "canonicalName": "EbookRepository",
      "shortLabel": "EbookRepository",
      "longLabel": "EbookRepository",
      "purpose": "EF Core implementation of the IEbookRepository providing data access for Ebook and Author entities; contains search, add and save operations with provider-specific behavior for case-insensitive author lookup.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:fvtez6:knowledgeunit",
      "kind": "class",
      "fileId": "file:h6a0xu:knowledgeunit-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "canonicalName": "KnowledgeUnit",
      "shortLabel": "KnowledgeUnit",
      "longLabel": "KnowledgeUnit",
      "purpose": "Defines the domain entity KnowledgeUnit representing a unit of extracted/ingested knowledge (content, type, metadata, links) stored per tenant with EF Core mapping attributes.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunit-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:g9nkgg:library",
      "kind": "class",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "canonicalName": "Library",
      "shortLabel": "Library",
      "longLabel": "Library",
      "purpose": "Blazor UI page that displays the user's library of e-books, loads last-read book summaries from the API, and provides UI to ingest new books or open a selected book.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:gamvik:bookstorageservice",
      "kind": "class",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "canonicalName": "BookStorageService",
      "shortLabel": "BookStorageService",
      "longLabel": "BookStorageService",
      "purpose": "Provides an infrastructure service that persists ebook and cover files to the local web root filesystem and returns web-relative paths for stored assets.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:gqmtg:readerfooter",
      "kind": "class",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "canonicalName": "ReaderFooter",
      "shortLabel": "ReaderFooter",
      "longLabel": "ReaderFooter",
      "purpose": "Blazor UI component that renders the reader footer: chapter navigation, progress bar and meta info; observes navigation changes to update UI.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:ir9z2o:iebookrepository",
      "kind": "class",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "canonicalName": "IEbookRepository",
      "shortLabel": "IEbookRepository",
      "longLabel": "IEbookRepository",
      "purpose": "Defines the application-layer abstraction for ebook and author persistence operations (repository interface) so the Application layer can depend on an interface rather than EF Core or other infra implementations.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:jfh85m:home",
      "kind": "class",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "canonicalName": "Home",
      "shortLabel": "Home",
      "longLabel": "Home",
      "purpose": "Razor UI page for the Nexus E-Reader reader experience: mounts the ReaderCanvas, handles navigation/book selection from route/query or user profile, wires UI events (quiz, focus mode), initializes JS focus interop, and cleans up resources on disposal.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:jm4wx0:mauistorageservice",
      "kind": "class",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "canonicalName": "MauiStorageService",
      "shortLabel": "MauiStorageService",
      "longLabel": "MauiStorageService",
      "purpose": "Provides a MAUI-specific implementation of INativeStorageService that wraps Preferences and SecureStorage to persist simple keys/values, returning FluentResults and converting exceptions to failure results.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:jvil15:authenticationheaderhandler",
      "kind": "class",
      "fileId": "file:17v8pus:authenticationheaderhandler-cs",
      "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "canonicalName": "AuthenticationHeaderHandler",
      "shortLabel": "AuthenticationHeaderHandler",
      "longLabel": "AuthenticationHeaderHandler",
      "purpose": "A HTTP DelegatingHandler for the client that appends stored JWTs to trusted requests, forces browser credentials for SSR, and transparently refreshes expired tokens in a thread-safe manner.",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "handler",
        "layer": "infrastructure",
        "boundaryHints": [
          "handler",
          "infrastructure",
          "nexusreader-web-client",
          "handlers",
          "authenticationheaderhandler-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:k4fx0v:dependencyinjection",
      "kind": "class",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "canonicalName": "DependencyInjection",
      "shortLabel": "DependencyInjection",
      "longLabel": "DependencyInjection",
      "purpose": "Registers and configures infrastructure services (persistence, external clients, AI/embedding, background jobs, authorization, and scoped application services) into the DI container for the NexusReader application.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:kshwxo:addebookprogressandchapter",
      "kind": "class",
      "fileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "canonicalName": "AddEbookProgressAndChapter",
      "shortLabel": "AddEbookProgressAndChapter",
      "longLabel": "AddEbookProgressAndChapter",
      "purpose": "EF Core migration that adds two columns (LastChapter, Progress) to the Ebooks table and provides a Down method to remove them.",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:lhjxtl:ibookstorageservice",
      "kind": "class",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "canonicalName": "IBookStorageService",
      "shortLabel": "IBookStorageService",
      "longLabel": "IBookStorageService",
      "purpose": "Defines an application-level abstraction for saving ebook and cover files, returning relative paths/URLs; implementations handle actual storage persistence.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:lvxelt:contenthasher",
      "kind": "class",
      "fileId": "file:13kvr59:contenthasher-cs",
      "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "canonicalName": "ContentHasher",
      "shortLabel": "ContentHasher",
      "longLabel": "ContentHasher",
      "purpose": "Provides deterministic normalization and SHA-256 hashing for content strings used across the infrastructure (e.g., content fingerprinting / cache keys).",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "contenthasher-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:mi743e:increasehashlength",
      "kind": "class",
      "fileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "canonicalName": "IncreaseHashLength",
      "shortLabel": "IncreaseHashLength",
      "longLabel": "IncreaseHashLength",
      "purpose": "EF Core migration designer for the IncreaseHashLength migration; describes the target EF Core model (entities, properties, indexes, relationships) used by migrations and tooling.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:mqaz6:knowledgeunitlink",
      "kind": "class",
      "fileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "canonicalName": "KnowledgeUnitLink",
      "shortLabel": "KnowledgeUnitLink",
      "longLabel": "KnowledgeUnitLink",
      "purpose": "Defines the domain entity KnowledgeUnitLink which models a directed relation between two KnowledgeUnit entities with metadata (relation type) and EF Core persistence annotations.",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunitlink-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:nsawvo:intelligencetoolbar",
      "kind": "class",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "canonicalName": "IntelligenceToolbar",
      "shortLabel": "IntelligenceToolbar",
      "longLabel": "IntelligenceToolbar",
      "purpose": "Blazor UI component that provides an intelligence/AI toolbar with navigation, focus mode toggle, cache clearing and logout actions; wires UI events to injected services and updates UI state on FocusMode changes.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:ogoid1:jsonrepairhelper",
      "kind": "class",
      "fileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "canonicalName": "JsonRepairHelper",
      "shortLabel": "JsonRepairHelper",
      "longLabel": "JsonRepairHelper",
      "purpose": "Utility that attempts to repair truncated or malformed JSON strings by pruning trailing garbage and appending necessary closing quotes/brackets/braces.",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "jsonrepairhelper-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:oyj9xs:focusmodeservice",
      "kind": "class",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "canonicalName": "FocusModeService",
      "shortLabel": "FocusModeService",
      "longLabel": "FocusModeService",
      "purpose": "Provides a UI-scoped service that tracks and persists a 'focus mode' flag using IJSRuntime (localStorage) and notifies subscribers when the mode changes.",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:p0no6:getknowledgegraphqueryhandler",
      "kind": "class",
      "fileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "canonicalName": "GetKnowledgeGraphQueryHandler",
      "shortLabel": "GetKnowledgeGraphQueryHandler",
      "longLabel": "GetKnowledgeGraphQueryHandler",
      "purpose": "Handles GetKnowledgeGraphQuery by validating input, calling the knowledge service to retrieve graph data, and returning a GraphDataDto wrapped in a FluentResults Result.",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:potzj8:appjsoncontext",
      "kind": "class",
      "fileId": "file:wxheam:appjsoncontext-cs",
      "path": "NexusReader.Application/Common/AppJsonContext.cs",
      "canonicalName": "AppJsonContext",
      "shortLabel": "AppJsonContext",
      "longLabel": "AppJsonContext",
      "purpose": "Defines a System.Text.Json source-generated JsonSerializerContext for Graph DTO types used by the application, enabling ahead-of-time serialization metadata and configuration (WriteIndented = true).",
      "domainTags": [
        "graph",
        "graphnode",
        "graphlink",
        "graphdata"
      ],
      "technologyTags": [
        "dotnet",
        "source-generator",
        "serialization-context"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "appjsoncontext-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:q7xqjm:nexususer",
      "kind": "class",
      "fileId": "file:xcxh5w:nexususer-cs",
      "path": "NexusReader.Domain/Entities/NexusUser.cs",
      "canonicalName": "NexusUser",
      "shortLabel": "NexusUser",
      "longLabel": "NexusUser",
      "purpose": "Domain entity representing an application user, extending ASP.NET IdentityUser with multi-tenant, subscription and usage tracking plus navigation collections for related domain data.",
      "domainTags": [
        "user",
        "tenant",
        "subscriptionplan",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "nexususer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:qlxnhj:ibillingservice",
      "kind": "class",
      "fileId": "file:rfn6bc:ibillingservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "canonicalName": "IBillingService",
      "shortLabel": "IBillingService",
      "longLabel": "IBillingService",
      "purpose": "Defines an application-layer billing service abstraction that declares handlers for subscription updates and deletions (used by infrastructure implementations to react to Stripe/customer events).",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibillingservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:rcx5lg:wasmknowledgeservice",
      "kind": "class",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "canonicalName": "WasmKnowledgeService",
      "shortLabel": "WasmKnowledgeService",
      "longLabel": "WasmKnowledgeService",
      "purpose": "Blazor WebAssembly client implementation of IKnowledgeService that calls backend /api/knowledge endpoints to provide semantic search, QA, summaries, maps, and cache operations.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:rzlm6n:nexusicon",
      "kind": "class",
      "fileId": "file:q8opk3:nexusicon-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "canonicalName": "NexusIcon",
      "shortLabel": "NexusIcon",
      "longLabel": "NexusIcon",
      "purpose": "Razor UI component that renders an SVG icon by name; maps a string Name to concrete SVG paths and exposes common component parameters (Size, Class, AdditionalAttributes).",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusicon-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:scmh0y:readercanvas",
      "kind": "class",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "canonicalName": "ReaderCanvas",
      "shortLabel": "ReaderCanvas",
      "longLabel": "ReaderCanvas",
      "purpose": "Razor UI component that renders an ebook reader canvas, manages chapter loading, selection/highlight UX, JS observers/selection interop, and synchronizes reading progress across devices.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:tfj298:adddescriptiontoebook",
      "kind": "class",
      "fileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "canonicalName": "AddDescriptionToEbook",
      "shortLabel": "AddDescriptionToEbook",
      "longLabel": "AddDescriptionToEbook",
      "purpose": "EF Core migration designer for 'AddDescriptionToEbook' that defines the target EF Core model snapshot (tables, columns, keys, indexes, relationships) and seeds subscription plan data for the database migration.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:tkzvf7:finalnormalizedsubscriptionarchitecture",
      "kind": "class",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "canonicalName": "FinalNormalizedSubscriptionArchitecture",
      "shortLabel": "FinalNormalizedSubscriptionArchitecture",
      "longLabel": "FinalNormalizedSubscriptionArchitecture",
      "purpose": "EF Core migration that alters database schema to introduce normalized subscription plans, tenant scoping, vector columns (pgvector), and related knowledge unit tables; also seeds subscription plan rows.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:twnl84:bookingestionmodal",
      "kind": "class",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "canonicalName": "BookIngestionModal",
      "shortLabel": "BookIngestionModal",
      "longLabel": "BookIngestionModal",
      "purpose": "Razor UI component that provides a modal for uploading .epub files, extracting metadata client-side, and sending an ingest request to the server to add a book to the user's library.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:tx0x5k:mauiplatformservice",
      "kind": "class",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "canonicalName": "MauiPlatformService",
      "shortLabel": "MauiPlatformService",
      "longLabel": "MauiPlatformService",
      "purpose": "MAUI platform implementation of IPlatformService providing device context and haptic/vibration behaviors for the mobile app.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:utixgx:iknowledgeservice",
      "kind": "class",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "canonicalName": "IKnowledgeService",
      "shortLabel": "IKnowledgeService",
      "longLabel": "IKnowledgeService",
      "purpose": "Defines the application-level abstraction for knowledge-related operations (semantic search, summarization, QA, groundedness checks, cache management) used by higher-level components.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:veazt0:wasmepubreader",
      "kind": "class",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "canonicalName": "WasmEpubReader",
      "shortLabel": "WasmEpubReader",
      "longLabel": "WasmEpubReader",
      "purpose": "Provides WebAssembly/client-side implementations for reading EPUB content and extracting EPUB metadata in-browser using HttpClient and a local EPUB library.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:vf4020:mainhublayout",
      "kind": "class",
      "fileId": "file:1ain1yo:mainhublayout-razor",
      "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "canonicalName": "MainHubLayout",
      "shortLabel": "MainHubLayout",
      "longLabel": "MainHubLayout",
      "purpose": "Renders the main application hub layout (sidebar + main content) for authenticated users and coordinates initial identity sync and logout behavior.",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "mainhublayout-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:vgmc9n:userprofiledto",
      "kind": "class",
      "fileId": "file:1fs0p2c:userprofiledto-cs",
      "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "canonicalName": "UserProfileDto",
      "shortLabel": "UserProfileDto",
      "longLabel": "UserProfileDto",
      "purpose": "Defines DTOs for returning user profile and last-read book information across the application boundary (UI/API), including helper computed properties for UI compatibility.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:vgua1e:identityservice",
      "kind": "class",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "canonicalName": "IdentityService",
      "shortLabel": "IdentityService",
      "longLabel": "IdentityService",
      "purpose": "Client-side identity helper used by UI layers to register, login, logout, refresh tokens and fetch/cached user profile information; bridges HttpClient, native secure storage and the app authentication state provider.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:vspg7j:nexustypography",
      "kind": "class",
      "fileId": "file:184ajmn:nexustypography-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "canonicalName": "NexusTypography",
      "shortLabel": "NexusTypography",
      "longLabel": "NexusTypography",
      "purpose": "Blazor UI component that renders typographic content with a variant-driven CSS class and supports arbitrary additional HTML attributes and child content.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexustypography-razor"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:vyfiaz:nativestorageservice",
      "kind": "class",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "canonicalName": "NativeStorageService",
      "shortLabel": "NativeStorageService",
      "longLabel": "NativeStorageService",
      "purpose": "Provides a server-side Blazor implementation of INativeStorageService that reads/writes browser localStorage via IJSRuntime, with protections for prerendering/JS-unavailable scenarios and Result-based error handling.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:w9vxji:ireaderinteractionservice",
      "kind": "class",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "canonicalName": "IReaderInteractionService",
      "shortLabel": "IReaderInteractionService",
      "longLabel": "IReaderInteractionService",
      "purpose": "Defines an interface for UI-level reader interactions (node/block selection, scrolling, highlighting, and text selection) and a small DTO for selection coordinates used across UI clients.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:wtyati:appdbcontext",
      "kind": "class",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "canonicalName": "AppDbContext",
      "shortLabel": "AppDbContext",
      "longLabel": "AppDbContext",
      "purpose": "Defines the Entity Framework Core database context for the application: DbSet surface, EF configuration, model mapping (indexes, FKs, delete behavior), provider-specific type mapping, and deterministic seed data for subscription plans.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:xbp5rm:quizresult",
      "kind": "class",
      "fileId": "file:1wyr0y8:quizresult-cs",
      "path": "NexusReader.Domain/Entities/QuizResult.cs",
      "canonicalName": "QuizResult",
      "shortLabel": "QuizResult",
      "longLabel": "QuizResult",
      "purpose": "Domain entity that models and persists the result of an AI-generated quiz taken by a user, including score, totals, tenant scoping and completion timestamp.",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "quizresult-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:z1d2u7:authordto",
      "kind": "class",
      "fileId": "file:e05hy9:authordto-cs",
      "path": "NexusReader.Application/DTOs/User/AuthorDto.cs",
      "canonicalName": "AuthorDto",
      "shortLabel": "AuthorDto",
      "longLabel": "AuthorDto",
      "purpose": "Defines an immutable data transfer object (DTO) representing an author with an Id and Name used across the application layer.",
      "domainTags": [
        "author",
        "user",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "immutable-record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:z6s0dl:getreaderpagequery",
      "kind": "class",
      "fileId": "file:9lh011:getreaderpagequery-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
      "canonicalName": "GetReaderPageQuery",
      "shortLabel": "GetReaderPageQuery",
      "longLabel": "GetReaderPageQuery",
      "purpose": "Defines a CQRS query record used to request a specific ebook chapter (reader page) for a given user/tenant, returning a ReaderPageViewModel.",
      "domainTags": [
        "ebook",
        "reader",
        "chapter",
        "tenant-user"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:zdhkb2:knowledgegraphservice",
      "kind": "class",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "canonicalName": "KnowledgeGraphService",
      "shortLabel": "KnowledgeGraphService",
      "longLabel": "KnowledgeGraphService",
      "purpose": "In-memory UI/shared service that holds the current knowledge graph state (GraphDataDto), active node id, loading flag, and publishes change notifications via events for UI consumers.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "class:zj074q:finalnormalizedsubscriptionarchitecture",
      "kind": "class",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "canonicalName": "FinalNormalizedSubscriptionArchitecture",
      "shortLabel": "FinalNormalizedSubscriptionArchitecture",
      "longLabel": "FinalNormalizedSubscriptionArchitecture",
      "purpose": "EF Core migration designer that defines the target EF model for the AppDbContext: configures entities, relationships, indices, Postgres/vector extensions and includes seed data for subscription plans.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": [
        "class"
      ]
    },
    {
      "id": "event:1mffawr:implementation-should-trigger-ongraphupdated-aft",
      "kind": "event",
      "canonicalName": "Implementation should trigger OnGraphUpdated after updating state.",
      "shortLabel": "publish Implementation should trigger OnGraphUpdated after updating state.",
      "longLabel": "Implementation should trigger OnGraphUpdated after updating state.",
      "purpose": "Implementation should trigger OnGraphUpdated after updating state.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "boundary": {
        "role": "event-bus",
        "layer": "infrastructure",
        "boundaryHints": [
          "event-bus",
          "infrastructure",
          "implementation-should-trigger-ongraphupdated-after-updating-state"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "event:1qjyz5n:implementation-should-trigger-onloadingchanged-w",
      "kind": "event",
      "canonicalName": "Implementation should trigger OnLoadingChanged with the new boolean value.",
      "shortLabel": "publish Implementation should trigger OnLoadingChanged with the new boolean value.",
      "longLabel": "Implementation should trigger OnLoadingChanged with the new boolean value.",
      "purpose": "Implementation should trigger OnLoadingChanged with the new boolean value.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "boundary": {
        "role": "event-bus",
        "layer": "infrastructure",
        "boundaryHints": [
          "event-bus",
          "infrastructure",
          "implementation-should-trigger-onloadingchanged-with-the-new-boolean-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "event:jny8e8:implementation-should-trigger-onactivenodechange",
      "kind": "event",
      "canonicalName": "Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "shortLabel": "publish Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "longLabel": "Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "purpose": "Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "boundary": {
        "role": "event-bus",
        "layer": "infrastructure",
        "boundaryHints": [
          "event-bus",
          "infrastructure",
          "implementation-should-trigger-onactivenodechanged-with-nodeid-after-change"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "event:tkjlxe:implementation-should-raise-ongraphupdated-onact",
      "kind": "event",
      "canonicalName": "Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "shortLabel": "publish Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "longLabel": "Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "purpose": "Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "boundary": {
        "role": "event-bus",
        "layer": "infrastructure",
        "boundaryHints": [
          "event-bus",
          "infrastructure",
          "implementation-should-raise-ongraphupdated",
          "onactivenodechanged",
          "onloadingchanged-as-appropriate-after-clearing"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:10lsi3f:await-knowledgeservice-getgraphdataasync-fullcon",
      "kind": "external",
      "canonicalName": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "shortLabel": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "longLabel": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "purpose": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-getgraphdataasync-fullcontent-tenantid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:10yodpk:calls-versone-epub-epubreader-openbookasync-to-o",
      "kind": "external",
      "canonicalName": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "shortLabel": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "longLabel": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "purpose": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-versone-epub-epubreader-openbookasync-to-open-the-epub-external-library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:118idk7:calls-httpclient-postasjsonasync-to-identity-reg",
      "kind": "external",
      "canonicalName": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "shortLabel": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "longLabel": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "purpose": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-httpclient-postasjsonasync-to-identity",
          "register-framework-call-omitted-from-calls-list"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:119l0ln:await-dbcontextfactory-createdbcontextasync-obta",
      "kind": "external",
      "canonicalName": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "shortLabel": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "longLabel": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "purpose": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-dbcontextfactory-createdbcontextasync-obtains-appdbcontext-for-persistence-operations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:11f26sj:await-handler-invokes-subscriber-code-external-t",
      "kind": "external",
      "canonicalName": "await handler() — invokes subscriber code (external to this service)",
      "shortLabel": "await handler() — invokes subscriber code (external to this service)",
      "longLabel": "await handler() — invokes subscriber code (external to this service)",
      "purpose": "await handler() — invokes subscriber code (external to this service)",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-handler-invokes-subscriber-code-external-to-this-service"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:127k1fk:await-identityservice-loginasync-email-password",
      "kind": "external",
      "canonicalName": "await IdentityService.LoginAsync(email, password)",
      "shortLabel": "await IdentityService.LoginAsync(email, password)",
      "longLabel": "await IdentityService.LoginAsync(email, password)",
      "purpose": "await IdentityService.LoginAsync(email, password)",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-loginasync-email-password"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:13bu9hm:await-http-getfromjsonasync-list-lastreadbookdto",
      "kind": "external",
      "canonicalName": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "shortLabel": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "longLabel": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "purpose": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-http-getfromjsonasync-list-lastreadbookdto-api",
          "library",
          "books-assigns-to-books"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:13f6i8d:await-epubservice-getepubcontentasync",
      "kind": "external",
      "canonicalName": "await epubService.GetEpubContentAsync(...)",
      "shortLabel": "await epubService.GetEpubContentAsync(...)",
      "longLabel": "await epubService.GetEpubContentAsync(...)",
      "purpose": "await epubService.GetEpubContentAsync(...)",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-epubservice-getepubcontentasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:13tr33n:awaits-eventcallback-invokeasync-query-to-notify",
      "kind": "external",
      "canonicalName": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "shortLabel": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "longLabel": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "purpose": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "awaits-eventcallback-invokeasync-query-to-notify-parent-component-or-consumer-of-the-search"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1402omz:httpclient-deleteasync-api-knowledge",
      "kind": "external",
      "canonicalName": "HttpClient.DeleteAsync(\"/api/knowledge\")",
      "shortLabel": "HttpClient.DeleteAsync(\"/api/knowledge\")",
      "longLabel": "HttpClient.DeleteAsync(\"/api/knowledge\")",
      "purpose": "HttpClient.DeleteAsync(\"/api/knowledge\")",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "httpclient-deleteasync",
          "api",
          "knowledge"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:14uue03:httpclient-postasjsonasync-endpoint-new-text-ebo",
      "kind": "external",
      "canonicalName": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "shortLabel": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "longLabel": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "purpose": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "httpclient-postasjsonasync-endpoint-new-text-ebookid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:15l11s1:navigationmanager-navigateto-account-logout-form",
      "kind": "external",
      "canonicalName": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "shortLabel": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "longLabel": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "purpose": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "account",
          "logout-form-true-framework-navigation"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:17paedz:jsruntime-invokevoidasync-localstorage-removeite",
      "kind": "external",
      "canonicalName": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "shortLabel": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "longLabel": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "purpose": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "jsruntime-invokevoidasync-localstorage-removeitem-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:17wgm45:npgsqlmodelbuilderextensions-useidentitybydefaul",
      "kind": "external",
      "canonicalName": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "shortLabel": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "longLabel": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "purpose": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "npgsqlmodelbuilderextensions-useidentitybydefaultcolumns-modelbuilder-external-npgsql-ef-provider"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:185qn5h:await-mediator-send-new-verifygroundednesscomman",
      "kind": "external",
      "canonicalName": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "shortLabel": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "longLabel": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "purpose": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-mediator-send-new-verifygroundednesscommand-answer-context-tenantid-dispatches-to-application-handler"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:188dx43:embeddinggenerator-generateasync-called-with-req",
      "kind": "external",
      "canonicalName": "_embeddingGenerator.GenerateAsync called with request.QueryText",
      "shortLabel": "_embeddingGenerator.GenerateAsync called with request.QueryText",
      "longLabel": "_embeddingGenerator.GenerateAsync called with request.QueryText",
      "purpose": "_embeddingGenerator.GenerateAsync called with request.QueryText",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "embeddinggenerator-generateasync-called-with-request-querytext"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:18piw3o:var-res-await-mediator-send-cmd",
      "kind": "external",
      "canonicalName": "var res = await Mediator.Send(cmd)",
      "shortLabel": "var res = await Mediator.Send(cmd)",
      "longLabel": "var res = await Mediator.Send(cmd)",
      "purpose": "var res = await Mediator.Send(cmd)",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-res-await-mediator-send-cmd"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:19mu7c5:migrationbuilder-altercolumn-string-name-content",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "shortLabel": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "longLabel": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "purpose": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-string-name-contenthash-table-semanticknowledgecache-type-character-varying-64-maxlength-64-nullable-false-oldclrtype-typeof-string-oldtype-character-varying-128-oldmaxlength-128"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:19sggfb:jsruntime-invokevoidasync-navigator-vibrate-mill",
      "kind": "external",
      "canonicalName": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "shortLabel": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "longLabel": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "purpose": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "jsruntime-invokevoidasync-navigator-vibrate-milliseconds-external",
          "framework-call-to-ijsruntime-browser"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:19ulowf:awaits-coordinator-requestsummaryandquizasync",
      "kind": "external",
      "canonicalName": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "shortLabel": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "longLabel": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "purpose": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "awaits-coordinator-requestsummaryandquizasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1arxp8d:migrationbuilder-altercolumn-datetime-name-lastr",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-lastreaddate-table-ebooks-type-timestamp-with-time-zone-nullable-true-oldclrtype-typeof-datetime-oldtype-timestamp-without-time-zone-oldnullable-true"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1aznj2g:filter-should-add-new-qdrant-client-grpc-conditi",
      "kind": "external",
      "canonicalName": "filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "shortLabel": "filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "longLabel": "filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "purpose": "filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "filter-should-add-new-qdrant-client-grpc-condition"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1b864m5:await-identityservice-getprofileasync",
      "kind": "external",
      "canonicalName": "await IdentityService.GetProfileAsync()",
      "shortLabel": "await IdentityService.GetProfileAsync()",
      "longLabel": "await IdentityService.GetProfileAsync()",
      "purpose": "await IdentityService.GetProfileAsync()",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui",
        "dashboard",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui",
        "page-lifecycle"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-getprofileasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1bc2xmd:migrationbuilder-altercolumn-datetime-name-lastr",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-lastreaddate-table-ebooks-type-timestamp-without-time-zone-nullable-true-oldclrtype-typeof-datetime-oldtype-timestamp-with-time-zone-oldnullable-true"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1bnau6o:awaits-coordinator-requestsummaryandquizasync-fu",
      "kind": "external",
      "canonicalName": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "shortLabel": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "longLabel": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "purpose": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "awaits-coordinator-requestsummaryandquizasync-fullpagecontent"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1dpac9t:response-content-readfromjsonasync-readerpagevie",
      "kind": "external",
      "canonicalName": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "shortLabel": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "longLabel": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "purpose": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "response-content-readfromjsonasync-readerpageviewmodel-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1eysk1b:await-securestorage-default-getasync-key",
      "kind": "external",
      "canonicalName": "await SecureStorage.Default.GetAsync(key)",
      "shortLabel": "await SecureStorage.Default.GetAsync(key)",
      "longLabel": "await SecureStorage.Default.GetAsync(key)",
      "purpose": "await SecureStorage.Default.GetAsync(key)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice",
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-securestorage-default-getasync-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1f02vyb:await-onsearch-invokeasync-searchvalue-raises-th",
      "kind": "external",
      "canonicalName": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "shortLabel": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "longLabel": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "purpose": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-onsearch-invokeasync-searchvalue-raises-the-search-event-to-parent-components"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1g7mdv3:searchresult-new-list-qdrant-client-grpc-scoredp",
      "kind": "external",
      "canonicalName": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "shortLabel": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "longLabel": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "purpose": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "searchresult-new-list-qdrant-client-grpc-scoredpoint"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1hffg2k:await-hubcontext-clients-user-userid-sendasync-p",
      "kind": "external",
      "canonicalName": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "shortLabel": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "longLabel": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "purpose": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-hubcontext-clients-user-userid-sendasync-progressupdated-pageid-timestamp-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1hk4diz:calls-interaction-service-to-scroll-and-highligh",
      "kind": "external",
      "canonicalName": "calls interaction service to scroll and highlight target block",
      "shortLabel": "calls interaction service to scroll and highlight target block",
      "longLabel": "calls interaction service to scroll and highlight target block",
      "purpose": "calls interaction service to scroll and highlight target block",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-interaction-service-to-scroll-and-highlight-target-block"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1hz36l3:groups-addtogroupasync-context-connectionid-user",
      "kind": "external",
      "canonicalName": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "shortLabel": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "longLabel": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "purpose": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "groups-addtogroupasync-context-connectionid-user-userid-signalr-group-membership-change"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1ikl6m:usermanager-checkpasswordasync-user-password-fra",
      "kind": "external",
      "canonicalName": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "shortLabel": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "longLabel": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "purpose": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "usermanager-checkpasswordasync-user-password-framework-identity-external-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1j16x1b:await-knowledgeservice-clearcacheasync",
      "kind": "external",
      "canonicalName": "await KnowledgeService.ClearCacheAsync()",
      "shortLabel": "await KnowledgeService.ClearCacheAsync()",
      "longLabel": "await KnowledgeService.ClearCacheAsync()",
      "purpose": "await KnowledgeService.ClearCacheAsync()",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-clearcacheasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1jgzkcy:migrationbuilder-altercolumn-datetime-name-creat",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-createdat-table-semanticknowledgecache-type-timestamp-with-time-zone-nullable-false-oldclrtype-typeof-datetime-oldtype-timestamp-without-time-zone"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1jiqvie:await-storageservice-getsecurestring-tokenkey",
      "kind": "external",
      "canonicalName": "await _storageService.GetSecureString(TokenKey)",
      "shortLabel": "await _storageService.GetSecureString(TokenKey)",
      "longLabel": "await _storageService.GetSecureString(TokenKey)",
      "purpose": "await _storageService.GetSecureString(TokenKey)",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-storageservice-getsecurestring-tokenkey"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1jnm5wj:await-http-getfromjsonasync-list-lastreadbookdto",
      "kind": "external",
      "canonicalName": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "shortLabel": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "longLabel": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "purpose": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-http-getfromjsonasync-list-lastreadbookdto-api",
          "library",
          "books"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1kc2xou:await-identityservice-registerasync-email-passwo",
      "kind": "external",
      "canonicalName": "await IdentityService.RegisterAsync(email, password)",
      "shortLabel": "await IdentityService.RegisterAsync(email, password)",
      "longLabel": "await IdentityService.RegisterAsync(email, password)",
      "purpose": "await IdentityService.RegisterAsync(email, password)",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-registerasync-email-password"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1l8c67j:await-hubcontext-clients-user-userid-sendasync-i",
      "kind": "external",
      "canonicalName": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "shortLabel": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "longLabel": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "purpose": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-hubcontext-clients-user-userid-sendasync-ingestionprogress-message-progress-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1llndca:await-usermanager-resetaccessfailedcountasync-us",
      "kind": "external",
      "canonicalName": "await _userManager.ResetAccessFailedCountAsync(user)",
      "shortLabel": "await _userManager.ResetAccessFailedCountAsync(user)",
      "longLabel": "await _userManager.ResetAccessFailedCountAsync(user)",
      "purpose": "await _userManager.ResetAccessFailedCountAsync(user)",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-usermanager-resetaccessfailedcountasync-user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1m03hfh:jsruntime-invokeasync-string-localstorage-getite",
      "kind": "external",
      "canonicalName": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "shortLabel": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "longLabel": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "purpose": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "jsruntime-invokeasync-string-localstorage-getitem-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1mhlqnn:sends-payload-querytext-tenantid-limit-via-httpc",
      "kind": "external",
      "canonicalName": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "shortLabel": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "longLabel": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "purpose": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sends-payload-querytext-tenantid-limit-via-httpclient-postasjsonasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1mzov5:http-postasjsonasync-api-library-ingest-request",
      "kind": "external",
      "canonicalName": "Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "shortLabel": "Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "longLabel": "Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "purpose": "Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "http-postasjsonasync-api",
          "library",
          "ingest-request"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1oi7g04:calls-inativestorageservice-getsecurestring-to-o",
      "kind": "external",
      "canonicalName": "Calls INativeStorageService.GetSecureString to obtain JWT",
      "shortLabel": "Calls INativeStorageService.GetSecureString to obtain JWT",
      "longLabel": "Calls INativeStorageService.GetSecureString to obtain JWT",
      "purpose": "Calls INativeStorageService.GetSecureString to obtain JWT",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-inativestorageservice-getsecurestring-to-obtain-jwt"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1on12az:js-invokeasync-import-content-selectionhandler-j",
      "kind": "external",
      "canonicalName": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "shortLabel": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "longLabel": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "purpose": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "js-invokeasync-import",
          "content",
          "selectionhandler-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1onccro:await-storageservice-getsecurestring-for-userema",
      "kind": "external",
      "canonicalName": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "shortLabel": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "longLabel": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "purpose": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-storageservice-getsecurestring-for-useremail-usertenant-userroles"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1p27t29:returns-result-of-knowledgeservice-askquestionas",
      "kind": "external",
      "canonicalName": "Returns result of _knowledgeService.AskQuestionAsync(...)",
      "shortLabel": "Returns result of _knowledgeService.AskQuestionAsync(...)",
      "longLabel": "Returns result of _knowledgeService.AskQuestionAsync(...)",
      "purpose": "Returns result of _knowledgeService.AskQuestionAsync(...)",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "returns-result-of-knowledgeservice-askquestionasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1poaz6x:await-knowledgeservice-getsummaryandquizasync",
      "kind": "external",
      "canonicalName": "await knowledgeService.GetSummaryAndQuizAsync",
      "shortLabel": "await knowledgeService.GetSummaryAndQuizAsync",
      "longLabel": "await knowledgeService.GetSummaryAndQuizAsync",
      "purpose": "await knowledgeService.GetSummaryAndQuizAsync",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-getsummaryandquizasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1q8ifou:await-jsruntime-invokevoidasync-localstorage-set",
      "kind": "external",
      "canonicalName": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "shortLabel": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "longLabel": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "purpose": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-jsruntime-invokevoidasync-localstorage-setitem-key-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1qeqhit:sends-payload-question-tenantid-ebookid-limit-vi",
      "kind": "external",
      "canonicalName": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "shortLabel": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "longLabel": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "purpose": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sends-payload-question-tenantid-ebookid-limit-via-httpclient-postasjsonasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1qodnyy:npgsqlmodelbuilderextensions-useidentitybydefaul",
      "kind": "external",
      "canonicalName": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "shortLabel": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "longLabel": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "purpose": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "npgsqlmodelbuilderextensions-useidentitybydefaultcolumns-modelbuilder"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1r6o2a3:await-identityservice-getprofileasync-project-se",
      "kind": "external",
      "canonicalName": "await IdentityService.GetProfileAsync(); (project service)",
      "shortLabel": "await IdentityService.GetProfileAsync(); (project service)",
      "longLabel": "await IdentityService.GetProfileAsync(); (project service)",
      "purpose": "await IdentityService.GetProfileAsync(); (project service)",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-getprofileasync-project-service"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1shw6gi:pipelineprovider-getpipeline-ai-retry-used-to-se",
      "kind": "external",
      "canonicalName": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "shortLabel": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "longLabel": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "purpose": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "pipelineprovider-getpipeline-ai-retry-used-to-set-retrypipeline"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1ska3ce:sendasync-progressupdated-pageid-timestamp-cance",
      "kind": "external",
      "canonicalName": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "shortLabel": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "longLabel": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "purpose": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sendasync-progressupdated-pageid-timestamp-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1squ6eg:response-content-readasstringasync-cancellationt",
      "kind": "external",
      "canonicalName": "response.Content.ReadAsStringAsync(cancellationToken)",
      "shortLabel": "response.Content.ReadAsStringAsync(cancellationToken)",
      "longLabel": "response.Content.ReadAsStringAsync(cancellationToken)",
      "purpose": "response.Content.ReadAsStringAsync(cancellationToken)",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "response-content-readasstringasync-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1tw588t:platformservice-vibrateasync-50-invoked-to-provi",
      "kind": "external",
      "canonicalName": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "shortLabel": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "longLabel": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "purpose": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "platformservice-vibrateasync-50-invoked-to-provide-haptic-feedback-on-correct-answer"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1u0z6xz:calls-embeddinggenerator-generateasync-via-retry",
      "kind": "external",
      "canonicalName": "calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "shortLabel": "calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "longLabel": "calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "purpose": "calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-embeddinggenerator-generateasync-via-retry-pipeline"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1u7bhjr:match-new-qdrant-client-grpc-match-text-tenantid",
      "kind": "external",
      "canonicalName": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "shortLabel": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "longLabel": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "purpose": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "match-new-qdrant-client-grpc-match-text-tenantid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1u9upqw:tolistasync-cancellationtoken-ef-core-async-mate",
      "kind": "external",
      "canonicalName": "ToListAsync(cancellationToken) - EF Core async materialization",
      "shortLabel": "ToListAsync(cancellationToken) - EF Core async materialization",
      "longLabel": "ToListAsync(cancellationToken) - EF Core async materialization",
      "purpose": "ToListAsync(cancellationToken) - EF Core async materialization",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "tolistasync-cancellationtoken-ef-core-async-materialization"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1udvi8d:var-response-await-base-sendasync-request-cancel",
      "kind": "external",
      "canonicalName": "var response = await base.SendAsync(request, cancellationToken);",
      "shortLabel": "var response = await base.SendAsync(request, cancellationToken);",
      "longLabel": "var response = await base.SendAsync(request, cancellationToken);",
      "purpose": "var response = await base.SendAsync(request, cancellationToken);",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-response-await-base-sendasync-request-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1uts2z1:securestorage-default-remove-key",
      "kind": "external",
      "canonicalName": "SecureStorage.Default.Remove(key)",
      "shortLabel": "SecureStorage.Default.Remove(key)",
      "longLabel": "SecureStorage.Default.Remove(key)",
      "purpose": "SecureStorage.Default.Remove(key)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "securestorage-default-remove-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1v0r4q2:bookref-readcoverasync",
      "kind": "external",
      "canonicalName": "bookRef.ReadCoverAsync()",
      "shortLabel": "bookRef.ReadCoverAsync()",
      "longLabel": "bookRef.ReadCoverAsync()",
      "purpose": "bookRef.ReadCoverAsync()",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "bookref-readcoverasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1v4nt3v:await-passwordsigninasync",
      "kind": "external",
      "canonicalName": "Await PasswordSignInAsync",
      "shortLabel": "Await PasswordSignInAsync",
      "longLabel": "Await PasswordSignInAsync",
      "purpose": "Await PasswordSignInAsync",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-passwordsigninasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1v883i8:await-base-onconnectedasync",
      "kind": "external",
      "canonicalName": "await base.OnConnectedAsync()",
      "shortLabel": "await base.OnConnectedAsync()",
      "longLabel": "await base.OnConnectedAsync()",
      "purpose": "await base.OnConnectedAsync()",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-base-onconnectedasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1vdaqgp:await-broadcaster-broadcastprogressasync-request",
      "kind": "external",
      "canonicalName": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "shortLabel": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "longLabel": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "purpose": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-broadcaster-broadcastprogressasync-request-userid-request-pageid-now-request-excludedconnectionid-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1w6c46m:await-knowledgeservice-askquestionasync-question",
      "kind": "external",
      "canonicalName": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "shortLabel": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "longLabel": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "purpose": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-askquestionasync-question-tenantid-ebookid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1wmsa3b:sendasync-ingestionprogress-message-progress-can",
      "kind": "external",
      "canonicalName": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "shortLabel": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "longLabel": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "purpose": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sendasync-ingestionprogress-message-progress-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1x98bku:js-invokeasync-import-content-readerobserver-js",
      "kind": "external",
      "canonicalName": "JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "shortLabel": "JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "longLabel": "JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "purpose": "JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "js-invokeasync-import",
          "content",
          "readerobserver-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1y1d0hp:await-base-ondisconnectedasync-exception",
      "kind": "external",
      "canonicalName": "await base.OnDisconnectedAsync(exception)",
      "shortLabel": "await base.OnDisconnectedAsync(exception)",
      "longLabel": "await base.OnDisconnectedAsync(exception)",
      "purpose": "await base.OnDisconnectedAsync(exception)",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-base-ondisconnectedasync-exception"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:1yus9tg:preferences-default-set-key-value",
      "kind": "external",
      "canonicalName": "Preferences.Default.Set(key, value)",
      "shortLabel": "Preferences.Default.Set(key, value)",
      "longLabel": "Preferences.Default.Set(key, value)",
      "purpose": "Preferences.Default.Set(key, value)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "preferences-default-set-key-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:279tn7:protected-override-async-task-httpresponsemessag",
      "kind": "external",
      "canonicalName": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "shortLabel": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "longLabel": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "purpose": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "protected-override-async-task-httpresponsemessage-sendasync-httprequestmessage-request-cancellationtoken-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:2haj5s:await-hubconnection-sendasync-updateprogress-pag",
      "kind": "external",
      "canonicalName": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "shortLabel": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "longLabel": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "purpose": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-hubconnection-sendasync-updateprogress-pageid-ebookid-progress-chaptertitle-token"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:2ibuu9:await-js-invokeasync-ijsobjectreference-import-c",
      "kind": "external",
      "canonicalName": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "shortLabel": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "longLabel": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "purpose": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-js-invokeasync-ijsobjectreference-import",
          "content",
          "layoutresizer-js-then-module-invokevoidasync-initresizer-app-container-sidebar-resizer-sidebar-width-js-interop"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:3f5wnd:calls-injected-iidentityservice-loginasync-to-au",
      "kind": "external",
      "canonicalName": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "shortLabel": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "longLabel": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "purpose": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-injected-iidentityservice-loginasync-to-authenticate-user-external-project-service-result-examined-afterwards"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:3nfm1g:await-identityservice-logoutasync",
      "kind": "external",
      "canonicalName": "await IdentityService.LogoutAsync()",
      "shortLabel": "await IdentityService.LogoutAsync()",
      "longLabel": "await IdentityService.LogoutAsync()",
      "purpose": "await IdentityService.LogoutAsync()",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation",
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui",
        "blazor-component",
        "component-lifecycle"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-logoutasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:4c7127:usermanager-createasync-user-password-framework-",
      "kind": "external",
      "canonicalName": "_userManager.CreateAsync(user, password) -- framework identity external call",
      "shortLabel": "_userManager.CreateAsync(user, password) -- framework identity external call",
      "longLabel": "_userManager.CreateAsync(user, password) -- framework identity external call",
      "purpose": "_userManager.CreateAsync(user, password) -- framework identity external call",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "usermanager-createasync-user-password-framework-identity-external-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:5altas:migrationbuilder-altercolumn-datetime-name-added",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-addeddate-table-ebooks-type-timestamp-without-time-zone-nullable-false-oldclrtype-typeof-datetime-oldtype-timestamp-with-time-zone"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:5qcn7g:await-securestorage-default-setasync-key-value",
      "kind": "external",
      "canonicalName": "await SecureStorage.Default.SetAsync(key, value)",
      "shortLabel": "await SecureStorage.Default.SetAsync(key, value)",
      "longLabel": "await SecureStorage.Default.SetAsync(key, value)",
      "purpose": "await SecureStorage.Default.SetAsync(key, value)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice",
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-securestorage-default-setasync-key-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:5u0rla:var-value-await-jsruntime-invokeasync-string-loc",
      "kind": "external",
      "canonicalName": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "shortLabel": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "longLabel": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "purpose": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-value-await-jsruntime-invokeasync-string-localstorage-getitem-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:5yx7mx:versone-epub-epubreader-openbookasync-epubstream",
      "kind": "external",
      "canonicalName": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "shortLabel": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "longLabel": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "purpose": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "versone-epub-epubreader-openbookasync-epubstream-to-obtain-book-reference"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:6vllxi:var-returnurl-navigationmanager-tobaserelativepa",
      "kind": "external",
      "canonicalName": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "shortLabel": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "longLabel": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "purpose": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-returnurl-navigationmanager-tobaserelativepath-navigationmanager-uri-reads-navigationmanager-uri-and-calls-tobaserelativepath"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:7dkzyp:navigationmanager-navigateto-reader-bookid-frame",
      "kind": "external",
      "canonicalName": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "shortLabel": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "longLabel": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "purpose": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "reader",
          "bookid-framework-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:7eyxni:navigationmanager-navigateto-library-framework-c",
      "kind": "external",
      "canonicalName": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "shortLabel": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "longLabel": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "purpose": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "library-framework-call-in-inline-lambda"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:7ksxes:await-platformservice-vibrateasync-40",
      "kind": "external",
      "canonicalName": "await PlatformService.VibrateAsync(40)",
      "shortLabel": "await PlatformService.VibrateAsync(40)",
      "longLabel": "await PlatformService.VibrateAsync(40)",
      "purpose": "await PlatformService.VibrateAsync(40)",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-platformservice-vibrateasync-40"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:7of1lr:field-new-qdrant-client-grpc-fieldcondition",
      "kind": "external",
      "canonicalName": "Field = new Qdrant.Client.Grpc.FieldCondition",
      "shortLabel": "Field = new Qdrant.Client.Grpc.FieldCondition",
      "longLabel": "Field = new Qdrant.Client.Grpc.FieldCondition",
      "purpose": "Field = new Qdrant.Client.Grpc.FieldCondition",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "field-new-qdrant-client-grpc-fieldcondition"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:8tfcv3:var-filter-new-qdrant-client-grpc-filter",
      "kind": "external",
      "canonicalName": "var filter = new Qdrant.Client.Grpc.Filter();",
      "shortLabel": "var filter = new Qdrant.Client.Grpc.Filter();",
      "longLabel": "var filter = new Qdrant.Client.Grpc.Filter();",
      "purpose": "var filter = new Qdrant.Client.Grpc.Filter();",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-filter-new-qdrant-client-grpc-filter"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:8y88en:usermanager-findbyemailasync-email-framework-ide",
      "kind": "external",
      "canonicalName": "_userManager.FindByEmailAsync(email) -- framework identity external call",
      "shortLabel": "_userManager.FindByEmailAsync(email) -- framework identity external call",
      "longLabel": "_userManager.FindByEmailAsync(email) -- framework identity external call",
      "purpose": "_userManager.FindByEmailAsync(email) -- framework identity external call",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "usermanager-findbyemailasync-email-framework-identity-external-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:9rnla4:sends-payload-answer-context-tenantid-via-httpcl",
      "kind": "external",
      "canonicalName": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "shortLabel": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "longLabel": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "purpose": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sends-payload-answer-context-tenantid-via-httpclient-postasjsonasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:a9gr7v:sends-payload-query-tenantid-via-httpclient-post",
      "kind": "external",
      "canonicalName": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "shortLabel": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "longLabel": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "purpose": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "sends-payload-query-tenantid-via-httpclient-postasjsonasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:awqbiu:navigationmanager-navigateto-account-login",
      "kind": "external",
      "canonicalName": "NavigationManager.NavigateTo(\"/account/login\")",
      "shortLabel": "NavigationManager.NavigateTo(\"/account/login\")",
      "longLabel": "NavigationManager.NavigateTo(\"/account/login\")",
      "purpose": "NavigationManager.NavigateTo(\"/account/login\")",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "account",
          "login"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:bsebv9:calls-hubconnection-sendasync-updateprogress-pag",
      "kind": "external",
      "canonicalName": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "shortLabel": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "longLabel": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "purpose": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-hubconnection-sendasync-updateprogress-pageid-ebookid-progress-chaptertitle-token-when-connected-external-signalr-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:dk8fk1:await-knowledgeservice-verifygroundednessasync-a",
      "kind": "external",
      "canonicalName": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "shortLabel": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "longLabel": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "purpose": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-verifygroundednessasync-and-return-its-result-groundednessresult"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ehhqto:migrationbuilder-altercolumn-datetime-name-creat",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-createdat-table-semanticknowledgecache-type-timestamp-without-time-zone-nullable-false-oldclrtype-typeof-datetime-oldtype-timestamp-with-time-zone"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:f0ptei:chapterref-readcontentastextasync-external-epub-",
      "kind": "external",
      "canonicalName": "chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "shortLabel": "chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "longLabel": "chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "purpose": "chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "chapterref-readcontentastextasync-external-epub-object"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:f0wx1j:await-authprovider-getauthenticationstateasync-r",
      "kind": "external",
      "canonicalName": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "shortLabel": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "longLabel": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "purpose": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-authprovider-getauthenticationstateasync-reads-current-user",
          "claims"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:frwewv:list-qdrant-client-grpc-scoredpoint-searchresult",
      "kind": "external",
      "canonicalName": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "shortLabel": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "longLabel": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "purpose": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "list-qdrant-client-grpc-scoredpoint-searchresult"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ftjxs1:awaits-lazy-value-which-invokes-executeairequest",
      "kind": "external",
      "canonicalName": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "shortLabel": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "longLabel": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "purpose": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "awaits-lazy-value-which-invokes-executeairequestandcacheasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:fxwsdp:identityservice-refreshtokenasync-if-success-re-",
      "kind": "external",
      "canonicalName": "identityService.RefreshTokenAsync(); if success, re-read stored token",
      "shortLabel": "identityService.RefreshTokenAsync(); if success, re-read stored token",
      "longLabel": "identityService.RefreshTokenAsync(); if success, re-read stored token",
      "purpose": "identityService.RefreshTokenAsync(); if success, re-read stored token",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "identityservice-refreshtokenasync-if-success-re-read-stored-token"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:g1wm0j:match-new-qdrant-client-grpc-match-text-global",
      "kind": "external",
      "canonicalName": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "shortLabel": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "longLabel": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "purpose": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "match-new-qdrant-client-grpc-match-text-global"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:hwdhs5:calls-qdrantclient-searchasync-and-converts-to-l",
      "kind": "external",
      "canonicalName": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "shortLabel": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "longLabel": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "purpose": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-qdrantclient-searchasync-and-converts-to-list-falls-back-to-empty-list-on-exception"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:j7khg5:preferences-default-remove-key",
      "kind": "external",
      "canonicalName": "Preferences.Default.Remove(key)",
      "shortLabel": "Preferences.Default.Remove(key)",
      "longLabel": "Preferences.Default.Remove(key)",
      "purpose": "Preferences.Default.Remove(key)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "preferences-default-remove-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:js2dky:identityservice-logoutasync",
      "kind": "external",
      "canonicalName": "identityService.LogoutAsync()",
      "shortLabel": "identityService.LogoutAsync()",
      "longLabel": "identityService.LogoutAsync()",
      "purpose": "identityService.LogoutAsync()",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "identityservice-logoutasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:jtxfro:awaits-interactionservice-notifytextselected-str",
      "kind": "external",
      "canonicalName": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "shortLabel": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "longLabel": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "purpose": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "awaits-interactionservice-notifytextselected-string-empty-string-empty-null-to-clear-selection-globally"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:k4et2o:await-identityservice-logoutasync-project-servic",
      "kind": "external",
      "canonicalName": "await IdentityService.LogoutAsync(); (project service)",
      "shortLabel": "await IdentityService.LogoutAsync(); (project service)",
      "longLabel": "await IdentityService.LogoutAsync(); (project service)",
      "purpose": "await IdentityService.LogoutAsync(); (project service)",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-identityservice-logoutasync-project-service"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ktxxmr:calls-httpclient-postasjsonasync-to-identity-ref",
      "kind": "external",
      "canonicalName": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "shortLabel": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "longLabel": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "purpose": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-httpclient-postasjsonasync-to-identity",
          "refresh-framework-call-omitted-from-calls-list"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:kzg80q:migrationbuilder-altercolumn-datetime-name-added",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "shortLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "longLabel": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "purpose": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-datetime-name-addeddate-table-ebooks-type-timestamp-with-time-zone-nullable-false-oldclrtype-typeof-datetime-oldtype-timestamp-without-time-zone"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:l4owl9:js-invokevoidasync-eval-script",
      "kind": "external",
      "canonicalName": "JS.InvokeVoidAsync('eval', script)",
      "shortLabel": "JS.InvokeVoidAsync('eval', script)",
      "longLabel": "JS.InvokeVoidAsync('eval', script)",
      "purpose": "JS.InvokeVoidAsync('eval', script)",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "js-invokevoidasync-eval-script"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:l8d4ov:npgsqlmodelbuilderextensions-haspostgresextensio",
      "kind": "external",
      "canonicalName": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "shortLabel": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "longLabel": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "purpose": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "npgsqlmodelbuilderextensions-haspostgresextension-modelbuilder-vector"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:m9vtft:mediator-send-new-getuserprofilequery-userid-del",
      "kind": "external",
      "canonicalName": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "shortLabel": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "longLabel": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "purpose": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "mediator-send-new-getuserprofilequery-userid-delegates-to-application-layer-handler"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:od15wz:metadataextractor-extractmetadataasync-memorystr",
      "kind": "external",
      "canonicalName": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "shortLabel": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "longLabel": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "purpose": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "metadataextractor-extractmetadataasync-memorystream-result-issuccess",
          "value",
          "errors"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ohsa3m:await-coordinator-requestsummaryandquizasync-con",
      "kind": "external",
      "canonicalName": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "shortLabel": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "longLabel": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "purpose": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-coordinator-requestsummaryandquizasync-contenttoanalyze"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:op79n5:await-authstateprovider-getauthenticationstateas",
      "kind": "external",
      "canonicalName": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "shortLabel": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "longLabel": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "purpose": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-authstateprovider-getauthenticationstateasync-framework-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:p4awid:await-jsruntime-invokevoidasync-localstorage-rem",
      "kind": "external",
      "canonicalName": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "shortLabel": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "longLabel": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "purpose": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-jsruntime-invokevoidasync-localstorage-removeitem-key"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:pru781:migrationbuilder-altercolumn-string-name-content",
      "kind": "external",
      "canonicalName": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "shortLabel": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "longLabel": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "purpose": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "migrationbuilder-altercolumn-string-name-contenthash-table-semanticknowledgecache-type-character-varying-128-maxlength-128-nullable-false-oldclrtype-typeof-string-oldtype-character-varying-64-oldmaxlength-64"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:q33zpz:await-knowledgeservice-getgraphdataasync",
      "kind": "external",
      "canonicalName": "await _knowledgeService.GetGraphDataAsync(...)",
      "shortLabel": "await _knowledgeService.GetGraphDataAsync(...)",
      "longLabel": "await _knowledgeService.GetGraphDataAsync(...)",
      "purpose": "await _knowledgeService.GetGraphDataAsync(...)",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "await-knowledgeservice-getgraphdataasync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:qhop5j:var-hashbytes-sha256-hashdata-inputbytes-framewo",
      "kind": "external",
      "canonicalName": "var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "shortLabel": "var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "longLabel": "var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "purpose": "var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-hashbytes-sha256-hashdata-inputbytes-framework-api"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:qnnwij:navigationmanager-navigateto-reader-book-id-chap",
      "kind": "external",
      "canonicalName": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "shortLabel": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "longLabel": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "purpose": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "reader",
          "book-id-chapter-book-lastchapterindex-framework-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:qzx7e4:delegates-to-base-sendasync-to-perform-network-c",
      "kind": "external",
      "canonicalName": "Delegates to base.SendAsync to perform network call",
      "shortLabel": "Delegates to base.SendAsync to perform network call",
      "longLabel": "Delegates to base.SendAsync to perform network call",
      "purpose": "Delegates to base.SendAsync to perform network call",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "delegates-to-base-sendasync-to-perform-network-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:rip2e9:groups-removefromgroupasync-context-connectionid",
      "kind": "external",
      "canonicalName": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "shortLabel": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "longLabel": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "purpose": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "groups-removefromgroupasync-context-connectionid-user-userid-signalr-group-membership-change"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:rkjokw:var-config-typeadapterconfig-globalsettings-maps",
      "kind": "external",
      "canonicalName": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "shortLabel": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "longLabel": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "purpose": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "var-config-typeadapterconfig-globalsettings-mapster-library-global-settings-accessed"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:rrfp4t:calls-httpclient-getasync-api-epub-ebookid-chapt",
      "kind": "external",
      "canonicalName": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "shortLabel": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "longLabel": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "purpose": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-httpclient-getasync",
          "api",
          "epub"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:s6iesj:preferences-default-get-key-string-null",
      "kind": "external",
      "canonicalName": "Preferences.Default.Get(key, (string?)null)",
      "shortLabel": "Preferences.Default.Get(key, (string?)null)",
      "longLabel": "Preferences.Default.Get(key, (string?)null)",
      "purpose": "Preferences.Default.Get(key, (string?)null)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "preferences-default-get-key-string-null"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:t62tls:calls-js-invokevoidasync-nexusauth-submitloginfo",
      "kind": "external",
      "canonicalName": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "shortLabel": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "longLabel": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "purpose": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "calls-js-invokevoidasync-nexusauth-submitloginform-nexusloginform-email-password-remember-to-perform-cookie-based-sign-in-framework-js-runtime-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ukfy2q:httpclient-getasync-identity-profile-framework-c",
      "kind": "external",
      "canonicalName": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "shortLabel": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "longLabel": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "purpose": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "httpclient-getasync-identity",
          "profile-framework-call-omitted-from-calls-list"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:uqijcq:navigationmanager-navigateto-account-login-retur",
      "kind": "external",
      "canonicalName": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "shortLabel": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "longLabel": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "purpose": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "navigationmanager-navigateto",
          "account",
          "login-returnurl-uri-escapedatastring-returnurl-uses-uri-escapedatastring-to-encode-the-return-url"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:v8qnpo:jsruntime-invokevoidasync-localstorage-setitem-k",
      "kind": "external",
      "canonicalName": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "shortLabel": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "longLabel": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "purpose": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "jsruntime-invokevoidasync-localstorage-setitem-key-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:wbs69t:preferences-default-get-key-defaultvalue",
      "kind": "external",
      "canonicalName": "Preferences.Default.Get(key, defaultValue)",
      "shortLabel": "Preferences.Default.Get(key, defaultValue)",
      "longLabel": "Preferences.Default.Get(key, defaultValue)",
      "purpose": "Preferences.Default.Get(key, defaultValue)",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "preferences-default-get-key-defaultvalue"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:x1chuk:usermanager-islockedoutasync-user-framework-iden",
      "kind": "external",
      "canonicalName": "_userManager.IsLockedOutAsync(user) -- framework identity external call",
      "shortLabel": "_userManager.IsLockedOutAsync(user) -- framework identity external call",
      "longLabel": "_userManager.IsLockedOutAsync(user) -- framework identity external call",
      "purpose": "_userManager.IsLockedOutAsync(user) -- framework identity external call",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "usermanager-islockedoutasync-user-framework-identity-external-call"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:ygdnd4:return-await-base-sendasync-newrequest-cancellat",
      "kind": "external",
      "canonicalName": "return await base.SendAsync(newRequest, cancellationToken);",
      "shortLabel": "return await base.SendAsync(newRequest, cancellationToken);",
      "longLabel": "return await base.SendAsync(newRequest, cancellationToken);",
      "purpose": "return await base.SendAsync(newRequest, cancellationToken);",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "return-await-base-sendasync-newrequest-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "external:yrhxqp:epubreader-getepubcontentasync-request-ebookid-r",
      "kind": "external",
      "canonicalName": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "shortLabel": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "longLabel": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "purpose": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "boundary": {
        "role": "external-service",
        "layer": "infrastructure",
        "boundaryHints": [
          "external-service",
          "infrastructure",
          "epubreader-getepubcontentasync-request-ebookid-request-chapterindex-request-userid-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "file:108l4jq:groundednessbadge-razor",
      "kind": "file",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "shortLabel": "GroundednessBadge",
      "longLabel": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "purpose": "Blazor UI component that displays a groundedness badge for an Answer relative to a Context by invoking an application verification command and showing status, icon and rationale.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:10axm6l:serveridentityservice-cs",
      "kind": "file",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "canonicalName": "NexusReader.Web/Services/ServerIdentityService.cs",
      "shortLabel": "ServerIdentityService",
      "longLabel": "NexusReader.Web/Services/ServerIdentityService.cs",
      "purpose": "Provides server-side identity operations for the web app: validating credentials, registering users, reading the authenticated profile, and small no-op token/logout helpers tailored for Blazor Server constraints.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "kind": "file",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "canonicalName": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "shortLabel": "SignalRSyncBroadcaster",
      "longLabel": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "purpose": "Provides a SignalR-based implementation of ISyncBroadcaster to push sync and ingestion progress updates to a user's connected devices via IHubContext<SyncHub>.",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:10kr3oo:getknowledgegraphquery-cs",
      "kind": "file",
      "fileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
      "shortLabel": "GetKnowledgeGraphQuery",
      "longLabel": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
      "purpose": "Defines a CQRS query record used to request a knowledge graph extraction from provided text within a tenant scope and optional ebook context.",
      "domainTags": [
        "knowledge-graph",
        "tenant",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "queryobject"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:11crtur:profile-razor",
      "kind": "file",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "shortLabel": "Profile",
      "longLabel": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "purpose": "Blazor UI page that displays the authenticated user's profile, AI usage, metrics and account actions (upgrade/logout); fetches profile on init and renders conditional UI based on profile state.",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:11mkiaz:aisettings-cs",
      "kind": "file",
      "fileId": "file:11mkiaz:aisettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "canonicalName": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "shortLabel": "AiSettings",
      "longLabel": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "purpose": "Defines typed configuration/settings for AI (Google) integration used for options binding and runtime configuration of model, embedding, token limits, retries, and temperature.",
      "domainTags": [
        "ai",
        "model-selection",
        "embedding",
        "rate-retry-and-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-dto"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "aisettings-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1246987:mainactivity-cs",
      "kind": "file",
      "fileId": "file:1246987:mainactivity-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "canonicalName": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "shortLabel": "MainActivity",
      "longLabel": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "purpose": "Android platform entry Activity for the MAUI app; provides the Android lifecycle hook used to start the MAUI application on Android.",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "frontend",
        "boundaryHints": [
          "program-entry",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:12lov7s:mauiplatformservice-cs",
      "kind": "file",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "canonicalName": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "shortLabel": "MauiPlatformService",
      "longLabel": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "purpose": "MAUI platform implementation of IPlatformService providing device context and haptic/vibration behaviors for the mobile app.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "kind": "file",
      "fileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "shortLabel": "20260510171941_AddEbookLastChapterIndex",
      "longLabel": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "purpose": "An Entity Framework Core migration that adds an integer LastChapterIndex column (default 0) to the Ebooks table, and can remove it on rollback.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:12rhzck:program-cs",
      "kind": "file",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "canonicalName": "NexusReader.Web/Program.cs",
      "shortLabel": "Program",
      "longLabel": "NexusReader.Web/Program.cs",
      "purpose": "Bootstrap and run the NexusReader web application: configure services, authentication/authorization, middleware, database migration/seeding with retries, and declare Minimal API endpoints (knowledge, library, identity, billing/webhooks).",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:136c3oe:dbinitializer-cs",
      "kind": "file",
      "fileId": "file:136c3oe:dbinitializer-cs",
      "path": "NexusReader.Data/Persistence/DbInitializer.cs",
      "canonicalName": "NexusReader.Data/Persistence/DbInitializer.cs",
      "shortLabel": "DbInitializer",
      "longLabel": "NexusReader.Data/Persistence/DbInitializer.cs",
      "purpose": "Database seeder that runs at application startup to ensure initial data (subscription plans, roles, admin user, sample author and ebook) exist in the AppDbContext.",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "boundary": {
        "role": "bootstrap",
        "layer": "data",
        "boundaryHints": [
          "bootstrap",
          "data",
          "nexusreader-data",
          "persistence",
          "dbinitializer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "kind": "file",
      "fileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "canonicalName": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "shortLabel": "UpdateReadingProgressCommandHandler",
      "longLabel": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "purpose": "MediatR handler that persists a user's reading position (User and Ebook entities) and broadcasts the progress update to other connected devices.",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:13jb3vh:notfound-razor",
      "kind": "file",
      "fileId": "file:13jb3vh:notfound-razor",
      "path": "NexusReader.UI.Shared/Pages/NotFound.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/NotFound.razor",
      "shortLabel": "NotFound",
      "longLabel": "NexusReader.UI.Shared/Pages/NotFound.razor",
      "purpose": "A Blazor UI page that renders a Not Found / synchronization placeholder using shared UI components and applies the MainHubLayout.",
      "domainTags": [
        "navigation",
        "notfound-fallback-ui",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-page",
        "component-composition",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "notfound-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:13kvr59:contenthasher-cs",
      "kind": "file",
      "fileId": "file:13kvr59:contenthasher-cs",
      "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "canonicalName": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "shortLabel": "ContentHasher",
      "longLabel": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "purpose": "Provides deterministic normalization and SHA-256 hashing for content strings used across the infrastructure (e.g., content fingerprinting / cache keys).",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "contenthasher-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:13phiik:billingservice-cs",
      "kind": "file",
      "fileId": "file:13phiik:billingservice-cs",
      "path": "NexusReader.Infrastructure/Services/BillingService.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/BillingService.cs",
      "shortLabel": "BillingService",
      "longLabel": "NexusReader.Infrastructure/Services/BillingService.cs",
      "purpose": "Implements billing-related reactions (subscription updated/deleted) tying Stripe product events to local user subscription plan and token limits.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "billingservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:13u663i:20260510151022-normalizeauthor-cs",
      "kind": "file",
      "fileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "shortLabel": "20260510151022_NormalizeAuthor",
      "longLabel": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "purpose": "EF Core migration that normalizes authors by replacing an Author string column on Ebooks with an Authors table and an AuthorId FK, and provides the inverse Down migration.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "kind": "file",
      "fileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "shortLabel": "20260514184243_AddDescriptionToEbook",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "purpose": "EF Core migration that adds a nullable text Description column to the Ebooks table and can remove it on rollback.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:14qnurl:bookstorageservice-cs",
      "kind": "file",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "shortLabel": "BookStorageService",
      "longLabel": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "purpose": "Provides an infrastructure service that persists ebook and cover files to the local web root filesystem and returns web-relative paths for stored assets.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:15km3l4:webstorageservice-cs",
      "kind": "file",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "shortLabel": "WebStorageService",
      "longLabel": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "purpose": "Provides a web-local-storage backed implementation of INativeStorageService for Blazor/JS runtime using IJSRuntime to persist and read simple string/bool values with Result wrapping and basic error handling.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:163bafi:imports-razor",
      "kind": "file",
      "fileId": "file:163bafi:imports-razor",
      "path": "NexusReader.Web/Components/_Imports.razor",
      "canonicalName": "NexusReader.Web/Components/_Imports.razor",
      "shortLabel": "_Imports",
      "longLabel": "NexusReader.Web/Components/_Imports.razor",
      "purpose": "Centralizes Razor @using directives for component files in the NexusReader.Web.Components folder so that child components inherit common namespaces and helpers.",
      "domainTags": [
        "ui-composition",
        "component-library",
        "nexusreader",
        "imports"
      ],
      "technologyTags": [
        "razor-import-aggregation",
        "shared-namespace-injection-for-components",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "imports-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1670zex:nexusreader-maui-csproj",
      "kind": "file",
      "fileId": "file:1670zex:nexusreader-maui-csproj",
      "path": "NexusReader.Maui/NexusReader.Maui.csproj",
      "canonicalName": "NexusReader.Maui/NexusReader.Maui.csproj",
      "shortLabel": "NexusReader.Maui",
      "longLabel": "NexusReader.Maui/NexusReader.Maui.csproj",
      "purpose": "MSBuild project file for the NexusReader MAUI application; declares target frameworks, MAUI usage flags, package and project references, and platform-specific target settings for building the mobile app.",
      "domainTags": [
        "ui-shared",
        "infrastructure-mobile",
        "maui-platform",
        "platform-specific-build-targets-android-ios-maccatalyst-windows"
      ],
      "technologyTags": [
        "maui-app",
        "project-file",
        "platform-specific-targeting"
      ],
      "boundary": {
        "role": "startup",
        "layer": "unknown",
        "boundaryHints": [
          "startup",
          "unknown",
          "nexusreader-maui",
          "nexusreader-maui-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:167q7jt:nexusreader-domain-csproj",
      "kind": "file",
      "fileId": "file:167q7jt:nexusreader-domain-csproj",
      "path": "NexusReader.Domain/NexusReader.Domain.csproj",
      "canonicalName": "NexusReader.Domain/NexusReader.Domain.csproj",
      "shortLabel": "NexusReader.Domain",
      "longLabel": "NexusReader.Domain/NexusReader.Domain.csproj",
      "purpose": "Proj file for the NexusReader.Domain project: declares build/runtime settings and package dependencies for the Domain assembly.",
      "domainTags": [
        "web",
        "web-client",
        "maui",
        "application"
      ],
      "technologyTags": [
        "project-file",
        "packagereferences"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-domain",
          "nexusreader-domain-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:16axv5i:getmyebooksquery-cs",
      "kind": "file",
      "fileId": "file:16axv5i:getmyebooksquery-cs",
      "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "shortLabel": "GetMyEbooksQuery",
      "longLabel": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "purpose": "MediatR query and handler that reads the current user's ebooks from the AppDbContext, projects them into LastReadBookDto instances, and returns them wrapped in a FluentResults Result.",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "kind": "file",
      "fileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "canonicalName": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "shortLabel": "GetKnowledgeGraphQueryHandler",
      "longLabel": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "purpose": "Handles GetKnowledgeGraphQuery by validating input, calling the knowledge service to retrieve graph data, and returning a GraphDataDto wrapped in a FluentResults Result.",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:17um7nh:knowledgeunittype-cs",
      "kind": "file",
      "fileId": "file:17um7nh:knowledgeunittype-cs",
      "path": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "canonicalName": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "shortLabel": "KnowledgeUnitType",
      "longLabel": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "purpose": "Defines the KnowledgeUnitType enumeration used to categorize different kinds of knowledge units across the domain.",
      "domainTags": [
        "knowledgeunit",
        "section",
        "table",
        "definition"
      ],
      "technologyTags": [
        "dotnet",
        "enum"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "enums",
          "knowledgeunittype-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:17v8pus:authenticationheaderhandler-cs",
      "kind": "file",
      "fileId": "file:17v8pus:authenticationheaderhandler-cs",
      "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "canonicalName": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "shortLabel": "AuthenticationHeaderHandler",
      "longLabel": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "purpose": "A HTTP DelegatingHandler for the client that appends stored JWTs to trusted requests, forces browser credentials for SSR, and transparently refreshes expired tokens in a thread-safe manner.",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "handler",
        "layer": "infrastructure",
        "boundaryHints": [
          "handler",
          "infrastructure",
          "nexusreader-web-client",
          "handlers",
          "authenticationheaderhandler-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:184ajmn:nexustypography-razor",
      "kind": "file",
      "fileId": "file:184ajmn:nexustypography-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "shortLabel": "NexusTypography",
      "longLabel": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "purpose": "Blazor UI component that renders typographic content with a variant-driven CSS class and supports arbitrary additional HTML attributes and child content.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexustypography-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "kind": "file",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "shortLabel": "20260503175906_FinalNormalizedSubscriptionArchitecture",
      "longLabel": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "purpose": "EF Core migration that alters database schema to introduce normalized subscription plans, tenant scoping, vector columns (pgvector), and related knowledge unit tables; also seeds subscription plan rows.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:18yxzxe:authlayout-razor",
      "kind": "file",
      "fileId": "file:18yxzxe:authlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
      "canonicalName": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
      "shortLabel": "AuthLayout",
      "longLabel": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
      "purpose": "Blazor layout component that renders a full-screen, fixed authentication shell, injects a shared CSS resource, and renders child content via the layout Body.",
      "domainTags": [
        "nexusreader-ui",
        "layout",
        "authlayout"
      ],
      "technologyTags": [
        "layout-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "authlayout-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1953stk:focusmodeservice-cs",
      "kind": "file",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "shortLabel": "FocusModeService",
      "longLabel": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "purpose": "Provides a UI-scoped service that tracks and persists a 'focus mode' flag using IJSRuntime (localStorage) and notifies subscribers when the mode changes.",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1ain1yo:mainhublayout-razor",
      "kind": "file",
      "fileId": "file:1ain1yo:mainhublayout-razor",
      "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "canonicalName": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "shortLabel": "MainHubLayout",
      "longLabel": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "purpose": "Renders the main application hub layout (sidebar + main content) for authenticated users and coordinates initial identity sync and logout behavior.",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "mainhublayout-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1aunxq2:readernavigationservice-cs",
      "kind": "file",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "shortLabel": "ReaderNavigationService",
      "longLabel": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "purpose": "Provides navigation and in-memory reader state (current ebook, chapter index, total chapters, chapter title) and notifies subscribers when navigation changes; integrates with Blazor NavigationManager to navigate to a book view.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1awldsb:error-razor",
      "kind": "file",
      "fileId": "file:1awldsb:error-razor",
      "path": "NexusReader.Web/Components/Error.razor",
      "canonicalName": "NexusReader.Web/Components/Error.razor",
      "shortLabel": "Error",
      "longLabel": "NexusReader.Web/Components/Error.razor",
      "purpose": "Blazor UI component that displays a generic error message and, when available, expandable technical details from an Exception parameter.",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "error-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1b03oou:subscriptionplan-cs",
      "kind": "file",
      "fileId": "file:1b03oou:subscriptionplan-cs",
      "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "canonicalName": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "shortLabel": "SubscriptionPlan",
      "longLabel": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "purpose": "Defines the domain entity SubscriptionPlan which models subscription tiers, pricing, and token/quota limits for the application.",
      "domainTags": [
        "subscriptionplan",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "dataannotations-ef-core"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "subscriptionplan-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1b5rrku:dashboard-razor",
      "kind": "file",
      "fileId": "file:1b5rrku:dashboard-razor",
      "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Dashboard.razor",
      "shortLabel": "Dashboard",
      "longLabel": "NexusReader.UI.Shared/Pages/Dashboard.razor",
      "purpose": "Razor UI page component that renders the user dashboard and, on initialization, loads the current user's profile from an injected identity service.",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "dashboard-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1bdy8y4:groundedresponsedto-cs",
      "kind": "file",
      "fileId": "file:1bdy8y4:groundedresponsedto-cs",
      "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
      "canonicalName": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
      "shortLabel": "GroundedResponseDto",
      "longLabel": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
      "purpose": "Defines simple DTOs for AI grounded responses and their citations used across the application boundary.",
      "domainTags": [
        "grounded-ai-response",
        "citation",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "poco"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1bp3my2:nexusbutton-razor",
      "kind": "file",
      "fileId": "file:1bp3my2:nexusbutton-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
      "shortLabel": "NexusButton",
      "longLabel": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
      "purpose": "A small reusable Blazor button component that renders a <button>, forwards arbitrary attributes, binds a click callback, and supports disabling and child content.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexusbutton"
      ],
      "technologyTags": [
        "component",
        "eventcallback",
        "attribute-forwarding",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusbutton-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1c4q2p1:graphviewmodels-cs",
      "kind": "file",
      "fileId": "file:1c4q2p1:graphviewmodels-cs",
      "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "canonicalName": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "shortLabel": "GraphViewModels",
      "longLabel": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "purpose": "Defines lightweight Graph view-model/DTO types used by application queries to represent nodes, links, and the aggregated graph data for UI or API consumption.",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "file",
      "fileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "canonicalName": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "purpose": "Defines a domain entity that persists cached semantic knowledge (original text, model/prompt metadata, JSON payload) and its vector embedding for semantic search.",
      "domainTags": [
        "semanticknowledgecache",
        "embedding",
        "modelid",
        "promptversion"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-mapped-model-ef-core-style-with-data-annotations",
        "embedding-cache"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "semanticknowledgecache-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1dbwiwx:program-cs",
      "kind": "file",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "canonicalName": "NexusReader.Web.Client/Program.cs",
      "shortLabel": "Program",
      "longLabel": "NexusReader.Web.Client/Program.cs",
      "purpose": "Bootstrap the WebAssembly client: configure DI for the WASM frontend, register platform/UI/identity/AI services, provide HttpClient, register application services, and register server-only throwing stubs so DI validation passes in the browser.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1dyqnkg:jsonrepairhelper-cs",
      "kind": "file",
      "fileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "canonicalName": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "shortLabel": "JsonRepairHelper",
      "longLabel": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "purpose": "Utility that attempts to repair truncated or malformed JSON strings by pruning trailing garbage and appending necessary closing quotes/brackets/braces.",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "jsonrepairhelper-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1ez5kuw:selectionaipanel-razor",
      "kind": "file",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "shortLabel": "SelectionAiPanel",
      "longLabel": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "purpose": "Blazor UI component that shows an AI assistant panel for a user text selection, requests summaries/quizzes via an injected KnowledgeCoordinator, and notifies the reader interaction service when closed.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "kind": "file",
      "fileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "canonicalName": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "shortLabel": "GetInitializationStatusQueryHandler",
      "longLabel": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "purpose": "A simple application query handler that responds to a GetInitializationStatusQuery with a constant success message indicating the application is initialized.",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1foudu6:readerfooter-razor",
      "kind": "file",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "shortLabel": "ReaderFooter",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "purpose": "Blazor UI component that renders the reader footer: chapter navigation, progress bar and meta info; observes navigation changes to update UI.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1fs0p2c:userprofiledto-cs",
      "kind": "file",
      "fileId": "file:1fs0p2c:userprofiledto-cs",
      "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "canonicalName": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "shortLabel": "UserProfileDto",
      "longLabel": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "purpose": "Defines DTOs for returning user profile and last-read book information across the application boundary (UI/API), including helper computed properties for UI compatibility.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1h2hpbe:appdbcontextfactory-cs",
      "kind": "file",
      "fileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "canonicalName": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "shortLabel": "AppDbContextFactory",
      "longLabel": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "purpose": "Design-time EF Core DbContext factory: locates solution/web project, builds configuration, resolves a Postgres connection (with fallback), configures DbContextOptions (including pgvector) and returns an AppDbContext for design-time tooling (migrations, scaffolding).",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "unknown",
        "boundaryHints": [
          "unknown",
          "nexusreader-data",
          "persistence",
          "appdbcontextfactory-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1hlb3r7:iebookrepository-cs",
      "kind": "file",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "shortLabel": "IEbookRepository",
      "longLabel": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "purpose": "Defines the application-layer abstraction for ebook and author persistence operations (repository interface) so the Application layer can depend on an interface rather than EF Core or other infra implementations.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1hn70tz:register-razor",
      "kind": "file",
      "fileId": "file:1hn70tz:register-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Account/Register.razor",
      "shortLabel": "Register",
      "longLabel": "NexusReader.UI.Shared/Pages/Account/Register.razor",
      "purpose": "Blazor Razor page that renders a registration form, handles client-side validation and orchestrates user registration and immediate sign-in via injected identity service and a JS helper to complete cookie-based sign-in.",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1hyu1ez:prouserhandler-cs",
      "kind": "file",
      "fileId": "file:1hyu1ez:prouserhandler-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "canonicalName": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "shortLabel": "ProUserHandler",
      "longLabel": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "purpose": "Authorization handler that enforces 'Pro' user access by checking the current user's subscription and AI token usage against limits in the application's database.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1it42kj:inativestorageservice-cs",
      "kind": "file",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "shortLabel": "INativeStorageService",
      "longLabel": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "purpose": "Defines an application-level abstraction for platform/native key-value storage including secure and non-secure reads, writes, and removals.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "kind": "file",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "shortLabel": "20260429080302_AddQuizResults.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "purpose": "EF Core migration designer that defines the target database model (tables, columns, keys, indices, and relationships) for the AddQuizResults migration.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "kind": "file",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "shortLabel": "20260510151022_NormalizeAuthor.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "purpose": "EF Core migration designer snapshot that defines the target database model for the \"NormalizeAuthor\" migration: maps entities, properties, keys, indices, relationships, and seed data used by migrations at runtime.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1jnstne:readerinteractionservice-cs",
      "kind": "file",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "shortLabel": "ReaderInteractionService",
      "longLabel": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "purpose": "A small UI-shared interaction service that exposes events for UI components (node selection, scrolling, highlighting, text selection) and provides methods to raise those events for subscribers.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1k4g04u:iquery-cs",
      "kind": "file",
      "fileId": "file:1k4g04u:iquery-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
      "shortLabel": "IQuery",
      "longLabel": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
      "purpose": "Defines a generic marker/query contract for application queries that return a FluentResults-wrapped response via MediatR.",
      "domainTags": [
        "query",
        "result-t",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediator",
        "result-wrapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1k69za4:semanticsearchresultdto-cs",
      "kind": "file",
      "fileId": "file:1k69za4:semanticsearchresultdto-cs",
      "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
      "canonicalName": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
      "shortLabel": "SemanticSearchResultDto",
      "longLabel": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
      "purpose": "Defines a simple Data Transfer Object (DTO) representing a semantic search result used by the Application layer to carry search snippet, relevance and metadata.",
      "domainTags": [
        "semanticsearch",
        "ai",
        "searchresult",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1kjntt:intelligence-razor",
      "kind": "file",
      "fileId": "file:1kjntt:intelligence-razor",
      "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "shortLabel": "Intelligence",
      "longLabel": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "purpose": "Razor UI page providing a client-side interface for asking AI questions against the user's library (Global AI Q&A); binds input, loads book scope, calls the knowledge service, and renders answers with grounded citations.",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "intelligence-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1la6lrw:syncservice-cs",
      "kind": "file",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/SyncService.cs",
      "shortLabel": "SyncService",
      "longLabel": "NexusReader.UI.Shared/Services/SyncService.cs",
      "purpose": "Client-side service that establishes a SignalR hub connection to synchronize reading progress (pages) with a remote server, providing debounce logic, event exposure, and lifecycle disposal.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1m26se1:getinitializationstatusquery-cs",
      "kind": "file",
      "fileId": "file:1m26se1:getinitializationstatusquery-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
      "shortLabel": "GetInitializationStatusQuery",
      "longLabel": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
      "purpose": "Defines a CQRS query message used to request the application's initialization status (string) from the Application layer.",
      "domainTags": [
        "initializationstatus",
        "nexusreader",
        "queries",
        "system"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "query-object"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "kind": "file",
      "fileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "shortLabel": "20260428185239_IncreaseHashLength",
      "longLabel": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "purpose": "EF Core migration that updates column types/constraints: increases the ContentHash length and switches certain DateTime columns to use 'timestamp without time zone' (with a Down method to revert).",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "file",
      "fileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "canonicalName": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "shortLabel": "KnowledgeUnitLink",
      "longLabel": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "purpose": "Defines the domain entity KnowledgeUnitLink which models a directed relation between two KnowledgeUnit entities with metadata (relation type) and EF Core persistence annotations.",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunitlink-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1mo9e25:iepubreader-cs",
      "kind": "file",
      "fileId": "file:1mo9e25:iepubreader-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "shortLabel": "IEpubReader",
      "longLabel": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "purpose": "Defines the application service contract for reading and parsing EPUB content for a specific ebook and chapter (async, tenant-aware).",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubreader-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1molfey:imports-razor",
      "kind": "file",
      "fileId": "file:1molfey:imports-razor",
      "path": "NexusReader.UI.Shared/_Imports.razor",
      "canonicalName": "NexusReader.UI.Shared/_Imports.razor",
      "shortLabel": "_Imports",
      "longLabel": "NexusReader.UI.Shared/_Imports.razor",
      "purpose": "Centralizes Razor @using directives for the NexusReader.UI.Shared Razor component library so components can share common namespaces (components, layout, services, application DTOs/queries, logging, and Blazor primitives).",
      "domainTags": [
        "reader",
        "user",
        "ui-components",
        "layout"
      ],
      "technologyTags": [
        "razor-imports-aggregation",
        "namespace-centralization-for-shared-ui"
      ],
      "boundary": {
        "role": "config",
        "layer": "frontend",
        "boundaryHints": [
          "config",
          "frontend",
          "nexusreader-ui-shared",
          "imports-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1mpguez:settings-razor",
      "kind": "file",
      "fileId": "file:1mpguez:settings-razor",
      "path": "NexusReader.UI.Shared/Pages/Settings.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Settings.razor",
      "shortLabel": "Settings",
      "longLabel": "NexusReader.UI.Shared/Pages/Settings.razor",
      "purpose": "A Blazor UI page that exposes a protected \"Settings\" view with static markup and local styles for account and reading preferences.",
      "domainTags": [
        "settings",
        "account-preferences",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "ui-component",
        "protected-route",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "settings-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1niza9w:globalintelligencepanel-razor",
      "kind": "file",
      "fileId": "file:1niza9w:globalintelligencepanel-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "shortLabel": "GlobalIntelligencePanel",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "purpose": "Blazor UI component that renders a 'Global Intelligence' semantic search panel, shows loading/results/empty states, and forwards search queries via an EventCallback.",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "globalintelligencepanel-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "kind": "file",
      "fileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "shortLabel": "20260510161155_AddEbookProgressAndChapter",
      "longLabel": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "purpose": "EF Core migration that adds two columns (LastChapter, Progress) to the Ebooks table and provides a Down method to remove them.",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1pacvtg:appdbcontext-cs",
      "kind": "file",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "canonicalName": "NexusReader.Data/Persistence/AppDbContext.cs",
      "shortLabel": "AppDbContext",
      "longLabel": "NexusReader.Data/Persistence/AppDbContext.cs",
      "purpose": "Defines the Entity Framework Core database context for the application: DbSet surface, EF configuration, model mapping (indexes, FKs, delete behavior), provider-specific type mapping, and deterministic seed data for subscription plans.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "kind": "file",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "shortLabel": "20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "purpose": "EF Core migration designer that builds the target EF Core model for the migration UpdateSubscriptionPlanIsUnlimitedTokens; contains the model snapshot/configuration (entities, properties, indexes, relations, and seed data) used by EF migrations.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1qcpa0s:ingestebookrequest-cs",
      "kind": "file",
      "fileId": "file:1qcpa0s:ingestebookrequest-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs",
      "canonicalName": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs",
      "shortLabel": "IngestEbookRequest",
      "longLabel": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs",
      "purpose": "Defines a command/DTO that carries data needed to ingest an EPUB ebook into the application (title, author, cover image, base64 epub payload, and optional description).",
      "domainTags": [
        "ebook",
        "library",
        "ingestion",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "command",
        "dto"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "kind": "file",
      "fileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "shortLabel": "20260513183726_FixKnowledgeUnitEbookId",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "purpose": "EF Core migration that replaces KnowledgeUnits.SourceId (string) with KnowledgeUnits.EbookId (Guid), adds index and FK to Ebooks, and provides the reverse Down migration.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1rikffk:viewmodels-cs",
      "kind": "file",
      "fileId": "file:1rikffk:viewmodels-cs",
      "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "canonicalName": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "shortLabel": "ViewModels",
      "longLabel": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "purpose": "Defines polymorphic content-block models and a reader page view model used by the application query layer to transport reader UI data (blocks, chapter indexes, ebook id).",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1sm6kjd:routes-razor",
      "kind": "file",
      "fileId": "file:1sm6kjd:routes-razor",
      "path": "NexusReader.UI.Shared/Routes.razor",
      "canonicalName": "NexusReader.UI.Shared/Routes.razor",
      "shortLabel": "Routes",
      "longLabel": "NexusReader.UI.Shared/Routes.razor",
      "purpose": "Blazor routing and global error boundary component that wires application-level navigation, authorization gating, NotFound fallback and a UI error screen with a retry (recover) action.",
      "domainTags": [
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "routes-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1szg1zb:ireaderinteractionservice-cs",
      "kind": "file",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "shortLabel": "IReaderInteractionService",
      "longLabel": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "purpose": "Defines an interface for UI-level reader interactions (node/block selection, scrolling, highlighting, and text selection) and a small DTO for selection coordinates used across UI clients.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1tk8lz4:ingestebookcommand-cs",
      "kind": "file",
      "fileId": "file:1tk8lz4:ingestebookcommand-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
      "canonicalName": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
      "shortLabel": "IngestEbookCommand",
      "longLabel": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
      "purpose": "Defines a CQRS command DTO used to ingest a new ebook into the library, carrying ebook metadata and binary payloads (cover and EPUB) across the application boundary.",
      "domainTags": [
        "ebook",
        "library",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1uay25w:mauiprogram-cs",
      "kind": "file",
      "fileId": "file:1uay25w:mauiprogram-cs",
      "path": "NexusReader.Maui/MauiProgram.cs",
      "canonicalName": "NexusReader.Maui/MauiProgram.cs",
      "shortLabel": "MauiProgram",
      "longLabel": "NexusReader.Maui/MauiProgram.cs",
      "purpose": "Bootstraps and configures the MAUI application: creates the MAUI host builder, registers DI services (UI, platform, identity, app services), configures MediatR and returns the built MauiApp.",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "unknown",
        "boundaryHints": [
          "program-entry",
          "unknown",
          "nexusreader-maui",
          "mauiprogram-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1ud0jop:iidentityservice-cs",
      "kind": "file",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "shortLabel": "IIdentityService",
      "longLabel": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "purpose": "Defines the identity/authentication abstraction for the Application layer: registration, login/logout, profile retrieval, token refresh, and an event for state invalidation.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1ufa6nr:wasmknowledgeservice-cs",
      "kind": "file",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "canonicalName": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "shortLabel": "WasmKnowledgeService",
      "longLabel": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "purpose": "Blazor WebAssembly client implementation of IKnowledgeService that calls backend /api/knowledge endpoints to provide semantic search, QA, summaries, maps, and cache operations.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1uhcs2l:library-razor",
      "kind": "file",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Library.razor",
      "shortLabel": "Library",
      "longLabel": "NexusReader.UI.Shared/Pages/Library.razor",
      "purpose": "Blazor UI page that displays the user's library of e-books, loads last-read book summaries from the API, and provides UI to ingest new books or open a selected book.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1uvdam9:currentreadingwidget-razor",
      "kind": "file",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "shortLabel": "CurrentReadingWidget",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "purpose": "Blazor UI component that displays the user's current reading/book progress card and provides navigation actions to continue reading or go to the library.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1vi6r42:prouserrequirement-cs",
      "kind": "file",
      "fileId": "file:1vi6r42:prouserrequirement-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
      "canonicalName": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
      "shortLabel": "ProUserRequirement",
      "longLabel": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
      "purpose": "Defines an authorization requirement used to gate features to users with an active \"Pro\" subscription or sufficient AI tokens.",
      "domainTags": [
        "pro-subscription",
        "ai-tokens",
        "authorization-requirement",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-policy"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "application",
        "boundaryHints": [
          "middleware",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "kind": "file",
      "fileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "shortLabel": "20260514184243_AddDescriptionToEbook.Designer",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "purpose": "EF Core migration designer for 'AddDescriptionToEbook' that defines the target EF Core model snapshot (tables, columns, keys, indexes, relationships) and seeds subscription plan data for the database migration.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1wkle85:reconnectmodal-razor-js",
      "kind": "file",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "canonicalName": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "shortLabel": "ReconnectModal.razor",
      "longLabel": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "purpose": "Client-side script for the Reconnect modal component: attaches UI event handlers and orchestrates reconnect/resume flows (using Blazor interop), handling retries, visibility-driven retries, and fallback reloads.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1wvgol7:nexusreader-web-client-csproj",
      "kind": "file",
      "fileId": "file:1wvgol7:nexusreader-web-client-csproj",
      "path": "NexusReader.Web.Client/NexusReader.Web.Client.csproj",
      "canonicalName": "NexusReader.Web.Client/NexusReader.Web.Client.csproj",
      "shortLabel": "NexusReader.Web.Client",
      "longLabel": "NexusReader.Web.Client/NexusReader.Web.Client.csproj",
      "purpose": "MSBuild project file that configures a Blazor WebAssembly client build (target framework, SDK properties) and lists package and project dependencies required by the web client.",
      "domainTags": [
        "blazor-wasm",
        "client-http-pipeline",
        "epub-processing-versone-epub",
        "nexusreader-web"
      ],
      "technologyTags": [
        "packagereference",
        "projectreference",
        "blazor-webassembly-client"
      ],
      "boundary": {
        "role": "config",
        "layer": "frontend",
        "boundaryHints": [
          "config",
          "frontend",
          "nexusreader-web-client",
          "nexusreader-web-client-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1wvs02p:tokenlimitrequirement-cs",
      "kind": "file",
      "fileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
      "canonicalName": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
      "shortLabel": "TokenLimitRequirement",
      "longLabel": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
      "purpose": "Defines an authorization requirement type used to represent a policy that checks whether a user has exceeded an AI token limit.",
      "domainTags": [
        "tokenlimit",
        "authorization-policy",
        "nexusreader",
        "identity"
      ],
      "technologyTags": [
        "dotnet",
        "policy-based-authorization",
        "requirement-authorizationrequirement"
      ],
      "boundary": {
        "role": "entity",
        "layer": "unknown",
        "boundaryHints": [
          "entity",
          "unknown",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimitrequirement-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "kind": "file",
      "fileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "shortLabel": "20260513181743_AddEbookReadyFlag",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "purpose": "Entity Framework Core migration that adds a boolean 'IsReadyForReading' flag to the 'Ebooks' table and provides a rollback to remove it.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1wyr0y8:quizresult-cs",
      "kind": "file",
      "fileId": "file:1wyr0y8:quizresult-cs",
      "path": "NexusReader.Domain/Entities/QuizResult.cs",
      "canonicalName": "NexusReader.Domain/Entities/QuizResult.cs",
      "shortLabel": "QuizResult",
      "longLabel": "NexusReader.Domain/Entities/QuizResult.cs",
      "purpose": "Domain entity that models and persists the result of an AI-generated quiz taken by a user, including score, totals, tenant scoping and completion timestamp.",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "quizresult-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1x9xhbs:iknowledgegraphservice-cs",
      "kind": "file",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "shortLabel": "IKnowledgeGraphService",
      "longLabel": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "purpose": "Defines the UI-shared contract for a knowledge-graph state service: read-only state properties, events for change notifications, and async commands to update/clear state.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "kind": "file",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "shortLabel": "20260503175906_FinalNormalizedSubscriptionArchitecture.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "purpose": "EF Core migration designer that defines the target EF model for the AppDbContext: configures entities, relationships, indices, Postgres/vector extensions and includes seed data for subscription plans.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "kind": "file",
      "fileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "shortLabel": "20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens",
      "longLabel": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "purpose": "EF Core migration that adds an IsUnlimitedTokens column to the SubscriptionPlans table and adjusts seeded SubscriptionPlans data (AITokenLimit and StripeProductId) to reflect the new column; reversible via Down.",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1y56eud:author-cs",
      "kind": "file",
      "fileId": "file:1y56eud:author-cs",
      "path": "NexusReader.Domain/Entities/Author.cs",
      "canonicalName": "NexusReader.Domain/Entities/Author.cs",
      "shortLabel": "Author",
      "longLabel": "NexusReader.Domain/Entities/Author.cs",
      "purpose": "Domain entity representing an author with identity, name, and a collection of authored ebooks for persistence and ORM mapping.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "author-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "kind": "file",
      "fileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "canonicalName": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "shortLabel": "AppDbContextModelSnapshot",
      "longLabel": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "purpose": "EF Core model snapshot that records the database model (entities, properties, indexes, relationships, and seed data) for AppDbContext so migrations can compare model changes at runtime.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "appdbcontextmodelsnapshot-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:27eki7:knowledgeservice-cs",
      "kind": "file",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "shortLabel": "KnowledgeService",
      "longLabel": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "purpose": "Infrastructure implementation of IKnowledgeService: orchestrates retrieval/creation of structured knowledge from text using AI, caches results in Postgres, de-duplicates concurrent requests, stores/updates KnowledgeUnits and links, and provides RAG search/grounding via Qdrant + Neo4j.",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:2eckht:verifygroundednesscommand-cs",
      "kind": "file",
      "fileId": "file:2eckht:verifygroundednesscommand-cs",
      "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "canonicalName": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "shortLabel": "VerifyGroundednessCommand",
      "longLabel": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "purpose": "Defines a MediatR command and its handler that delegates verification of an answer's groundedness to the application's IKnowledgeService.",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "ai"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:38gozs:tokenlimithandler-cs",
      "kind": "file",
      "fileId": "file:38gozs:tokenlimithandler-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "canonicalName": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "shortLabel": "TokenLimitHandler",
      "longLabel": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "purpose": "Authorization handler that enforces per-user AI token limits by loading the user and their subscription from the DB and succeeding the requirement when tokens remain or the plan is unlimited.",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "infrastructure",
        "boundaryHints": [
          "middleware",
          "infrastructure",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimithandler-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:3sb16d:readercanvas-razor",
      "kind": "file",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "shortLabel": "ReaderCanvas",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "purpose": "Razor UI component that renders an ebook reader canvas, manages chapter loading, selection/highlight UX, JS observers/selection interop, and synchronizes reading progress across devices.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:3xx07l:quizstateservice-cs",
      "kind": "file",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "shortLabel": "QuizStateService",
      "longLabel": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "purpose": "In-memory UI/shared service that holds quiz-related state (current quiz, block id, hydration and new-quiz flag) and notifies subscribers via events when the quiz is requested or updated.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:43kjze:class1-cs",
      "kind": "file",
      "fileId": "file:43kjze:class1-cs",
      "path": "NexusReader.Infrastructure.Mobile/Class1.cs",
      "canonicalName": "NexusReader.Infrastructure.Mobile/Class1.cs",
      "shortLabel": "Class1",
      "longLabel": "NexusReader.Infrastructure.Mobile/Class1.cs",
      "purpose": "Placeholder/infrastructure mobile file; defines an empty class in the NexusReader.Infrastructure.Mobile namespace. Likely a stub for MAUI platform-specific services but contains no runtime behavior.",
      "domainTags": [
        "nexusreader-infrastructure",
        "class1"
      ],
      "technologyTags": [
        "dotnet"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "class1-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:441s21:isyncbroadcaster-cs",
      "kind": "file",
      "fileId": "file:441s21:isyncbroadcaster-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "shortLabel": "ISyncBroadcaster",
      "longLabel": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "purpose": "Defines an application-layer abstraction for broadcasting real-time synchronization and ingestion progress events to connected client devices (keeps Application layer decoupled from SignalR).",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:47d4sb:synchub-cs",
      "kind": "file",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "canonicalName": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "shortLabel": "SyncHub",
      "longLabel": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "purpose": "Defines a SignalR Hub that accepts authenticated client connections and forwards reading-progress updates to the application layer via MediatR, and manages per-user SignalR groups on connect/disconnect.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:485hwz:localepubmetadata-cs",
      "kind": "file",
      "fileId": "file:485hwz:localepubmetadata-cs",
      "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
      "canonicalName": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
      "shortLabel": "LocalEpubMetadata",
      "longLabel": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
      "purpose": "Defines a simple data transfer shape that carries metadata extracted from a local EPUB file (title, author, cover bytes, description).",
      "domainTags": [
        "epub",
        "book",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:4pj82p:getuserprofilequeryhandler-cs",
      "kind": "file",
      "fileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "canonicalName": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "shortLabel": "GetUserProfileQueryHandler",
      "longLabel": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "purpose": "MediatR query handler that reads user profile data from the application's EF Core DbContext, projects it into UserProfileDto and returns it wrapped in a FluentResults Result.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:62lucr:app-xaml-cs",
      "kind": "file",
      "fileId": "file:62lucr:app-xaml-cs",
      "path": "NexusReader.Maui/App.xaml.cs",
      "canonicalName": "NexusReader.Maui/App.xaml.cs",
      "shortLabel": "App.xaml",
      "longLabel": "NexusReader.Maui/App.xaml.cs",
      "purpose": "Defines the MAUI Application subclass for the app and sets up the initial UI by initializing XAML components and assigning the MainPage.",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "app-xaml-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:69lwdf:nexusreader-ui-shared-csproj",
      "kind": "file",
      "fileId": "file:69lwdf:nexusreader-ui-shared-csproj",
      "path": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
      "canonicalName": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
      "shortLabel": "NexusReader.UI.Shared",
      "longLabel": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
      "purpose": "Project file for the NexusReader.UI.Shared Razor library; declares target framework, Blazor/SignalR/MediatR package dependencies and a project reference to the application layer to enable shared UI components and cross-layer types.",
      "domainTags": [
        "nexusreader-ui",
        "application-layer-integration",
        "nexusreader-ui-shared"
      ],
      "technologyTags": [
        "mediator-mediatr-referenced",
        "component-library-razor-blazor-shared-ui",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "nexusreader-ui-shared-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "kind": "file",
      "fileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "shortLabel": "20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "purpose": "EF Core migration designer that defines the target EF Core model for the migration 'MakeKnowledgeUnitEbookIdNullable' — configures entities, relationships, indices, vector extension, identity settings and seeds subscription plan data.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:7ji0h3:mauistorageservice-cs",
      "kind": "file",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "canonicalName": "NexusReader.Maui/Services/MauiStorageService.cs",
      "shortLabel": "MauiStorageService",
      "longLabel": "NexusReader.Maui/Services/MauiStorageService.cs",
      "purpose": "Platform-specific MAUI implementation of INativeStorageService that wraps Preferences and SecureStorage operations and returns FluentResults-wrapped outcomes.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:82rsqa:redirecttologin-razor",
      "kind": "file",
      "fileId": "file:82rsqa:redirecttologin-razor",
      "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
      "shortLabel": "RedirectToLogin",
      "longLabel": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
      "purpose": "Razor UI component that immediately redirects the current user to the /account/login page, preserving the current path as a returnUrl query parameter when present.",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "redirecttologin-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:83c16m:aiassistantbubble-razor",
      "kind": "file",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "shortLabel": "AiAssistantBubble",
      "longLabel": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "purpose": "Blazor UI component that shows an AI assistant bubble: fetches a summary/quiz for a given content block, streams word-by-word reveal, exposes action buttons (show more / quiz), and manages streaming cancellation and lifecycle.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:8kve74:bookingestionmodal-razor",
      "kind": "file",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "shortLabel": "BookIngestionModal",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "purpose": "Razor UI component that provides a modal for uploading .epub files, extracting metadata client-side, and sending an ingest request to the server to add a book to the user's library.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:902xey:nativestorageservice-cs",
      "kind": "file",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "canonicalName": "NexusReader.Web/Services/NativeStorageService.cs",
      "shortLabel": "NativeStorageService",
      "longLabel": "NexusReader.Web/Services/NativeStorageService.cs",
      "purpose": "Provides a server-side Blazor implementation of INativeStorageService that reads/writes browser localStorage via IJSRuntime, with protections for prerendering/JS-unavailable scenarios and Result-based error handling.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:9775p0:subscriptionplandto-cs",
      "kind": "file",
      "fileId": "file:9775p0:subscriptionplandto-cs",
      "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
      "canonicalName": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
      "shortLabel": "SubscriptionPlanDto",
      "longLabel": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
      "purpose": "Defines a data-transfer object representing a subscription plan (id, display name, token limits, and monthly price) used across the application layer.",
      "domainTags": [
        "subscriptionplan",
        "billing",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record-c-9"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:9fivst:ibookstorageservice-cs",
      "kind": "file",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "shortLabel": "IBookStorageService",
      "longLabel": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "purpose": "Defines an application-level abstraction for saving ebook and cover files, returning relative paths/URLs; implementations handle actual storage persistence.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:9lh011:getreaderpagequery-cs",
      "kind": "file",
      "fileId": "file:9lh011:getreaderpagequery-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
      "shortLabel": "GetReaderPageQuery",
      "longLabel": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
      "purpose": "Defines a CQRS query record used to request a specific ebook chapter (reader page) for a given user/tenant, returning a ReaderPageViewModel.",
      "domainTags": [
        "ebook",
        "reader",
        "chapter",
        "tenant-user"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:a32vvn:20260428184727-initialpostgres-cs",
      "kind": "file",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "shortLabel": "20260428184727_InitialPostgres",
      "longLabel": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "purpose": "An Entity Framework Core migration that creates the initial PostgreSQL schema for identity tables, application user/ebook tables and a semantic knowledge cache for the NexusReader application.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:ayj9r2:iqueryhandler-cs",
      "kind": "file",
      "fileId": "file:ayj9r2:iqueryhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "shortLabel": "IQueryHandler",
      "longLabel": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "purpose": "Declares an application-layer abstraction for handling queries (CQRS) where handlers return a FluentResults.Result<TResponse> via MediatR.",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:b8uv8h:identityservice-cs",
      "kind": "file",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "shortLabel": "IdentityService",
      "longLabel": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "purpose": "Client-side identity helper used by UI layers to register, login, logout, refresh tokens and fetch/cached user profile information; bridges HttpClient, native secure storage and the app authentication state provider.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:bk6gk1:nexusreader-data-csproj",
      "kind": "file",
      "fileId": "file:bk6gk1:nexusreader-data-csproj",
      "path": "NexusReader.Data/NexusReader.Data.csproj",
      "canonicalName": "NexusReader.Data/NexusReader.Data.csproj",
      "shortLabel": "NexusReader.Data",
      "longLabel": "NexusReader.Data/NexusReader.Data.csproj",
      "purpose": "Defines the .NET project configuration for the NexusReader.Data assembly, declaring target framework, NuGet package dependencies (EF Core, providers, configuration packages, Pgvector) and a project reference to the domain project.",
      "domainTags": [
        "persistence-data-access",
        "entity-framework-core",
        "database-providers-sqlite-postgresql-npgsql",
        "vector-embeddings-via-pgvector"
      ],
      "technologyTags": [
        "entity-framework-core",
        "repository-implied",
        "provider-based-db-configuration"
      ],
      "boundary": {
        "role": "config",
        "layer": "data",
        "boundaryHints": [
          "config",
          "data",
          "nexusreader-data",
          "nexusreader-data-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:csf9l7:login-razor",
      "kind": "file",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "shortLabel": "Login",
      "longLabel": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "purpose": "Razor UI page for user login: renders email/password and Google auth UI, validates input, calls identity service to authenticate, and triggers a hidden form JS submission for cookie-based sign-in.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:d17zn6:mauistorageservice-cs",
      "kind": "file",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "canonicalName": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "shortLabel": "MauiStorageService",
      "longLabel": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "purpose": "Provides a MAUI-specific implementation of INativeStorageService that wraps Preferences and SecureStorage to persist simple keys/values, returning FluentResults and converting exceptions to failure results.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:d3gg9l:epubmetadataextractor-cs",
      "kind": "file",
      "fileId": "file:d3gg9l:epubmetadataextractor-cs",
      "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "shortLabel": "EpubMetadataExtractor",
      "longLabel": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "purpose": "Provides a lightweight infrastructure service that reads metadata (title, author, description, cover image) from an EPUB stream without persisting anything; used by the ingestion UI prior to upload confirmation.",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubmetadataextractor-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:dskay:submitanswercommand-cs",
      "kind": "file",
      "fileId": "file:dskay:submitanswercommand-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
      "canonicalName": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
      "shortLabel": "SubmitAnswerCommand",
      "longLabel": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
      "purpose": "Defines a simple application command that carries a quiz answer selection (selected index and correct index) to be handled by the application's command pipeline.",
      "domainTags": [
        "quiz",
        "answer-submission",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:e05hy9:authordto-cs",
      "kind": "file",
      "fileId": "file:e05hy9:authordto-cs",
      "path": "NexusReader.Application/DTOs/User/AuthorDto.cs",
      "canonicalName": "NexusReader.Application/DTOs/User/AuthorDto.cs",
      "shortLabel": "AuthorDto",
      "longLabel": "NexusReader.Application/DTOs/User/AuthorDto.cs",
      "purpose": "Defines an immutable data transfer object (DTO) representing an author with an Id and Name used across the application layer.",
      "domainTags": [
        "author",
        "user",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "immutable-record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:e9w1fz:imports-razor",
      "kind": "file",
      "fileId": "file:e9w1fz:imports-razor",
      "path": "NexusReader.Maui/_Imports.razor",
      "canonicalName": "NexusReader.Maui/_Imports.razor",
      "shortLabel": "_Imports",
      "longLabel": "NexusReader.Maui/_Imports.razor",
      "purpose": "Defines global Razor namespace imports for the MAUI application's Razor components so shared UI types are available without per-file using statements.",
      "domainTags": [
        "nexusreader",
        "imports"
      ],
      "technologyTags": [
        "global-using",
        "razor-imports",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-maui",
          "imports-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:faws7u:stripesettings-cs",
      "kind": "file",
      "fileId": "file:faws7u:stripesettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
      "canonicalName": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
      "shortLabel": "StripeSettings",
      "longLabel": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
      "purpose": "Defines a configuration model for Stripe-related settings (product IDs) used for binding application configuration (Options pattern).",
      "domainTags": [
        "stripe",
        "billing",
        "products",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-poco"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "stripesettings-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:g197tx:storagekeys-cs",
      "kind": "file",
      "fileId": "file:g197tx:storagekeys-cs",
      "path": "NexusReader.Application/Constants/StorageKeys.cs",
      "canonicalName": "NexusReader.Application/Constants/StorageKeys.cs",
      "shortLabel": "StorageKeys",
      "longLabel": "NexusReader.Application/Constants/StorageKeys.cs",
      "purpose": "Holds string constant keys used for storing authentication and user-related values in client/app storage (e.g., local storage or secure storage).",
      "domainTags": [
        "authentication",
        "user",
        "nexusreader",
        "constants"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "constants",
          "storagekeys-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:gg5jm5:icommand-cs",
      "kind": "file",
      "fileId": "file:gg5jm5:icommand-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
      "shortLabel": "ICommand",
      "longLabel": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
      "purpose": "Defines application-level command message contracts used with MediatR and FluentResults to represent commands that return operation Results.",
      "domainTags": [
        "command",
        "nexusreader",
        "abstractions",
        "messaging"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:h6a0xu:knowledgeunit-cs",
      "kind": "file",
      "fileId": "file:h6a0xu:knowledgeunit-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "canonicalName": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "shortLabel": "KnowledgeUnit",
      "longLabel": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "purpose": "Defines the domain entity KnowledgeUnit representing a unit of extracted/ingested knowledge (content, type, metadata, links) stored per tenant with EF Core mapping attributes.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunit-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:h6mj95:home-razor",
      "kind": "file",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "canonicalName": "NexusReader.UI.Shared/Pages/Home.razor",
      "shortLabel": "Home",
      "longLabel": "NexusReader.UI.Shared/Pages/Home.razor",
      "purpose": "Razor UI page for the Nexus E-Reader reader experience: mounts the ReaderCanvas, handles navigation/book selection from route/query or user profile, wires UI events (quiz, focus mode), initializes JS focus interop, and cleans up resources on disposal.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:ha7eft:promptregistry-cs",
      "kind": "file",
      "fileId": "file:ha7eft:promptregistry-cs",
      "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
      "shortLabel": "PromptRegistry",
      "longLabel": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
      "purpose": "Holds centralized, reusable LLM prompt templates and schemas used by the infrastructure layer for knowledge extraction, graph extraction, summary/quiz generation, and KM segmentation.",
      "domainTags": [
        "knowledge-extraction",
        "knowledge-graph",
        "quiz-generation",
        "knowledge-unit-segmentation"
      ],
      "technologyTags": [
        "dotnet",
        "registry",
        "constants"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "promptregistry-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:hc4koi:submitanswercommandhandler-cs",
      "kind": "file",
      "fileId": "file:hc4koi:submitanswercommandhandler-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
      "canonicalName": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
      "shortLabel": "SubmitAnswerCommandHandler",
      "longLabel": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
      "purpose": "Handles quiz answer submission: verifies the selected answer against the correct index, triggers a platform vibration on correct answers, and returns a success/failure Result.",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:hiutf5:wasmepubservice-cs",
      "kind": "file",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "canonicalName": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "shortLabel": "WasmEpubService",
      "longLabel": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "purpose": "Provides WebAssembly/client-side implementations for reading EPUB content and extracting EPUB metadata in-browser using HttpClient and a local EPUB library.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:hjtala:knowledgepacket-cs",
      "kind": "file",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "canonicalName": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "shortLabel": "KnowledgePacket",
      "longLabel": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "purpose": "Defines data transfer objects (records) used to represent AI knowledge artifacts (concepts, quiz questions, knowledge units/links, and aggregated knowledge packets) for serialization across the Application layer.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:i1pwrm:themeservice-cs",
      "kind": "file",
      "fileId": "file:i1pwrm:themeservice-cs",
      "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "shortLabel": "ThemeService",
      "longLabel": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "purpose": "A small UI-shared service that tracks and toggles light/dark theme state and notifies subscribers when the theme changes.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "themeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "kind": "file",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "shortLabel": "NexusAuthenticationStateProvider",
      "longLabel": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "purpose": "Provides Blazor AuthenticationStateProvider implementation that reads persisted user authentication info (token, email, tenant, roles) from a native secure storage service, caches the computed AuthenticationState, and notifies consumers about authentication changes.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:igeyi7:nexussearchbox-razor",
      "kind": "file",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "shortLabel": "NexusSearchBox",
      "longLabel": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "purpose": "A Blazor UI component that renders a search input, exposes parameters for placeholder/icon, tracks local search text, invokes a parent-provided search callback when Enter is pressed, and allows clearing the input.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:jg997z:main-razor",
      "kind": "file",
      "fileId": "file:jg997z:main-razor",
      "path": "NexusReader.Maui/Main.razor",
      "canonicalName": "NexusReader.Maui/Main.razor",
      "shortLabel": "Main",
      "longLabel": "NexusReader.Maui/Main.razor",
      "purpose": "Root Blazor component for the MAUI app that wires routing, authorization gating, default layout, focus-on-navigation behavior and a not-found fallback UI.",
      "domainTags": [
        "navigation",
        "authorization",
        "ui-layout",
        "nexusreader"
      ],
      "technologyTags": [
        "routing",
        "auth-guard",
        "layout-composition"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "frontend",
        "boundaryHints": [
          "program-entry",
          "frontend",
          "nexusreader-maui",
          "main-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "kind": "file",
      "fileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "shortLabel": "20260513181743_AddEbookReadyFlag.Designer",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "purpose": "EF Core migration designer snapshot that builds the target model for the migration AddEbookReadyFlag; it defines tables, columns, indexes, relationships, Postgres extensions and seed data used to represent the current schema in code.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:jo64ly:knowledgegraph-razor",
      "kind": "file",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "shortLabel": "KnowledgeGraph",
      "longLabel": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "purpose": "Blazor UI component that renders and manages an interactive knowledge graph visualization via JS interop, wiring app-level graph services and user interactions to the client-side graph module.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:kgb933:icommandhandler-cs",
      "kind": "file",
      "fileId": "file:kgb933:icommandhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
      "shortLabel": "ICommandHandler",
      "longLabel": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
      "purpose": "Defines application-level command handler contracts that adapt MediatR IRequestHandler to return FluentResults.Result wrappers for command operations.",
      "domainTags": [
        "command",
        "result-operation-outcome",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "command-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "kind": "file",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "shortLabel": "20260510161155_AddEbookProgressAndChapter.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "purpose": "EF Core migration designer: describes the target EF Core model state for the migration named AddEbookProgressAndChapter (schema, entity mappings, relationships, indices, and seed data).",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:l3weg3:isyncservice-cs",
      "kind": "file",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "shortLabel": "ISyncService",
      "longLabel": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "purpose": "Defines a shared synchronization service contract for reporting and receiving ebook reading progress within UI layers.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "kind": "file",
      "fileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "shortLabel": "20260510171941_AddEbookLastChapterIndex.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "purpose": "EF Core migration designer file that captures the target model snapshot for the AddEbookLastChapterIndex migration; used by EF Core to recreate the model/state for migrations and tooling.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:lcvwj6:ebook-cs",
      "kind": "file",
      "fileId": "file:lcvwj6:ebook-cs",
      "path": "NexusReader.Domain/Entities/Ebook.cs",
      "canonicalName": "NexusReader.Domain/Entities/Ebook.cs",
      "shortLabel": "Ebook",
      "longLabel": "NexusReader.Domain/Entities/Ebook.cs",
      "purpose": "Defines the domain entity representing an uploaded or owned e-book, including metadata, relationships (Author, NexusUser), tenancy and ingestion/readiness status for application use and persistence.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "ebook-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:lqr4h8:ingestebookcommandhandler-cs",
      "kind": "file",
      "fileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "canonicalName": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "shortLabel": "IngestEbookCommandHandler",
      "longLabel": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "purpose": "Handles ingestion of an uploaded ebook: saves files to storage, resolves/creates author, creates Ebook entity and persists it to the repository, returning the new Ebook Id or a failure result.",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:mhxlbr:nexusreader-web-csproj",
      "kind": "file",
      "fileId": "file:mhxlbr:nexusreader-web-csproj",
      "path": "NexusReader.Web/NexusReader.Web.csproj",
      "canonicalName": "NexusReader.Web/NexusReader.Web.csproj",
      "shortLabel": "NexusReader.Web",
      "longLabel": "NexusReader.Web/NexusReader.Web.csproj",
      "purpose": "Project file for the NexusReader.Web ASP.NET Core web project: declares target framework, SDK settings, NuGet package dependencies, and intra-solution project references to compose the Web host and Blazor client.",
      "domainTags": [
        "web",
        "web-client",
        "application",
        "infrastructure"
      ],
      "technologyTags": [
        "multi-project-solution-project-references",
        "package-managed-dependencies-nuget",
        "blazor-server-hosted-pattern"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-web",
          "nexusreader-web-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:mm1vnb:readerlayout-razor",
      "kind": "file",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "canonicalName": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "shortLabel": "ReaderLayout",
      "longLabel": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "purpose": "Razor layout component that renders the reader UI (main content, AI sidebar, footer) and manages runtime concerns: device/platform detection, event subscriptions for UI updates, and JS interop to initialize a layout resizer.",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "file",
      "fileId": "file:mpxmz7:nexusreader-application-csproj",
      "path": "NexusReader.Application/NexusReader.Application.csproj",
      "canonicalName": "NexusReader.Application/NexusReader.Application.csproj",
      "shortLabel": "NexusReader.Application",
      "longLabel": "NexusReader.Application/NexusReader.Application.csproj",
      "purpose": "MSBuild project file for the NexusReader.Application assembly; it declares project dependencies and NuGet package dependencies that define the Application layer's runtime capabilities and boundaries.",
      "domainTags": [
        "application-layer-orchestration",
        "mapping-dto-transformation",
        "persistence-via-ef-core",
        "ai-vector-search-integration"
      ],
      "technologyTags": [
        "mediator-cqrs-mediatr",
        "dto-mapping-mapster",
        "repository-ef-core-persistence",
        "vector-embeddings-search-pgvector-microsoft-extensions-ai",
        "resilience-retry-patterns-microsoft-extensions-resilience"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "nexusreader-application-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "file",
      "fileId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
      "canonicalName": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
      "shortLabel": "NexusReader.Infrastructure",
      "longLabel": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
      "purpose": "MSBuild project file for the NexusReader.Infrastructure project declaring project and package dependencies, target framework, and build/runtime references required by the infrastructure layer.",
      "domainTags": [
        "ai-ml-tokenization",
        "background-jobs-hangfire",
        "relational-and-nosql-persistence-postgres-sqlite-neo4j",
        "resilience-polly"
      ],
      "technologyTags": [
        "projectreference-multi-project-composition",
        "packagereference-infrastructure-dependency-aggregation"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "nexusreader-infrastructure-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:p180ke:mainapplication-cs",
      "kind": "file",
      "fileId": "file:p180ke:mainapplication-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "canonicalName": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "shortLabel": "MainApplication",
      "longLabel": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "purpose": "Android platform entry for the MAUI app; provides the Android Application subclass that creates the MauiApp via MauiProgram and surfaces startup logging and error reporting.",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:p5ean4:error-razor",
      "kind": "file",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "canonicalName": "NexusReader.Web/Components/Pages/Error.razor",
      "shortLabel": "Error",
      "longLabel": "NexusReader.Web/Components/Pages/Error.razor",
      "purpose": "A Blazor Razor page component that renders an error UI and exposes the current request identifier (from Activity or HttpContext) for diagnostic display.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:pvs6tn:iknowledgeservice-cs",
      "kind": "file",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "shortLabel": "IKnowledgeService",
      "longLabel": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "purpose": "Defines the application-level abstraction for knowledge-related operations (semantic search, summarization, QA, groundedness checks, cache management) used by higher-level components.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q33ld0:intelligencetoolbar-razor",
      "kind": "file",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "shortLabel": "IntelligenceToolbar",
      "longLabel": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "purpose": "Blazor UI component that provides an intelligence/AI toolbar with navigation, focus mode toggle, cache clearing and logout actions; wires UI events to injected services and updates UI state on FocusMode changes.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q380me:relevantcontext-cs",
      "kind": "file",
      "fileId": "file:q380me:relevantcontext-cs",
      "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
      "canonicalName": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
      "shortLabel": "RelevantContext",
      "longLabel": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
      "purpose": "Defines a small data transfer object that carries a piece of text along with its source identifier and a confidence score for AI/processing scenarios.",
      "domainTags": [
        "relevantcontext",
        "ai-context",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "data-transfer-object-dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q4k94a:epubreaderservice-cs",
      "kind": "file",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "canonicalName": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "shortLabel": "EpubReaderService",
      "longLabel": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "purpose": "Service that locates an EPUB file for an ebook in the DB, reads and parses a chapter into content blocks (text segments and AI-trigger blocks) for the reader UI.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q6hq0x:20260429080302-addquizresults-cs",
      "kind": "file",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "shortLabel": "20260429080302_AddQuizResults",
      "longLabel": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "purpose": "EF Core migration that adds a new QuizResults table (with columns, PK, FK to AspNetUsers, and an index) and provides rollback to drop it.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q6pxzf:knowledgegraphservice-cs",
      "kind": "file",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "shortLabel": "KnowledgeGraphService",
      "longLabel": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "purpose": "In-memory UI/shared service that holds the current knowledge graph state (GraphDataDto), active node id, loading flag, and publishes change notifications via events for UI consumers.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:q8opk3:nexusicon-razor",
      "kind": "file",
      "fileId": "file:q8opk3:nexusicon-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "shortLabel": "NexusIcon",
      "longLabel": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "purpose": "Razor UI component that renders an SVG icon by name; maps a string Name to concrete SVG paths and exposes common component parameters (Size, Class, AdditionalAttributes).",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusicon-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "file",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "shortLabel": "SearchLibrarySemanticallyQuery",
      "longLabel": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "purpose": "Provides a MediatR query and handler that performs a semantic search over a tenant-scoped semantic knowledge cache: it generates an embedding for the input query (with retry), runs a vector similarity DB query, maps results to DTOs, and returns them.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qieb5i:dependencyinjection-cs",
      "kind": "file",
      "fileId": "file:qieb5i:dependencyinjection-cs",
      "path": "NexusReader.Application/DependencyInjection.cs",
      "canonicalName": "NexusReader.Application/DependencyInjection.cs",
      "shortLabel": "DependencyInjection",
      "longLabel": "NexusReader.Application/DependencyInjection.cs",
      "purpose": "Provides Application-layer dependency registrations (mappings, MediatR) and exposes the assembly for registration discovery.",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "kind": "file",
      "fileId": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "path": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj",
      "canonicalName": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj",
      "shortLabel": "NexusReader.Infrastructure.Mobile",
      "longLabel": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj",
      "purpose": "MSBuild project file for the NexusReader.Infrastructure.Mobile MAUI mobile app; declares target frameworks, MAUI usage, a project reference to the Application project, and a NuGet dependency on Microsoft.Maui.Essentials.",
      "domainTags": [
        "mobile",
        "maui",
        "cross-platform-ui",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "maui-project",
        "projectreference-composition",
        "targetframework-conditional-multi-targeting"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "nexusreader-infrastructure-mobile-csproj"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "kind": "file",
      "fileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "shortLabel": "20260428185239_IncreaseHashLength.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "purpose": "EF Core migration designer for the IncreaseHashLength migration; describes the target EF Core model (entities, properties, indexes, relationships) used by migrations and tooling.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qqutlm:planconstants-cs",
      "kind": "file",
      "fileId": "file:qqutlm:planconstants-cs",
      "path": "NexusReader.Application/Constants/PlanConstants.cs",
      "canonicalName": "NexusReader.Application/Constants/PlanConstants.cs",
      "shortLabel": "PlanConstants",
      "longLabel": "NexusReader.Application/Constants/PlanConstants.cs",
      "purpose": "Holds application-wide default constants for plan behavior (default plan name, token limit, and activity label).",
      "domainTags": [
        "plan",
        "tokenlimit",
        "activitylabel",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "application",
        "boundaryHints": [
          "unknown",
          "application",
          "nexusreader-application",
          "constants",
          "planconstants-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qt46oq:webplatformservice-cs",
      "kind": "file",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "canonicalName": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "shortLabel": "WebPlatformService",
      "longLabel": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "purpose": "Concrete Web platform implementation of IPlatformService for the Blazor Web client: exposes device context and a vibration API via JS interop, returning FluentResults for error propagation.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:qvoxmq:app-razor",
      "kind": "file",
      "fileId": "file:qvoxmq:app-razor",
      "path": "NexusReader.Web/Components/App.razor",
      "canonicalName": "NexusReader.Web/Components/App.razor",
      "shortLabel": "App",
      "longLabel": "NexusReader.Web/Components/App.razor",
      "purpose": "Razor root HTML shell for the Blazor web app: provides the HTML skeleton, loads shared CSS/scripts, renders top-level Blazor components (HeadOutlet, app routes, reconnect modal) and bootstraps client startup behavior including a preloader hide/fallback script.",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "app-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:r7svsj:dependencyinjection-cs",
      "kind": "file",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "canonicalName": "NexusReader.Infrastructure/DependencyInjection.cs",
      "shortLabel": "DependencyInjection",
      "longLabel": "NexusReader.Infrastructure/DependencyInjection.cs",
      "purpose": "Registers and configures infrastructure services (persistence, external clients, AI/embedding, background jobs, authorization, and scoped application services) into the DI container for the NexusReader application.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:rfn6bc:ibillingservice-cs",
      "kind": "file",
      "fileId": "file:rfn6bc:ibillingservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "shortLabel": "IBillingService",
      "longLabel": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "purpose": "Defines an application-layer billing service abstraction that declares handlers for subscription updates and deletions (used by infrastructure implementations to react to Stripe/customer events).",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibillingservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:savadk:iquizstateservice-cs",
      "kind": "file",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "shortLabel": "IQuizStateService",
      "longLabel": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "purpose": "Defines the UI-shared contract for a quiz state service used by frontend components to read quiz state, request quizzes, and signal updates.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "kind": "file",
      "fileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "shortLabel": "20260513183726_FixKnowledgeUnitEbookId.Designer",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "purpose": "EF Core migration designer file that describes the target EF model for the migration 'FixKnowledgeUnitEbookId'; it encodes entity mappings, indices, relationships, extension usage and seed data used by the migration snapshot.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "kind": "file",
      "fileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "canonicalName": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "shortLabel": "20260513185108_MakeKnowledgeUnitEbookIdNullable",
      "longLabel": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "purpose": "EF Core migration that makes the KnowledgeUnits.EbookId column nullable in the database schema and provides a reversible Down migration.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:ua9rra:mainpage-xaml-cs",
      "kind": "file",
      "fileId": "file:ua9rra:mainpage-xaml-cs",
      "path": "NexusReader.Maui/MainPage.xaml.cs",
      "canonicalName": "NexusReader.Maui/MainPage.xaml.cs",
      "shortLabel": "MainPage.xaml",
      "longLabel": "NexusReader.Maui/MainPage.xaml.cs",
      "purpose": "Defines a MAUI UI page class (MainPage) that initializes its XAML-backed view. Minimal code-behind that calls the generated InitializeComponent to build the UI.",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-maui",
          "mainpage-xaml-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:uhcd4x:quizviewmodels-cs",
      "kind": "file",
      "fileId": "file:uhcd4x:quizviewmodels-cs",
      "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
      "canonicalName": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
      "shortLabel": "QuizViewModels",
      "longLabel": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
      "purpose": "Defines simple immutable view-model DTOs for quiz query responses (questions and quiz payload).",
      "domainTags": [
        "quiz",
        "quizquestion",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "quiz"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "file",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "shortLabel": "KnowledgeCoordinator",
      "longLabel": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "purpose": "Coordinates knowledge-graph and quiz generation in the UI layer: subscribes to UI interactions, orchestrates calls to knowledge/graph/quiz/platform services, updates graph state, and exposes an event when graph data is available.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:uzi8zg:reconnectmodal-razor",
      "kind": "file",
      "fileId": "file:uzi8zg:reconnectmodal-razor",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor",
      "canonicalName": "NexusReader.UI.Shared/Layout/ReconnectModal.razor",
      "shortLabel": "ReconnectModal",
      "longLabel": "NexusReader.UI.Shared/Layout/ReconnectModal.razor",
      "purpose": "Razor UI component that renders a reconnect modal dialog for the client, exposing DOM elements and IDs used by a companion JavaScript module to manage reconnect/resume UI states.",
      "domainTags": [
        "connectivity",
        "session-resume",
        "retry",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "dialog",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:vbuljf:ithemeservice-cs",
      "kind": "file",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "shortLabel": "IThemeService",
      "longLabel": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "purpose": "Defines an abstraction for a UI theme service that exposes current theme mode, an event for theme changes, and a toggle operation for switching themes.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:vdwqp9:iepubmetadataextractor-cs",
      "kind": "file",
      "fileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
      "shortLabel": "IEpubMetadataExtractor",
      "longLabel": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
      "purpose": "Defines an application-layer abstraction for extracting metadata from an EPUB stream, returning a Result-wrapped LocalEpubMetadata asynchronously.",
      "domainTags": [
        "epub",
        "metadata",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-inversion"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubmetadataextractor-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:veuxa3:ebookrepository-cs",
      "kind": "file",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "canonicalName": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "shortLabel": "EbookRepository",
      "longLabel": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "purpose": "EF Core implementation of the IEbookRepository providing data access for Ebook and Author entities; contains search, add and save operations with provider-specific behavior for case-insensitive author lookup.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:vjfxh7:getuserprofilequery-cs",
      "kind": "file",
      "fileId": "file:vjfxh7:getuserprofilequery-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
      "shortLabel": "GetUserProfileQuery",
      "longLabel": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
      "purpose": "Defines a MediatR query message used to request a user's profile (UserProfileDto) by user id.",
      "domainTags": [
        "user",
        "userprofile",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-request-message"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:vxd4dk:launchsettings-json",
      "kind": "file",
      "fileId": "file:vxd4dk:launchsettings-json",
      "path": "NexusReader.Web/Properties/launchSettings.json",
      "canonicalName": "NexusReader.Web/Properties/launchSettings.json",
      "shortLabel": "launchSettings",
      "longLabel": "NexusReader.Web/Properties/launchSettings.json",
      "purpose": "Project launch configuration for the NexusReader.Web ASP.NET Core application; defines run profiles, URLs, and environment variables used when launching the web project (e.g., via dotnet run or IDE).",
      "domainTags": [
        "nexusreader",
        "properties",
        "launchsettings"
      ],
      "technologyTags": [
        "launch-settings"
      ],
      "boundary": {
        "role": "startup",
        "layer": "application",
        "boundaryHints": [
          "startup",
          "application",
          "nexusreader-web",
          "properties",
          "launchsettings-json"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:w6cklc:mappingconfig-cs",
      "kind": "file",
      "fileId": "file:w6cklc:mappingconfig-cs",
      "path": "NexusReader.Application/Mappings/MappingConfig.cs",
      "canonicalName": "NexusReader.Application/Mappings/MappingConfig.cs",
      "shortLabel": "MappingConfig",
      "longLabel": "NexusReader.Application/Mappings/MappingConfig.cs",
      "purpose": "Defines an IServiceCollection extension to configure Mapster mappings and register mapping services (TypeAdapterConfig and IMapper) into the application's DI container.",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "mappings",
          "mappingconfig-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:wb18l0:iplatformservice-cs",
      "kind": "file",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "canonicalName": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "shortLabel": "IPlatformService",
      "longLabel": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "purpose": "Defines a platform abstraction for device capabilities (vibration) and device metadata (device context) used by application code to remain platform-agnostic.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:wgkae9:ireadernavigationservice-cs",
      "kind": "file",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "shortLabel": "IReaderNavigationService",
      "longLabel": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "purpose": "Defines the shared UI navigation contract for an ebook reader (state, navigation commands, metadata updates and an event to notify consumers).",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:wxheam:appjsoncontext-cs",
      "kind": "file",
      "fileId": "file:wxheam:appjsoncontext-cs",
      "path": "NexusReader.Application/Common/AppJsonContext.cs",
      "canonicalName": "NexusReader.Application/Common/AppJsonContext.cs",
      "shortLabel": "AppJsonContext",
      "longLabel": "NexusReader.Application/Common/AppJsonContext.cs",
      "purpose": "Defines a System.Text.Json source-generated JsonSerializerContext for Graph DTO types used by the application, enabling ahead-of-time serialization metadata and configuration (WriteIndented = true).",
      "domainTags": [
        "graph",
        "graphnode",
        "graphlink",
        "graphdata"
      ],
      "technologyTags": [
        "dotnet",
        "source-generator",
        "serialization-context"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "appjsoncontext-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:xcxh5w:nexususer-cs",
      "kind": "file",
      "fileId": "file:xcxh5w:nexususer-cs",
      "path": "NexusReader.Domain/Entities/NexusUser.cs",
      "canonicalName": "NexusReader.Domain/Entities/NexusUser.cs",
      "shortLabel": "NexusUser",
      "longLabel": "NexusReader.Domain/Entities/NexusUser.cs",
      "purpose": "Domain entity representing an application user, extending ASP.NET IdentityUser with multi-tenant, subscription and usage tracking plus navigation collections for related domain data.",
      "domainTags": [
        "user",
        "tenant",
        "subscriptionplan",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "nexususer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:xocicc:updatereadingprogresscommand-cs",
      "kind": "file",
      "fileId": "file:xocicc:updatereadingprogresscommand-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
      "canonicalName": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
      "shortLabel": "UpdateReadingProgressCommand",
      "longLabel": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
      "purpose": "Defines a MediatR command record that carries data for updating a user's reading progress for an ebook (used in sync operations).",
      "domainTags": [
        "readingprogress",
        "ebook",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:xs3ks1:ifocusmodeservice-cs",
      "kind": "file",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "canonicalName": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "shortLabel": "IFocusModeService",
      "longLabel": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "purpose": "Defines the IFocusModeService interface for UI focus mode control (querying state, initialization, toggling, and change notifications).",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:xxwh7p:asklibraryquestionquery-cs",
      "kind": "file",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "canonicalName": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "shortLabel": "AskLibraryQuestionQuery",
      "longLabel": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "purpose": "Defines a MediatR query (AskLibraryQuestionQuery) and its handler which validates input and delegates question answering to an IKnowledgeService, returning a GroundedResponseDto result.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:y077jr:getreaderpagequeryhandler-cs",
      "kind": "file",
      "fileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "canonicalName": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "shortLabel": "GetReaderPageQueryHandler",
      "longLabel": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "purpose": "Query handler that responds to GetReaderPageQuery by delegating to an IEpubReader to fetch a ReaderPageViewModel for a given ebook/chapter and user.",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "kind": "file",
      "fileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "canonicalName": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "shortLabel": "20260428184727_InitialPostgres.Designer",
      "longLabel": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "purpose": "EF Core auto-generated migration designer for the InitialPostgres migration; describes the target model (tables, columns, keys, indexes, relationships, and provider annotations) for applying the schema to a Postgres database.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-designer-cs"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "file:yno7se:knowledgecheck-razor",
      "kind": "file",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "canonicalName": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "shortLabel": "KnowledgeCheck",
      "longLabel": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "purpose": "Blazor UI component that renders a knowledge-check quiz, manages local answer state, reacts to quiz service updates, and submits answers via MediatR with haptic feedback via a platform service.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": [
        "file"
      ]
    },
    {
      "id": "method:101vezb:findauthorbynameasync",
      "kind": "method",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 22,
      "canonicalName": "FindAuthorByNameAsync",
      "shortLabel": "FindAuthorByNameAsync()",
      "longLabel": "FindAuthorByNameAsync(name: string, cancellationToken: CancellationToken = default) -> Task<Author?>",
      "signature": "(name: string, cancellationToken: CancellationToken = default) -> Task<Author?>",
      "purpose": "Finds an Author by name using a case-insensitive search; uses PostgreSQL ILike when running on Npgsql, otherwise falls back to ToLower string comparison.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1025f5z:getsummaryandquizasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 71,
      "canonicalName": "GetSummaryAndQuizAsync",
      "shortLabel": "GetSummaryAndQuizAsync()",
      "longLabel": "GetSummaryAndQuizAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Public entry for summary + quiz extraction",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:105vz8s:scrolltonodeasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 252,
      "canonicalName": "ScrollToNodeAsync",
      "shortLabel": "ScrollToNodeAsync()",
      "longLabel": "ScrollToNodeAsync(id: string) -> Task",
      "signature": "(id: string) -> Task",
      "purpose": "Uses JS interop to scroll a DOM element into view by id with smooth behavior and logs warnings on failure.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1070aok:getsecurestring",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 14,
      "canonicalName": "GetSecureString",
      "shortLabel": "GetSecureString()",
      "longLabel": "GetSecureString(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Retrieve a secure string by key from platform secure storage asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1094u9:initializeasync",
      "kind": "method",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "line": 16,
      "canonicalName": "InitializeAsync",
      "shortLabel": "InitializeAsync()",
      "longLabel": "InitializeAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Reads persisted focus-mode flag from localStorage and activates focus mode if stored as true, notifying subscribers; ignores JS errors (e.g., during pre-render).",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10aseyf:componentrender",
      "kind": "method",
      "fileId": "file:184ajmn:nexustypography-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "line": 1,
      "canonicalName": "ComponentRender",
      "shortLabel": "ComponentRender()",
      "longLabel": "ComponentRender() -> void (renders markup)",
      "signature": "() -> void (renders markup)",
      "purpose": "Renders a div with computed CSS classes, applies captured additional attributes, and injects ChildContent.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexustypography-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10bpn0:getepubcontentasync",
      "kind": "method",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "line": 17,
      "canonicalName": "GetEpubContentAsync",
      "shortLabel": "GetEpubContentAsync()",
      "longLabel": "GetEpubContentAsync(Guid ebookId, int chapterIndex, string? userId = null, CancellationToken cancellationToken = default) -> Task<Result<ReaderPageViewModel>>",
      "signature": "(Guid ebookId, int chapterIndex, string? userId = null, CancellationToken cancellationToken = default) -> Task<Result<ReaderPageViewModel>>",
      "purpose": "Fetches a chapter's reader page from the server API and returns a Result-wrapped ReaderPageViewModel, handling deserialization and errors.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:10jkor8:verifygroundednesscommandhandler",
      "kind": "method",
      "fileId": "file:2eckht:verifygroundednesscommand-cs",
      "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "line": 13,
      "canonicalName": "VerifyGroundednessCommandHandler",
      "shortLabel": "VerifyGroundednessCommandHandler()",
      "longLabel": "VerifyGroundednessCommandHandler(knowledgeService: IKnowledgeService) -> VerifyGroundednessCommandHandler",
      "signature": "(knowledgeService: IKnowledgeService) -> VerifyGroundednessCommandHandler",
      "purpose": "Constructor that receives and stores the IKnowledgeService dependency via DI.",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10p42fw:initializeasync",
      "kind": "method",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "line": 7,
      "canonicalName": "InitializeAsync",
      "shortLabel": "InitializeAsync()",
      "longLabel": "InitializeAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Initializes the sync service (e.g., prepare connections or state) and returns success/failure as a FluentResults.Result.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10perg:savesecurestring",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 76,
      "canonicalName": "SaveSecureString",
      "shortLabel": "SaveSecureString()",
      "longLabel": "SaveSecureString(string key, string value) -> Task<Result>",
      "signature": "(string key, string value) -> Task<Result>",
      "purpose": "Alias for SaveStringAsync; intended for secure-string semantics at the API level.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10q1pr:isloading",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 9,
      "canonicalName": "IsLoading",
      "shortLabel": "IsLoading()",
      "longLabel": "IsLoading() -> bool",
      "signature": "() -> bool",
      "purpose": "Read-only flag indicating whether the graph is currently loading.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10r1sy2:clearcacheasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 785,
      "canonicalName": "ClearCacheAsync",
      "shortLabel": "ClearCacheAsync()",
      "longLabel": "ClearCacheAsync(cancellationToken: CancellationToken = default) -> Task<Result>",
      "signature": "(cancellationToken: CancellationToken = default) -> Task<Result>",
      "purpose": "Deletes all entries from SemanticKnowledgeCache, KnowledgeUnits and KnowledgeUnitLinks tables",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:10r2ds4:down",
      "kind": "method",
      "fileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "line": 22,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Reverts the migration: drops the LastChapterIndex column from the Ebooks table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:10uf4tt:savetolibrary",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 198,
      "canonicalName": "SaveToLibrary",
      "shortLabel": "SaveToLibrary()",
      "longLabel": "SaveToLibrary() -> Task",
      "signature": "() -> Task",
      "purpose": "Sends the ingested ebook (metadata + base64 content) to the server API and on success closes the modal and navigates to the new book.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:10zr37d:wasmepubreader",
      "kind": "method",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "line": 12,
      "canonicalName": "WasmEpubReader",
      "shortLabel": "WasmEpubReader()",
      "longLabel": "WasmEpubReader(HttpClient httpClient) -> WasmEpubReader",
      "signature": "(HttpClient httpClient) -> WasmEpubReader",
      "purpose": "Constructor that stores the injected HttpClient for later HTTP calls.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:115yp5z:broadcastprogressasync",
      "kind": "method",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "line": 21,
      "canonicalName": "BroadcastProgressAsync",
      "shortLabel": "BroadcastProgressAsync()",
      "longLabel": "BroadcastProgressAsync(string userId, string pageId, DateTime timestamp, string? excludedConnectionId, CancellationToken cancellationToken = default) -> Task",
      "signature": "(string userId, string pageId, DateTime timestamp, string? excludedConnectionId, CancellationToken cancellationToken = default) -> Task",
      "purpose": "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).",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:11mh753:handle",
      "kind": "method",
      "fileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "line": 8,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: GetInitializationStatusQuery, cancellationToken: CancellationToken) -> Task<Result<string>>",
      "signature": "(request: GetInitializationStatusQuery, cancellationToken: CancellationToken) -> Task<Result<string>>",
      "purpose": "Handles the GetInitializationStatusQuery by returning a successful Result<string> containing a static initialization message.",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:11o3hgs:oninitialized",
      "kind": "method",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "line": 73,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Component initialization: subscribes to FocusMode and Quiz update events and determines device type to set platform CSS class.",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:11t39ko:broadcastprogressasync",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 94,
      "canonicalName": "BroadcastProgressAsync",
      "shortLabel": "BroadcastProgressAsync()",
      "longLabel": "BroadcastProgressAsync(userId: string, pageId: string, timestamp: DateTime, excludedConnectionId: string?, cancellationToken: CancellationToken) -> Task",
      "signature": "(userId: string, pageId: string, timestamp: DateTime, excludedConnectionId: string?, cancellationToken: CancellationToken) -> Task",
      "purpose": "Real-time broadcast stub that throws because server-only real-time broadcasting is unsupported in WASM.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:121clyd:getepubcontentasync",
      "kind": "method",
      "fileId": "file:1mo9e25:iepubreader-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "line": 18,
      "canonicalName": "GetEpubContentAsync",
      "shortLabel": "GetEpubContentAsync()",
      "longLabel": "GetEpubContentAsync(ebookId: Guid, chapterIndex: int, userId: string? = null, cancellationToken: CancellationToken = default) -> Task<Result<ReaderPageViewModel>>",
      "signature": "(ebookId: Guid, chapterIndex: int, userId: string? = null, cancellationToken: CancellationToken = default) -> Task<Result<ReaderPageViewModel>>",
      "purpose": "Asynchronously retrieves parsed EPUB content blocks (a ReaderPageViewModel) for the specified ebook and zero-based chapter index, optionally scoped to a user and cancellable.",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubreader-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1281z7w:mainapplication",
      "kind": "method",
      "fileId": "file:p180ke:mainapplication-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "line": 14,
      "canonicalName": "MainApplication",
      "shortLabel": "MainApplication()",
      "longLabel": "MainApplication(IntPtr handle, JniHandleOwnership ownership) -> MainApplication (ctor)",
      "signature": "(IntPtr handle, JniHandleOwnership ownership) -> MainApplication (ctor)",
      "purpose": "Android Application constructor that calls base and logs construction.",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:129w46l:zoomreset",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 98,
      "canonicalName": "ZoomReset",
      "shortLabel": "ZoomReset()",
      "longLabel": "ZoomReset() -> Task",
      "signature": "() -> Task",
      "purpose": "Request the JS graph module to reset zoom/transform.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:12jssth:findtitleinnavigation",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 186,
      "canonicalName": "FindTitleInNavigation",
      "shortLabel": "FindTitleInNavigation()",
      "longLabel": "FindTitleInNavigation(navigation: IEnumerable<EpubNavigationItemRef>, filePath: string?) -> string?",
      "signature": "(navigation: IEnumerable<EpubNavigationItemRef>, filePath: string?) -> string?",
      "purpose": "Recursively searches EPUB navigation items for a title that matches a given file path or file name.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:12nj2l:registerasync",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 9,
      "canonicalName": "RegisterAsync",
      "shortLabel": "RegisterAsync()",
      "longLabel": "RegisterAsync(string email, string password) -> Task<Result>",
      "signature": "(string email, string password) -> Task<Result>",
      "purpose": "Registers a new user account using email and password and returns a success/failure Result.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:12nkjhc:handleupgrade",
      "kind": "method",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "line": 128,
      "canonicalName": "HandleUpgrade",
      "shortLabel": "HandleUpgrade()",
      "longLabel": "HandleUpgrade() -> void",
      "signature": "() -> void",
      "purpose": "Placeholder click handler intended to redirect user to billing/upgrade flow (not yet implemented).",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:12nt8as:resume",
      "kind": "method",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "line": 48,
      "canonicalName": "resume",
      "shortLabel": "resume()",
      "longLabel": "resume() -> Promise<void>",
      "signature": "() -> Promise<void>",
      "purpose": "Attempts to resume an existing circuit via Blazor.resumeCircuit; reloads on failure or toggles UI class on exception.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:12odud7:gotopreviouschapter",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 14,
      "canonicalName": "GoToPreviousChapter",
      "shortLabel": "GoToPreviousChapter()",
      "longLabel": "GoToPreviousChapter() -> Task",
      "signature": "() -> Task",
      "purpose": "Move navigation to the previous chapter and notify subscribers.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:13af2s9:getprofileasync",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 108,
      "canonicalName": "GetProfileAsync",
      "shortLabel": "GetProfileAsync()",
      "longLabel": "GetProfileAsync() -> Task<Result<UserProfileDto>>",
      "signature": "() -> Task<Result<UserProfileDto>>",
      "purpose": "Reads the current authenticated user's ID from HttpContext and fetches their profile via a mediator query; returns profile or failure.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:13emvrm:oninitialized",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 56,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Lifecycle initialization: subscribes to the QuizService update event to refresh UI when quiz state changes.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:13h9yo2:buildtargetmodel",
      "kind": "method",
      "fileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Builds the EF Core model snapshot used by this migration: applies annotations, extensions, entity/table/property/index/relationship mappings and data seeding.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:13pj2z1:markquizasseen",
      "kind": "method",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "line": 36,
      "canonicalName": "MarkQuizAsSeen",
      "shortLabel": "MarkQuizAsSeen()",
      "longLabel": "MarkQuizAsSeen() -> Task",
      "signature": "() -> Task",
      "purpose": "If there is a new quiz flag, clears it and notifies subscribers.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:13rxvog:ebookrepository",
      "kind": "method",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 16,
      "canonicalName": "EbookRepository",
      "shortLabel": "EbookRepository()",
      "longLabel": "EbookRepository(context: AppDbContext) -> EbookRepository",
      "signature": "(context: AppDbContext) -> EbookRepository",
      "purpose": "Constructs the repository and stores the provided AppDbContext for later use.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:13vwa6r:handlerequirementasync",
      "kind": "method",
      "fileId": "file:38gozs:tokenlimithandler-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "line": 24,
      "canonicalName": "HandleRequirementAsync",
      "shortLabel": "HandleRequirementAsync()",
      "longLabel": "HandleRequirementAsync(context: AuthorizationHandlerContext, requirement: TokenLimitRequirement) -> Task",
      "signature": "(context: AuthorizationHandlerContext, requirement: TokenLimitRequirement) -> Task",
      "purpose": "Authorization handler entrypoint: load current user (including subscription) and succeed the requirement if the user has remaining AI tokens or an unlimited plan.",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "infrastructure",
        "boundaryHints": [
          "middleware",
          "infrastructure",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimithandler-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:13xh0j3:handlesubscriptionsuccess",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 410,
      "canonicalName": "HandleSubscriptionSuccess",
      "shortLabel": "HandleSubscriptionSuccess()",
      "longLabel": "HandleSubscriptionSuccess(email: string?, metadata: Dictionary<string,string>?, userManager: UserManager<NexusUser>, dbContext: AppDbContext) -> Task",
      "signature": "(email: string?, metadata: Dictionary<string,string>?, userManager: UserManager<NexusUser>, dbContext: AppDbContext) -> Task",
      "purpose": "Update a user's subscription plan and AI token limit after successful Stripe checkout/subscription update.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:13yeu7e:getauthenticationstateasync",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 31,
      "canonicalName": "GetAuthenticationStateAsync",
      "shortLabel": "GetAuthenticationStateAsync()",
      "longLabel": "GetAuthenticationStateAsync() -> Task<AuthenticationState>",
      "signature": "() -> Task<AuthenticationState>",
      "purpose": "Asynchronously obtains the current AuthenticationState by reading persisted token/email/tenant/roles from secure storage, with caching, multi-path branching (token, cookie, fallback), and exception-safe anonymous fallback.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:145q8gt:buildtargetmodel",
      "kind": "method",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model: registers Postgres vector extension, identity and domain entities, their properties, relationships, indices and seed data for SubscriptionPlans.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:14hjndb:addmapsterconfiguration",
      "kind": "method",
      "fileId": "file:w6cklc:mappingconfig-cs",
      "path": "NexusReader.Application/Mappings/MappingConfig.cs",
      "line": 11,
      "canonicalName": "AddMapsterConfiguration",
      "shortLabel": "AddMapsterConfiguration()",
      "longLabel": "AddMapsterConfiguration(this IServiceCollection services) -> IServiceCollection",
      "signature": "(this IServiceCollection services) -> IServiceCollection",
      "purpose": "Creates Mapster TypeAdapterConfig mappings and registers the config and IMapper in the DI container, returning the IServiceCollection for chaining.",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "mappings",
          "mappingconfig-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:14hlcms:handlegraphupdate",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 49,
      "canonicalName": "HandleGraphUpdate",
      "shortLabel": "HandleGraphUpdate()",
      "longLabel": "HandleGraphUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Respond to graph data changes by instructing the JS graph module to clear or update and force a UI re-render.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:14jdxkg:handlerequirementasync",
      "kind": "method",
      "fileId": "file:1hyu1ez:prouserhandler-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "line": 20,
      "canonicalName": "HandleRequirementAsync",
      "shortLabel": "HandleRequirementAsync()",
      "longLabel": "HandleRequirementAsync(context: AuthorizationHandlerContext, requirement: ProUserRequirement) -> Task",
      "signature": "(context: AuthorizationHandlerContext, requirement: ProUserRequirement) -> Task",
      "purpose": "Core authorization logic: loads the current user from the DB and grants the requirement when the user has unlimited tokens or remaining AI token quota.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:14llm2d:disposeasync",
      "kind": "method",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 103,
      "canonicalName": "DisposeAsync",
      "shortLabel": "DisposeAsync()",
      "longLabel": "DisposeAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Cancels pending debounce, disposes the hub connection if present.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:150wzsg:dispose",
      "kind": "method",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "line": 50,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void (IDisposable)",
      "signature": "() -> void (IDisposable)",
      "purpose": "Lifecycle cleanup: unsubscribes event handlers to avoid memory leaks.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:15b21oe:onhighlightblockrequested",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 7,
      "canonicalName": "OnHighlightBlockRequested",
      "shortLabel": "OnHighlightBlockRequested()",
      "longLabel": "OnHighlightBlockRequestedevent Func<string, Task>? -> void (event declaration)",
      "signature": "event Func<string, Task>? -> void (event declaration)",
      "purpose": "Event fired to request highlighting of a specific blockId.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:15b2jq7:nexusauthenticationstateprovider",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 18,
      "canonicalName": "NexusAuthenticationStateProvider",
      "shortLabel": "NexusAuthenticationStateProvider()",
      "longLabel": "NexusAuthenticationStateProvider(storageService: INativeStorageService) -> NexusAuthenticationStateProvider",
      "signature": "(storageService: INativeStorageService) -> NexusAuthenticationStateProvider",
      "purpose": "Constructor that captures the native secure storage service dependency.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:15ixuxd:module-init",
      "kind": "method",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "line": 1,
      "canonicalName": "<module_init>",
      "shortLabel": "<module_init>()",
      "longLabel": "<module_init>() -> void",
      "signature": "() -> void",
      "purpose": "Top-level initialization: obtains DOM elements and registers event listeners for reconnect state and button clicks.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:15ros9m:notifytextselected",
      "kind": "method",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "line": 25,
      "canonicalName": "NotifyTextSelected",
      "shortLabel": "NotifyTextSelected()",
      "longLabel": "NotifyTextSelected(string text, string blockId, SelectionCoordinates coords) -> Task",
      "signature": "(string text, string blockId, SelectionCoordinates coords) -> Task",
      "purpose": "Raises the OnTextSelected event with the selected text, block id and selection coordinates when subscribers exist.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:160zwvx:ctor-implicit",
      "kind": "method",
      "fileId": "file:1wyr0y8:quizresult-cs",
      "path": "NexusReader.Domain/Entities/QuizResult.cs",
      "line": 9,
      "canonicalName": ".ctor (implicit)",
      "shortLabel": ".ctor (implicit)",
      "longLabel": ".ctor (implicit)() -> QuizResult",
      "signature": "() -> QuizResult",
      "purpose": "Implicit object initializer that sets default values for several properties when a QuizResult is created.",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "quizresult-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:161c21f:savecoverasync-byte",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 74,
      "canonicalName": "SaveCoverAsync (byte[])",
      "shortLabel": "SaveCoverAsync (byte[])",
      "longLabel": "SaveCoverAsync (byte[])(data: byte[], fileName: string) -> Task<string?>",
      "signature": "(data: byte[], fileName: string) -> Task<string?>",
      "purpose": "Stub cover save that throws because file storage is unsupported in WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:163m6av:disposeasync",
      "kind": "method",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "line": 10,
      "canonicalName": "DisposeAsync",
      "shortLabel": "DisposeAsync()",
      "longLabel": "DisposeAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Asynchronously disposes or tears down the sync service resources.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16ct380:createstate",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 84,
      "canonicalName": "CreateState",
      "shortLabel": "CreateState()",
      "longLabel": "CreateState(email: string, tenantId: string, authType: string, rolesStr: string = \"\") -> AuthenticationState",
      "signature": "(email: string, tenantId: string, authType: string, rolesStr: string = \"\") -> AuthenticationState",
      "purpose": "Builds an AuthenticationState from provided email, tenantId, authType and a comma-separated roles string.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16cvbhq:onparameterssetasync",
      "kind": "method",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "line": 56,
      "canonicalName": "OnParametersSetAsync",
      "shortLabel": "OnParametersSetAsync()",
      "longLabel": "OnParametersSetAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Lifecycle hook: when parameters change, triggers fetching/streaming of AI content if component is interactive and the block id changed.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16euo54:buildtargetmodel",
      "kind": "method",
      "fileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model snapshot for this migration: annotations, DB extensions, entities, properties, indices, relationships and seed data.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16gxcfa:handle",
      "kind": "method",
      "fileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "line": 18,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: GetUserProfileQuery, cancellationToken: CancellationToken) -> Task<Result<UserProfileDto>>",
      "signature": "(request: GetUserProfileQuery, cancellationToken: CancellationToken) -> Task<Result<UserProfileDto>>",
      "purpose": "Loads a single user's profile from the database, maps nested DTOs (plan, last read book, roles, quiz score) and returns Result.Ok(profile) or Result.Fail when not found.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:16i3kbl:buildtargetmodel",
      "kind": "method",
      "fileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model snapshot for this migration: configures Postgres extensions, identity defaults, all entity types, properties, indexes, foreign keys, navigations and seed data.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16kjevr:handleactivenodechange",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 65,
      "canonicalName": "HandleActiveNodeChange",
      "shortLabel": "HandleActiveNodeChange()",
      "longLabel": "HandleActiveNodeChange(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Tell the JS graph module to highlight/set the active node when the active node changes in the graph service.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16m1d8f:savestringasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 16,
      "canonicalName": "SaveStringAsync",
      "shortLabel": "SaveStringAsync()",
      "longLabel": "SaveStringAsync(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Saves a string value into browser localStorage under the given key and returns a Result indicating success or failure.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:16n7wyr:handlesubscriptiondeletedasync",
      "kind": "method",
      "fileId": "file:rfn6bc:ibillingservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "line": 9,
      "canonicalName": "HandleSubscriptionDeletedAsync",
      "shortLabel": "HandleSubscriptionDeletedAsync()",
      "longLabel": "HandleSubscriptionDeletedAsync(customerEmail: string) -> Task<Result>",
      "signature": "(customerEmail: string) -> Task<Result>",
      "purpose": "Contract for handling when a customer's subscription is deleted (cleanup or downgrade actions).",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibillingservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:16xot65:handletextselected",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 169,
      "canonicalName": "HandleTextSelected",
      "shortLabel": "HandleTextSelected()",
      "longLabel": "HandleTextSelected(text: string, blockId: string, coords: SelectionCoordinates) -> Task",
      "signature": "(text: string, blockId: string, coords: SelectionCoordinates) -> Task",
      "purpose": "JS-invokable handler that records selected text, block id and coordinates and triggers UI update.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:171cr2c:syncservice",
      "kind": "method",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 20,
      "canonicalName": "SyncService",
      "shortLabel": "SyncService()",
      "longLabel": "SyncService(httpClient: HttpClient, storageService: INativeStorageService, platformService: IPlatformService, logger: ILogger<SyncService>) -> SyncService",
      "signature": "(httpClient: HttpClient, storageService: INativeStorageService, platformService: IPlatformService, logger: ILogger<SyncService>) -> SyncService",
      "purpose": "Constructs the SyncService and stores injected dependencies.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:174nry:handlesubscriptiondeletedasync",
      "kind": "method",
      "fileId": "file:13phiik:billingservice-cs",
      "path": "NexusReader.Infrastructure/Services/BillingService.cs",
      "line": 86,
      "canonicalName": "HandleSubscriptionDeletedAsync",
      "shortLabel": "HandleSubscriptionDeletedAsync()",
      "longLabel": "HandleSubscriptionDeletedAsync(customerEmail: string) -> Task<Result>",
      "signature": "(customerEmail: string) -> Task<Result>",
      "purpose": "Handle a Stripe subscription deletion: reset the user's subscription to the Free plan and restore its AI token limit, persisting via UserManager.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "billingservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17924up:removeasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 58,
      "canonicalName": "RemoveAsync",
      "shortLabel": "RemoveAsync()",
      "longLabel": "RemoveAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Removes an item from browser localStorage by key and returns Result success/failure.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17fop7p:sendasync",
      "kind": "method",
      "fileId": "file:17v8pus:authenticationheaderhandler-cs",
      "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "line": 27,
      "canonicalName": "SendAsync",
      "shortLabel": "SendAsync()",
      "longLabel": "SendAsync(request: HttpRequestMessage, cancellationToken: CancellationToken) -> Task<HttpResponseMessage>",
      "signature": "(request: HttpRequestMessage, cancellationToken: CancellationToken) -> Task<HttpResponseMessage>",
      "purpose": "Intercepts outgoing HTTP requests to add a Bearer token for trusted origins, forwards the request, and on 401 attempts a thread-safe token refresh and optionally retries the request with the new token.",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "handler",
        "layer": "infrastructure",
        "boundaryHints": [
          "handler",
          "infrastructure",
          "nexusreader-web-client",
          "handlers",
          "authenticationheaderhandler-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17j6y8x:toggleasync",
      "kind": "method",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "line": 8,
      "canonicalName": "ToggleAsync",
      "shortLabel": "ToggleAsync()",
      "longLabel": "ToggleAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Asynchronously toggles the focus mode state and typically notifies subscribers.",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "kind": "method",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "line": 29,
      "canonicalName": "SearchLibrarySemanticallyQueryHandler",
      "shortLabel": "SearchLibrarySemanticallyQueryHandler()",
      "longLabel": "SearchLibrarySemanticallyQueryHandler(embeddingGenerator: IEmbeddingGenerator<string, Embedding<float>>, dbContextFactory: IDbContextFactory<AppDbContext>, pipelineProvider: ResiliencePipelineProvider<string>, mapper: IMapper) -> SearchLibrarySemanticallyQueryHandler",
      "signature": "(embeddingGenerator: IEmbeddingGenerator<string, Embedding<float>>, dbContextFactory: IDbContextFactory<AppDbContext>, pipelineProvider: ResiliencePipelineProvider<string>, mapper: IMapper) -> SearchLibrarySemanticallyQueryHandler",
      "purpose": "Constructor that stores injected services and obtains a named resilience pipeline for retries.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17jlxw0:handle",
      "kind": "method",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "line": 23,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: AskLibraryQuestionQuery, cancellationToken: CancellationToken) -> Task<Result<GroundedResponseDto>>",
      "signature": "(request: AskLibraryQuestionQuery, cancellationToken: CancellationToken) -> Task<Result<GroundedResponseDto>>",
      "purpose": "Validates the incoming question and forwards it to the knowledge service to obtain a grounded AI response.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:17pqj2a:savesecurestring",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 73,
      "canonicalName": "SaveSecureString",
      "shortLabel": "SaveSecureString()",
      "longLabel": "SaveSecureString(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Asynchronously saves a value into MAUI SecureStorage and returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:18714ak:saveboolasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 35,
      "canonicalName": "SaveBoolAsync",
      "shortLabel": "SaveBoolAsync()",
      "longLabel": "SaveBoolAsync(key: string, value: bool) -> Task<Result>",
      "signature": "(key: string, value: bool) -> Task<Result>",
      "purpose": "Saves a boolean into MAUI Preferences and returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:18ccdu4:mapdevicetype",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 71,
      "canonicalName": "MapDeviceType",
      "shortLabel": "MapDeviceType()",
      "longLabel": "MapDeviceType(idiom: DeviceIdiom) -> NexusReader.Application.Abstractions.Services.DeviceType",
      "signature": "(idiom: DeviceIdiom) -> NexusReader.Application.Abstractions.Services.DeviceType",
      "purpose": "Maps MAUI DeviceIdiom values to the application's DeviceType enum.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:18nxwdn:savestringasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 21,
      "canonicalName": "SaveStringAsync",
      "shortLabel": "SaveStringAsync()",
      "longLabel": "SaveStringAsync(string key, string value) -> Task<Result>",
      "signature": "(string key, string value) -> Task<Result>",
      "purpose": "Saves a string value into browser localStorage via JS interop; returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:18zc3my:ontextselected",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 8,
      "canonicalName": "OnTextSelected",
      "shortLabel": "OnTextSelected()",
      "longLabel": "OnTextSelectedevent Func<string, string, SelectionCoordinates, Task>? -> void (event declaration)",
      "signature": "event Func<string, string, SelectionCoordinates, Task>? -> void (event declaration)",
      "purpose": "Event fired when text is selected; subscribers receive the text, blockId, and coordinates.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:191bta3:getsecurestring",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 86,
      "canonicalName": "GetSecureString",
      "shortLabel": "GetSecureString()",
      "longLabel": "GetSecureString(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Asynchronously retrieves a value from MAUI SecureStorage and returns it wrapped in a FluentResults Result; failures produce a failed Result.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:194t8sk:dispose",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 66,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Dispose no-op for the throwing embedding generator.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:197aset:createmauiapp",
      "kind": "method",
      "fileId": "file:p180ke:mainapplication-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "line": 20,
      "canonicalName": "CreateMauiApp",
      "shortLabel": "CreateMauiApp()",
      "longLabel": "CreateMauiApp() -> MauiApp",
      "signature": "() -> MauiApp",
      "purpose": "Overrides MauiApplication.CreateMauiApp to construct the MAUI app via MauiProgram.CreateMauiApp with logging and error handling.",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19botw9:readernavigationservice",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 9,
      "canonicalName": "ReaderNavigationService",
      "shortLabel": "ReaderNavigationService()",
      "longLabel": "ReaderNavigationService(navigationManager: NavigationManager) -> ReaderNavigationService",
      "signature": "(navigationManager: NavigationManager) -> ReaderNavigationService",
      "purpose": "Constructor: captures NavigationManager dependency for performing route navigation.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19ghosy:saveboolasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 47,
      "canonicalName": "SaveBoolAsync",
      "shortLabel": "SaveBoolAsync()",
      "longLabel": "SaveBoolAsync(string key, bool value) -> Task<Result>",
      "signature": "(string key, bool value) -> Task<Result>",
      "purpose": "Stores a boolean as a string in localStorage by delegating to SaveStringAsync.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19tpzwe:getstringasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 8,
      "canonicalName": "GetStringAsync",
      "shortLabel": "GetStringAsync()",
      "longLabel": "GetStringAsync(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Retrieve a non-secure string value by key asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19x6wwx:account-logout-form-get-account-logout-form",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 539,
      "canonicalName": "Account Logout Form (GET /account/logout-form)",
      "shortLabel": "Account Logout Form (GET /account/logout-form)",
      "longLabel": "Account Logout Form (GET /account/logout-form)(SignInManager<NexusUser> signInManager, ILogger<Program> logger) -> IResult",
      "signature": "(SignInManager<NexusUser> signInManager, ILogger<Program> logger) -> IResult",
      "purpose": "Sign out current user and redirect to login page.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 463,
      "canonicalName": "Identity Callback (GET /identity/callback/google)",
      "shortLabel": "Identity Callback (GET /identity/callback/google)",
      "longLabel": "Identity Callback (GET /identity/callback/google)(HttpContext context, SignInManager<NexusUser> signInManager, UserManager<NexusUser> userManager, ILogger<Program> logger) -> IResult",
      "signature": "(HttpContext context, SignInManager<NexusUser> signInManager, UserManager<NexusUser> userManager, ILogger<Program> logger) -> IResult",
      "purpose": "Process Google external login callback: attempt sign-in, handle lockout, provision new user if needed, and log errors.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:19ym4q4:up",
      "kind": "method",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 13,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Creates database tables, constraints and indexes needed for initial application schema on Postgres (identity tables, semantic cache, ebooks) during migration up.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1a1t07w:logoutasync",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 72,
      "canonicalName": "LogoutAsync",
      "shortLabel": "LogoutAsync()",
      "longLabel": "LogoutAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "No-op logout helper for Blazor/SignalR scenarios; instructs UI to use a logout-form endpoint to clear cookies.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ac31ry:handlenavigationchanged",
      "kind": "method",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "line": 39,
      "canonicalName": "HandleNavigationChanged",
      "shortLabel": "HandleNavigationChanged()",
      "longLabel": "HandleNavigationChanged() -> Task",
      "signature": "() -> Task",
      "purpose": "Async event handler invoked on navigation changes; requests a UI re-render on the component thread.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ak3em3:calculateprogress",
      "kind": "method",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "line": 44,
      "canonicalName": "CalculateProgress",
      "shortLabel": "CalculateProgress()",
      "longLabel": "CalculateProgress() -> int",
      "signature": "() -> int",
      "purpose": "Computes and returns the reader progress percentage based on current chapter index and total chapters.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1al0hre:handle",
      "kind": "method",
      "fileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "line": 16,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: GetReaderPageQuery, cancellationToken: CancellationToken) -> Task<Result<ReaderPageViewModel>>",
      "signature": "(request: GetReaderPageQuery, cancellationToken: CancellationToken) -> Task<Result<ReaderPageViewModel>>",
      "purpose": "Handles GetReaderPageQuery by calling the epub reader to fetch the requested page content and returns the Result-wrapped ReaderPageViewModel.",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1anyvp0:getknowledgemapasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 76,
      "canonicalName": "GetKnowledgeMapAsync",
      "shortLabel": "GetKnowledgeMapAsync()",
      "longLabel": "GetKnowledgeMapAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Public entry for knowledge map extraction",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ari3ha:oninitialized",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 41,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Subscribe component handlers to FocusMode and GraphService events during component initialization.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1b26w2r:app",
      "kind": "method",
      "fileId": "file:62lucr:app-xaml-cs",
      "path": "NexusReader.Maui/App.xaml.cs",
      "line": 5,
      "canonicalName": "App",
      "shortLabel": "App()",
      "longLabel": "App() -> void",
      "signature": "() -> void",
      "purpose": "Application constructor: initializes XAML components and sets the app's MainPage.",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "app-xaml-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1b2dxzu:up",
      "kind": "method",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "line": 16,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply schema changes: remove/alter columns, add tenant and vector columns, create KnowledgeUnits/SubscriptionPlans/KnowledgeUnitLinks tables, seed SubscriptionPlans, create indexes and add foreign key.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1b2nffa:knowledgecoordinator",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 26,
      "canonicalName": "KnowledgeCoordinator",
      "shortLabel": "KnowledgeCoordinator()",
      "longLabel": "KnowledgeCoordinator(IKnowledgeService knowledgeService, IKnowledgeGraphService graphService, IQuizStateService quizService, IPlatformService platformService, IReaderInteractionService interactionService, ILogger<KnowledgeCoordinator> logger) -> KnowledgeCoordinator",
      "signature": "(IKnowledgeService knowledgeService, IKnowledgeGraphService graphService, IQuizStateService quizService, IPlatformService platformService, IReaderInteractionService interactionService, ILogger<KnowledgeCoordinator> logger) -> KnowledgeCoordinator",
      "purpose": "Constructs the coordinator, stores injected services and subscribes to node-selection events from the interaction service.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1b8lqka:handleupdate",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 61,
      "canonicalName": "HandleUpdate",
      "shortLabel": "HandleUpdate()",
      "longLabel": "HandleUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Requests a UI re-render on the Blazor synchronization context when the quiz service signals an update.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1bfedhw:getsecurestring",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 86,
      "canonicalName": "GetSecureString",
      "shortLabel": "GetSecureString()",
      "longLabel": "GetSecureString(string key) -> Task<Result<string?>>",
      "signature": "(string key) -> Task<Result<string?>>",
      "purpose": "Asynchronously retrieves a string from MAUI SecureStorage and returns it wrapped in a Fluent Result.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1bjnsl7:saveebookasync",
      "kind": "method",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "line": 16,
      "canonicalName": "SaveEbookAsync",
      "shortLabel": "SaveEbookAsync()",
      "longLabel": "SaveEbookAsync(data: Stream, fileName: string) -> Task<string>",
      "signature": "(data: Stream, fileName: string) -> Task<string>",
      "purpose": "Contract to save ebook data from a Stream and return a relative path/URL.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1bkauax:generatefullquiz",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 88,
      "canonicalName": "GenerateFullQuiz",
      "shortLabel": "GenerateFullQuiz()",
      "longLabel": "GenerateFullQuiz() -> Task",
      "signature": "() -> Task",
      "purpose": "Requests a summary/quiz for the entire page content, then closes the panel.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1bl306q:onafterrenderasync",
      "kind": "method",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "line": 69,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "Lifecycle hook: on first render marks component interactive and triggers initial fetch/stream if a ContextBlockId is present.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1bnazn2:render-component-markup",
      "kind": "method",
      "fileId": "file:1sm6kjd:routes-razor",
      "path": "NexusReader.UI.Shared/Routes.razor",
      "line": 1,
      "canonicalName": "Render (component markup)",
      "shortLabel": "Render (component markup)",
      "longLabel": "Render (component markup)() -> RenderFragment (component)",
      "signature": "() -> RenderFragment (component)",
      "purpose": "Renders the app Router, wraps route rendering in an authorization view and an error boundary; shows NotFound and an error UI with a retry action.",
      "domainTags": [
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "routes-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1bus1hn:handle",
      "kind": "method",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "line": 41,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: SearchLibrarySemanticallyQuery, cancellationToken: CancellationToken) -> Task<Result<List<SemanticSearchResultDto>>>",
      "signature": "(request: SearchLibrarySemanticallyQuery, cancellationToken: CancellationToken) -> Task<Result<List<SemanticSearchResultDto>>>",
      "purpose": "Executes a semantic search: validates input, obtains an embedding with retry, queries the DB for nearest cached vectors for the tenant, maps to DTOs and returns a Result.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1bx0ikl:removesecureasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 75,
      "canonicalName": "RemoveSecureAsync",
      "shortLabel": "RemoveSecureAsync()",
      "longLabel": "RemoveSecureAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Secure-named wrapper that delegates to RemoveAsync (no extra security applied).",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1c1pgjw:assembly",
      "kind": "method",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "line": 137,
      "canonicalName": "Assembly",
      "shortLabel": "Assembly()",
      "longLabel": "Assemblyget Assembly() -> System.Reflection.Assembly",
      "signature": "get Assembly() -> System.Reflection.Assembly",
      "purpose": "Exposes the assembly that contains the DependencyInjection class (useful for scanning/registration reflection).",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1c802h4:program-top-level",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 15,
      "canonicalName": "Program (top-level)",
      "shortLabel": "Program (top-level)",
      "longLabel": "Program (top-level)(args: string[]) -> Task",
      "signature": "(args: string[]) -> Task",
      "purpose": "Creates the WebAssembly host builder, registers services (platform, UI, identity, AI, HTTP client, app services) and starts the WASM app.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ca58m3:getrelevantcontextasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 37,
      "canonicalName": "GetRelevantContextAsync",
      "shortLabel": "GetRelevantContextAsync()",
      "longLabel": "GetRelevantContextAsync(query: string, tenantId: string, cancellationToken: CancellationToken) -> Task<Result<List<RelevantContext>>>",
      "signature": "(query: string, tenantId: string, cancellationToken: CancellationToken) -> Task<Result<List<RelevantContext>>>",
      "purpose": "Posts a query to backend to retrieve a list of relevant contexts (semantic retrieval).",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1cayj92:onafterrenderasync",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 76,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "On first render, initialize the JS graph module and, if data already exists, perform an initial graph update.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ckhg6n:getknowledgeasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 8,
      "canonicalName": "GetKnowledgeAsync",
      "shortLabel": "GetKnowledgeAsync()",
      "longLabel": "GetKnowledgeAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Return a KnowledgePacket for provided text scoped to a tenant and optional ebook.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1csperg:notifyuserauthentication",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 106,
      "canonicalName": "NotifyUserAuthentication",
      "shortLabel": "NotifyUserAuthentication()",
      "longLabel": "NotifyUserAuthentication(email: string, tenantId: string, rolesStr: string = \"\") -> void",
      "signature": "(email: string, tenantId: string, rolesStr: string = \"\") -> void",
      "purpose": "Updates cached AuthenticationState to an authenticated state and notifies consumers (used after successful login).",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ctlycb:handlesubscriptionupdatedasync",
      "kind": "method",
      "fileId": "file:13phiik:billingservice-cs",
      "path": "NexusReader.Infrastructure/Services/BillingService.cs",
      "line": 32,
      "canonicalName": "HandleSubscriptionUpdatedAsync",
      "shortLabel": "HandleSubscriptionUpdatedAsync()",
      "longLabel": "HandleSubscriptionUpdatedAsync(customerEmail: string, stripeProductId: string) -> Task<Result>",
      "signature": "(customerEmail: string, stripeProductId: string) -> Task<Result>",
      "purpose": "Handle a Stripe subscription update: map Stripe product id to a local SubscriptionPlan, update the user's plan and AI token limit, and persist via UserManager.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "billingservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1cxlt22:saveebookasync",
      "kind": "method",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "line": 11,
      "canonicalName": "SaveEbookAsync",
      "shortLabel": "SaveEbookAsync()",
      "longLabel": "SaveEbookAsync(data: byte[], fileName: string) -> Task<string>",
      "signature": "(data: byte[], fileName: string) -> Task<string>",
      "purpose": "Contract to save ebook binary data and return a relative path/URL.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1cxxeft:up",
      "kind": "method",
      "fileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "line": 11,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Applies schema changes: adds LastChapter (string) and Progress (double) columns to the Ebooks table.",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1d0xirt:onnavigationchanged",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 10,
      "canonicalName": "OnNavigationChanged",
      "shortLabel": "OnNavigationChanged()",
      "longLabel": "OnNavigationChangedevent Func<Task>? -> event",
      "signature": "event Func<Task>? -> event",
      "purpose": "Event invoked when navigation state changes to notify subscribers (async).",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1d2tbk0:onactivenodechanged",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 12,
      "canonicalName": "OnActiveNodeChanged",
      "shortLabel": "OnActiveNodeChanged()",
      "longLabel": "OnActiveNodeChangedevent Func<string, Task>? -> void",
      "signature": "event Func<string, Task>? -> void",
      "purpose": "Event raised when the active node changes, providing the new node id.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1dgp7fr:addauthor",
      "kind": "method",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 42,
      "canonicalName": "AddAuthor",
      "shortLabel": "AddAuthor()",
      "longLabel": "AddAuthor(author: Author) -> void",
      "signature": "(author: Author) -> void",
      "purpose": "Adds a new Author entity to the DbContext for later persistence.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1diht7t:repair",
      "kind": "method",
      "fileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "line": 8,
      "canonicalName": "Repair",
      "shortLabel": "Repair()",
      "longLabel": "Repair(json: string) -> string",
      "signature": "(json: string) -> string",
      "purpose": "Inspect a JSON string and attempt to repair common truncation/malformed scenarios by trimming, pruning trailing garbage, and appending missing closing characters.",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "jsonrepairhelper-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1dimc2e:getblockclass",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 94,
      "canonicalName": "GetBlockClass",
      "shortLabel": "GetBlockClass()",
      "longLabel": "GetBlockClass(QuizQuestionDto question) -> string",
      "signature": "(QuizQuestionDto question) -> string",
      "purpose": "Returns a CSS class for a question block based on local correctness state (correct/incorrect) or empty when unanswered.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1do3jf2:extractmetadataasync",
      "kind": "method",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "line": 45,
      "canonicalName": "ExtractMetadataAsync",
      "shortLabel": "ExtractMetadataAsync()",
      "longLabel": "ExtractMetadataAsync(Stream epubStream) -> Task<Result<LocalEpubMetadata>>",
      "signature": "(Stream epubStream) -> Task<Result<LocalEpubMetadata>>",
      "purpose": "Opens an EPUB stream locally, extracts title, author, and cover image, and returns them in a LocalEpubMetadata wrapped in a Result.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1dvbk1u:gotonextchapter",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 13,
      "canonicalName": "GoToNextChapter",
      "shortLabel": "GoToNextChapter()",
      "longLabel": "GoToNextChapter() -> Task",
      "signature": "() -> Task",
      "purpose": "Advance navigation to the next chapter and notify subscribers.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1dyzngl:handleclearcache",
      "kind": "method",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "line": 53,
      "canonicalName": "HandleClearCache",
      "shortLabel": "HandleClearCache()",
      "longLabel": "HandleClearCache() -> Task",
      "signature": "() -> Task",
      "purpose": "Asynchronously requests clearing the AI/knowledge cache via KnowledgeService and logs the outcome.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1e84qm4:normalize",
      "kind": "method",
      "fileId": "file:13kvr59:contenthasher-cs",
      "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "line": 24,
      "canonicalName": "Normalize",
      "shortLabel": "Normalize()",
      "longLabel": "Normalize(input: string) -> string",
      "signature": "(input: string) -> string",
      "purpose": "Produce a deterministic normalized version of the input by trimming, collapsing whitespace to single spaces, and lower-casing; returns empty for null/whitespace input.",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "contenthasher-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ed5bhs:updatereadingprogresscommandhandler",
      "kind": "method",
      "fileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "line": 18,
      "canonicalName": "UpdateReadingProgressCommandHandler",
      "shortLabel": "UpdateReadingProgressCommandHandler()",
      "longLabel": "UpdateReadingProgressCommandHandler(dbContextFactory: IDbContextFactory<AppDbContext>, broadcaster: ISyncBroadcaster) -> UpdateReadingProgressCommandHandler",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>, broadcaster: ISyncBroadcaster) -> UpdateReadingProgressCommandHandler",
      "purpose": "Constructor: injects the AppDbContext factory and an ISyncBroadcaster.",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ef8df:oninitialized",
      "kind": "method",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "line": 48,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Component lifecycle initialization: subscribes to FocusMode change events to trigger UI updates.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1egheyd:executeairequestandcacheasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 140,
      "canonicalName": "ExecuteAiRequestAndCacheAsync",
      "shortLabel": "ExecuteAiRequestAndCacheAsync()",
      "longLabel": "ExecuteAiRequestAndCacheAsync(normalizedText: string, tenantId: string, systemPrompt: string, traceType: string, ebookId: Guid?, hash: string) -> Task<Result<KnowledgePacket>>",
      "signature": "(normalizedText: string, tenantId: string, systemPrompt: string, traceType: string, ebookId: Guid?, hash: string) -> Task<Result<KnowledgePacket>>",
      "purpose": "Invokes AI via chat client with retries, repairs/deserializes JSON, caches the response in DB and processes KnowledgeUnits",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1egmvje:buildtargetmodel",
      "kind": "method",
      "fileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model snapshot for this migration: annotations, extensions, entity schemas, relationships, indices and data seeding.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ejbaxq:handlescrollrequested",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 187,
      "canonicalName": "HandleScrollRequested",
      "shortLabel": "HandleScrollRequested()",
      "longLabel": "HandleScrollRequested(blockId: string) -> Task",
      "signature": "(blockId: string) -> Task",
      "purpose": "Handler that triggers a scroll to a specific block node.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ekb3x6:registerasync",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 79,
      "canonicalName": "RegisterAsync",
      "shortLabel": "RegisterAsync()",
      "longLabel": "RegisterAsync(email: string, password: string) -> Task<Result>",
      "signature": "(email: string, password: string) -> Task<Result>",
      "purpose": "Creates a new NexusUser with default subscription/tenant and returns success or the first identity error; does not sign in the user.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1epuq0y:handle",
      "kind": "method",
      "fileId": "file:16axv5i:getmyebooksquery-cs",
      "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "line": 20,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: GetMyEbooksQuery, cancellationToken: CancellationToken) -> Task<Result<List<LastReadBookDto>>>",
      "signature": "(request: GetMyEbooksQuery, cancellationToken: CancellationToken) -> Task<Result<List<LastReadBookDto>>>",
      "purpose": "Opens a DbContext, queries ebooks for the given user id, projects results to LastReadBookDto list, and returns Result.Ok(list).",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1f4bu99:oninitializedasync",
      "kind": "method",
      "fileId": "file:1kjntt:intelligence-razor",
      "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "line": 388,
      "canonicalName": "OnInitializedAsync",
      "shortLabel": "OnInitializedAsync()",
      "longLabel": "OnInitializedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Initializes the component by loading recent books for the scope selector from the API.",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "intelligence-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1fcqnzv:toggletheme",
      "kind": "method",
      "fileId": "file:i1pwrm:themeservice-cs",
      "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "line": 8,
      "canonicalName": "ToggleTheme",
      "shortLabel": "ToggleTheme()",
      "longLabel": "ToggleTheme() -> Task",
      "signature": "() -> Task",
      "purpose": "Toggles the IsLightMode flag and notifies subscribers via the OnThemeChanged event.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "themeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1febov1:buildtargetmodel",
      "kind": "method",
      "fileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Builds the EF Core model snapshot: configures entity types, properties, indexes, relationships, annotations and seed data for the target database model.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ffpsuv:refreshlibrary",
      "kind": "method",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "line": 543,
      "canonicalName": "RefreshLibrary",
      "shortLabel": "RefreshLibrary()",
      "longLabel": "RefreshLibrary() -> Task",
      "signature": "() -> Task",
      "purpose": "Public refresh helper invoked after the ingestion modal closes to reload the library.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1fgpnj9:getgraphdataasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 66,
      "canonicalName": "GetGraphDataAsync",
      "shortLabel": "GetGraphDataAsync()",
      "longLabel": "GetGraphDataAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Public entry that requests graph-structured extraction",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1fl6nt2:handle",
      "kind": "method",
      "fileId": "file:2eckht:verifygroundednesscommand-cs",
      "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "line": 18,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: VerifyGroundednessCommand, cancellationToken: CancellationToken) -> Task<Result<GroundednessResult>>",
      "signature": "(request: VerifyGroundednessCommand, cancellationToken: CancellationToken) -> Task<Result<GroundednessResult>>",
      "purpose": "Handles the VerifyGroundednessCommand by calling the knowledge service to verify groundedness and returning the service result.",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "ai"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1fw96o1:onthemechanged",
      "kind": "method",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "line": 6,
      "canonicalName": "OnThemeChanged",
      "shortLabel": "OnThemeChanged()",
      "longLabel": "OnThemeChangedevent Func<Task>? -> event",
      "signature": "event Func<Task>? -> event",
      "purpose": "Event invoked when the theme changes to notify subscribers.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1g73g8y:positionbelow",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 60,
      "canonicalName": "PositionBelow",
      "shortLabel": "PositionBelow()",
      "longLabel": "PositionBelow() -> bool",
      "signature": "() -> bool",
      "purpose": "Determines whether the panel should be positioned below the selection based on Coordinates.Top.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1g8j6qo:getgraphdataasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 9,
      "canonicalName": "GetGraphDataAsync",
      "shortLabel": "GetGraphDataAsync()",
      "longLabel": "GetGraphDataAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Produce graph-structured knowledge data for the given text and tenant context.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1gbqw83:refreshtokenasync",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 13,
      "canonicalName": "RefreshTokenAsync",
      "shortLabel": "RefreshTokenAsync()",
      "longLabel": "RefreshTokenAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Requests a token refresh for the current authentication session and returns a Result indicating success/failure.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1gkzz9r:updateprogress",
      "kind": "method",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "line": 19,
      "canonicalName": "UpdateProgress",
      "shortLabel": "UpdateProgress()",
      "longLabel": "UpdateProgress(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task",
      "signature": "(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task",
      "purpose": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1gtjcaz:updategraph",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 15,
      "canonicalName": "UpdateGraph",
      "shortLabel": "UpdateGraph()",
      "longLabel": "UpdateGraph(newData: GraphDataDto) -> Task",
      "signature": "(newData: GraphDataDto) -> Task",
      "purpose": "Asynchronously replace or update the current graph data with newData and notify listeners.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1gw1s7x:removeasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 63,
      "canonicalName": "RemoveAsync",
      "shortLabel": "RemoveAsync()",
      "longLabel": "RemoveAsync(string key) -> Task<Result>",
      "signature": "(string key) -> Task<Result>",
      "purpose": "Removes an item from browser localStorage via JS interop and reports success/failure.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1h2dsti:dispose",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 266,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Unsubscribes all previously registered event handlers to avoid leaks when component is disposed.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1i33wis:logoutasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 104,
      "canonicalName": "LogoutAsync",
      "shortLabel": "LogoutAsync()",
      "longLabel": "LogoutAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Clears cached profile and, on browser, erases stored tokens/profile metadata; notifies auth provider and triggers state invalidation.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1i9kqly:getfullpagecontent",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 204,
      "canonicalName": "GetFullPageContent",
      "shortLabel": "GetFullPageContent()",
      "longLabel": "GetFullPageContent() -> string",
      "signature": "() -> string",
      "purpose": "Builds a plain-text representation of all text blocks (IDs + content) for coordinator processing or full-page use.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ib6h4r:handlequizrequestedasync",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 92,
      "canonicalName": "HandleQuizRequestedAsync",
      "shortLabel": "HandleQuizRequestedAsync()",
      "longLabel": "HandleQuizRequestedAsync(blockId: string) -> Task",
      "signature": "(blockId: string) -> Task",
      "purpose": "Receive quiz request events, set active quiz block id and request UI update.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ii06co:setactivenode",
      "kind": "method",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "line": 23,
      "canonicalName": "SetActiveNode",
      "shortLabel": "SetActiveNode()",
      "longLabel": "SetActiveNode(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Set the active node id (no-op if unchanged) and notify subscribers of the change.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ip44st:loggeneratinggraph",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 157,
      "canonicalName": "LogGeneratingGraph",
      "shortLabel": "LogGeneratingGraph()",
      "longLabel": "LogGeneratingGraph(tenantId: string) -> void",
      "signature": "(tenantId: string) -> void",
      "purpose": "Source-generated logger stub for informational message when generating a graph.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1iqnx8z:ishydrating",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 9,
      "canonicalName": "IsHydrating",
      "shortLabel": "IsHydrating()",
      "longLabel": "IsHydrating() -> bool",
      "signature": "() -> bool",
      "purpose": "Read-only property indicating whether the service is currently hydrating state.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1iw78py:saveebookasync",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 19,
      "canonicalName": "SaveEbookAsync",
      "shortLabel": "SaveEbookAsync()",
      "longLabel": "SaveEbookAsync(data: byte[], fileName: string) -> Task<string>",
      "signature": "(data: byte[], fileName: string) -> Task<string>",
      "purpose": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jbr3bv:removeasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 60,
      "canonicalName": "RemoveAsync",
      "shortLabel": "RemoveAsync()",
      "longLabel": "RemoveAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Removes a key from MAUI Preferences and returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jqlijy:handle",
      "kind": "method",
      "fileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "line": 26,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: UpdateReadingProgressCommand, cancellationToken: CancellationToken) -> Task<Result>",
      "signature": "(request: UpdateReadingProgressCommand, cancellationToken: CancellationToken) -> Task<Result>",
      "purpose": "Load user and ebook, update reading progress and timestamps, persist changes, then broadcast the progress to other devices; returns success or failure if user missing.",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1jr0xbp:requestid-backing-state",
      "kind": "method",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "line": 31,
      "canonicalName": "RequestId (backing state)",
      "shortLabel": "RequestId (backing state)",
      "longLabel": "RequestId (backing state)private string? RequestId { get; set; }",
      "signature": "private string? RequestId { get; set; }",
      "purpose": "Holds the resolved request identifier used by the UI.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1js2qbs:retrywhendocumentbecomesvisible",
      "kind": "method",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "line": 59,
      "canonicalName": "retryWhenDocumentBecomesVisible",
      "shortLabel": "retryWhenDocumentBecomesVisible()",
      "longLabel": "retryWhenDocumentBecomesVisible() -> Promise<void>",
      "signature": "() -> Promise<void>",
      "purpose": "Visibility-change handler that triggers retry() when the document becomes visible.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jsmnk6:gotonextchapter",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 29,
      "canonicalName": "GoToNextChapter",
      "shortLabel": "GoToNextChapter()",
      "longLabel": "GoToNextChapter() -> Task",
      "signature": "() -> Task",
      "purpose": "Advances to the next chapter when not at the last chapter (delegates to GoToChapter).",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jw3y39:getknowledgeasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 17,
      "canonicalName": "GetKnowledgeAsync",
      "shortLabel": "GetKnowledgeAsync()",
      "longLabel": "GetKnowledgeAsync(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Requests a general knowledge packet from the backend for the provided text and optional ebookId.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jwlkph:knowledgeunitlinks-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 22,
      "canonicalName": "KnowledgeUnitLinks (DbSet property)",
      "shortLabel": "KnowledgeUnitLinks (DbSet property)",
      "longLabel": "KnowledgeUnitLinks (DbSet property)() -> DbSet<KnowledgeUnitLink>",
      "signature": "() -> DbSet<KnowledgeUnitLink>",
      "purpose": "Exposes the DbSet for KnowledgeUnitLink entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1jxczws:handlelogout",
      "kind": "method",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "line": 133,
      "canonicalName": "HandleLogout",
      "shortLabel": "HandleLogout()",
      "longLabel": "HandleLogout() -> Task",
      "signature": "() -> Task",
      "purpose": "Performs logout by calling IdentityService.LogoutAsync and then navigates to the logout form route.",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1jy35qw:ondisconnectedasync",
      "kind": "method",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "line": 38,
      "canonicalName": "OnDisconnectedAsync",
      "shortLabel": "OnDisconnectedAsync()",
      "longLabel": "OnDisconnectedAsync(exception: Exception?) -> Task",
      "signature": "(exception: Exception?) -> Task",
      "purpose": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception).",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1k0kfjg:onnavigationchanged",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 88,
      "canonicalName": "OnNavigationChanged",
      "shortLabel": "OnNavigationChanged()",
      "longLabel": "OnNavigationChanged() -> Task",
      "signature": "() -> Task",
      "purpose": "Handles navigation changes by resetting selection/JS state and reloading the chapter.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1k49ns3:removesecureasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 80,
      "canonicalName": "RemoveSecureAsync",
      "shortLabel": "RemoveSecureAsync()",
      "longLabel": "RemoveSecureAsync(string key) -> Task<Result>",
      "signature": "(string key) -> Task<Result>",
      "purpose": "Alias for RemoveAsync; intended for secure-string removal semantics.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1k4gp5:wasmknowledgeservice",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 12,
      "canonicalName": "WasmKnowledgeService",
      "shortLabel": "WasmKnowledgeService()",
      "longLabel": "WasmKnowledgeService(HttpClient httpClient) -> void",
      "signature": "(HttpClient httpClient) -> void",
      "purpose": "Constructs the service and stores an HttpClient for API calls.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1kikefa:isvisible",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 57,
      "canonicalName": "IsVisible",
      "shortLabel": "IsVisible()",
      "longLabel": "IsVisible() -> bool",
      "signature": "() -> bool",
      "purpose": "Computed property indicating if the selection panel should be shown (non-empty SelectedText and Coordinates present).",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1kuci8n:down",
      "kind": "method",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 253,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Drops the tables created by Up in reverse order to roll back the migration.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1l4808t:handleupdate",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 98,
      "canonicalName": "HandleUpdate",
      "shortLabel": "HandleUpdate()",
      "longLabel": "HandleUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Request a UI update from other subscribers (used as an event handler).",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1l7jj8x:initializeobserverasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 130,
      "canonicalName": "InitializeObserverAsync",
      "shortLabel": "InitializeObserverAsync()",
      "longLabel": "InitializeObserverAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Loads JS observer module and initializes scroll/visibility observer; logs warning on failure.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1l8c2eg:estimatetokencount",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 801,
      "canonicalName": "EstimateTokenCount",
      "shortLabel": "EstimateTokenCount()",
      "longLabel": "EstimateTokenCount(text: string) -> int",
      "signature": "(text: string) -> int",
      "purpose": "Estimates token count for a string using configured tokenizer",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1l8ubet:zoomout",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 97,
      "canonicalName": "ZoomOut",
      "shortLabel": "ZoomOut()",
      "longLabel": "ZoomOut() -> Task",
      "signature": "() -> Task",
      "purpose": "Request the JS graph module to zoom out.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1la3caq:navigatetobook",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 20,
      "canonicalName": "NavigateToBook",
      "shortLabel": "NavigateToBook()",
      "longLabel": "NavigateToBook(bookId: Guid) -> void",
      "signature": "(bookId: Guid) -> void",
      "purpose": "Navigate to the reader UI for a specific book and record its ebook ID (triggers routing).",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1lb2q26:requesthighlightblock",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 12,
      "canonicalName": "RequestHighlightBlock",
      "shortLabel": "RequestHighlightBlock()",
      "longLabel": "RequestHighlightBlock(string blockId) -> Task",
      "signature": "(string blockId) -> Task",
      "purpose": "Declares an async request to highlight a block (intended to trigger OnHighlightBlockRequested).",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1lfokb3:vibrateasync",
      "kind": "method",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "line": 19,
      "canonicalName": "VibrateAsync",
      "shortLabel": "VibrateAsync()",
      "longLabel": "VibrateAsync(milliseconds: int) -> Task<Result>",
      "signature": "(milliseconds: int) -> Task<Result>",
      "purpose": "Attempts to vibrate the user's device for the specified duration via JS interop, returning Ok on success or Fail with the exception message on error.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1lg6b3p:getstringasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 23,
      "canonicalName": "GetStringAsync",
      "shortLabel": "GetStringAsync()",
      "longLabel": "GetStringAsync(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Reads a string from MAUI Preferences by key and returns it wrapped in a FluentResults Result; failures produce a failed Result.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1lrpkzo:getknowledgeasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 61,
      "canonicalName": "GetKnowledgeAsync",
      "shortLabel": "GetKnowledgeAsync()",
      "longLabel": "GetKnowledgeAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Public entry that requests full knowledge extraction using internal routine",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 250,
      "canonicalName": "GetEpubContent (GET /api/epub/{ebookId}/{index})",
      "shortLabel": "GetEpubContent (GET /api/epub/{ebookId}/{index})",
      "longLabel": "GetEpubContent (GET /api/epub/{ebookId}/{index})(ebookId: Guid, index: int, IEpubReader epubService, ClaimsPrincipal user) -> IResult",
      "signature": "(ebookId: Guid, index: int, IEpubReader epubService, ClaimsPrincipal user) -> IResult",
      "purpose": "Return EPUB page content for an ebook index for the current user.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1lw55w9:up",
      "kind": "method",
      "fileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "line": 11,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Applies the migration: adds LastChapterIndex (integer, non-nullable, default 0) to the Ebooks table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1lzew1d:gotopreviouschapter",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 37,
      "canonicalName": "GoToPreviousChapter",
      "shortLabel": "GoToPreviousChapter()",
      "longLabel": "GoToPreviousChapter() -> Task",
      "signature": "() -> Task",
      "purpose": "Moves to the previous chapter when not at the first chapter (delegates to GoToChapter).",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1lzfzn4:book-component-parameter",
      "kind": "method",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "line": 70,
      "canonicalName": "Book (component parameter)",
      "shortLabel": "Book (component parameter)",
      "longLabel": "Book (component parameter)[Parameter] public LastReadBookDto? Book { get; set; }",
      "signature": "[Parameter] public LastReadBookDto? Book { get; set; }",
      "purpose": "Component parameter that provides the last-read book details used to populate the UI.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1m8qyhe:handleupdate",
      "kind": "method",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "line": 109,
      "canonicalName": "HandleUpdate",
      "shortLabel": "HandleUpdate()",
      "longLabel": "HandleUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Invokes a UI refresh on the component's synchronization context (wraps StateHasChanged in InvokeAsync).",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1mthy2:sanitizeparagraph",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 166,
      "canonicalName": "SanitizeParagraph",
      "shortLabel": "SanitizeParagraph()",
      "longLabel": "SanitizeParagraph(html: string) -> string",
      "signature": "(html: string) -> string",
      "purpose": "Sanitizes HTML paragraph content by removing scripts/styles, stripping disallowed tags, normalizing allowed tags, HTML-decoding and trimming.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1mtzd71:signalrsyncbroadcaster",
      "kind": "method",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "line": 15,
      "canonicalName": "SignalRSyncBroadcaster",
      "shortLabel": "SignalRSyncBroadcaster()",
      "longLabel": "SignalRSyncBroadcaster(IHubContext<SyncHub> hubContext) -> SignalRSyncBroadcaster",
      "signature": "(IHubContext<SyncHub> hubContext) -> SignalRSyncBroadcaster",
      "purpose": "Constructs the broadcaster with the SignalR hub context.",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1muyu85:zoomin",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 96,
      "canonicalName": "ZoomIn",
      "shortLabel": "ZoomIn()",
      "longLabel": "ZoomIn() -> Task",
      "signature": "() -> Task",
      "purpose": "Request the JS graph module to zoom in.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1n08b99:handlereconnectstatechanged",
      "kind": "method",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "line": 11,
      "canonicalName": "handleReconnectStateChanged",
      "shortLabel": "handleReconnectStateChanged()",
      "longLabel": "handleReconnectStateChanged(event) -> void",
      "signature": "(event) -> void",
      "purpose": "Handles incoming reconnect-state change events and performs UI actions (show/hide modal), schedules visibility-driven retries, or forces page reload on rejection.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1naqltb:handleactionclick",
      "kind": "method",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "line": 146,
      "canonicalName": "HandleActionClick",
      "shortLabel": "HandleActionClick()",
      "longLabel": "HandleActionClick(action: string) -> Task",
      "signature": "(action: string) -> Task",
      "purpose": "Handles UI action button clicks: triggers quiz request when action indicates 'quiz' and forwards action via the OnActionTriggered callback if provided.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1nedo1:onafterrenderasync",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 51,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "Marks component as interactive on first render and triggers a check if needed.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1nqcmix:handlehighlightrequested",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 192,
      "canonicalName": "HandleHighlightRequested",
      "shortLabel": "HandleHighlightRequested()",
      "longLabel": "HandleHighlightRequested(blockId: string) -> Task",
      "signature": "(blockId: string) -> Task",
      "purpose": "Highlights a block temporarily by setting a highlighted id, triggers UI updates and clears it after a delay.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1nrn8uy:buildmodel",
      "kind": "method",
      "fileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "line": 17,
      "canonicalName": "BuildModel",
      "shortLabel": "BuildModel()",
      "longLabel": "BuildModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Populates the provided ModelBuilder with the full EF Core model: annotations, extensions, entity/property definitions, indexes, relationships, navigations, and seed data used by migrations.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "appdbcontextmodelsnapshot-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1nyg1j6:dispose",
      "kind": "method",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "line": 72,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Lifecycle cleanup: unsubscribes from FocusMode change events to avoid memory leaks.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1nzct8x:loggrapherror",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 160,
      "canonicalName": "LogGraphError",
      "shortLabel": "LogGraphError()",
      "longLabel": "LogGraphError(ex: Exception, tenantId: string) -> void",
      "signature": "(ex: Exception, tenantId: string) -> void",
      "purpose": "Source-generated logger stub for graph generation errors.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1o0t990:savecoverasync",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 50,
      "canonicalName": "SaveCoverAsync",
      "shortLabel": "SaveCoverAsync()",
      "longLabel": "SaveCoverAsync(data: Stream, fileName: string) -> Task<string?>",
      "signature": "(data: Stream, fileName: string) -> Task<string?>",
      "purpose": "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).",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1oclqd:verifygroundednessasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 13,
      "canonicalName": "VerifyGroundednessAsync",
      "shortLabel": "VerifyGroundednessAsync()",
      "longLabel": "VerifyGroundednessAsync(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<GroundednessResult>>",
      "signature": "(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<GroundednessResult>>",
      "purpose": "Evaluate whether an answer is grounded in provided context and return a score/rationale.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1odjeej:searchlibrarysemanticallyasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 14,
      "canonicalName": "SearchLibrarySemanticallyAsync",
      "shortLabel": "SearchLibrarySemanticallyAsync()",
      "longLabel": "SearchLibrarySemanticallyAsync(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken = default) -> Task<Result<List<SemanticSearchResultDto>>>",
      "signature": "(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken = default) -> Task<Result<List<SemanticSearchResultDto>>>",
      "purpose": "Perform a semantic search over the library for a tenant and return top results up to a limit.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1of3kqt:onmodelcreating",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 28,
      "canonicalName": "OnModelCreating",
      "shortLabel": "OnModelCreating()",
      "longLabel": "OnModelCreating(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Configures EF model mappings: entity properties, indexes, relationships, provider-specific column types, and seeds subscription plans with deterministic IDs.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1oj8i7o:render-conditional-requestid-block",
      "kind": "method",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "line": 9,
      "canonicalName": "Render: conditional RequestId block",
      "shortLabel": "Render: conditional RequestId block()",
      "longLabel": "Render: conditional RequestId block() -> render-branch",
      "signature": "() -> render-branch",
      "purpose": "Razor conditional block that renders the Request ID markup only when ShowRequestId is true.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ol1cx2:verifygroundednessasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 56,
      "canonicalName": "VerifyGroundednessAsync",
      "shortLabel": "VerifyGroundednessAsync()",
      "longLabel": "VerifyGroundednessAsync(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken) -> Task<Result<GroundednessResult>>",
      "signature": "(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken) -> Task<Result<GroundednessResult>>",
      "purpose": "Sends answer+context to backend to verify groundedness and returns structured result.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1oljw52:getboolasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 10,
      "canonicalName": "GetBoolAsync",
      "shortLabel": "GetBoolAsync()",
      "longLabel": "GetBoolAsync(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "signature": "(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "purpose": "Retrieve a boolean value by key asynchronously, returning a provided default if absent.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1olwlbd:getsecurestring",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 78,
      "canonicalName": "GetSecureString",
      "shortLabel": "GetSecureString()",
      "longLabel": "GetSecureString(string key) -> Task<Result<string?>>",
      "signature": "(string key) -> Task<Result<string?>>",
      "purpose": "Alias for GetStringAsync; intended for secure-string semantics at the API level.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1om56u0:requesthighlightblock",
      "kind": "method",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "line": 20,
      "canonicalName": "RequestHighlightBlock",
      "shortLabel": "RequestHighlightBlock()",
      "longLabel": "RequestHighlightBlock(string blockId) -> Task",
      "signature": "(string blockId) -> Task",
      "purpose": "Requests highlight of a block by raising the OnHighlightBlockRequested event when subscribers exist.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1op2ws5:updateprogressasync",
      "kind": "method",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "line": 8,
      "canonicalName": "UpdateProgressAsync",
      "shortLabel": "UpdateProgressAsync()",
      "longLabel": "UpdateProgressAsync(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
      "signature": "(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
      "purpose": "Reports progress/state for a given ebook and page, returning a Result indicating success or failure.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1oq28g8:requestsummary",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 76,
      "canonicalName": "RequestSummary",
      "shortLabel": "RequestSummary()",
      "longLabel": "RequestSummary() -> Task",
      "signature": "() -> Task",
      "purpose": "Orchestrates an async request to the KnowledgeCoordinator to produce a summary/quiz for the selected text (optionally including full page context) and stores the resulting KnowledgePacket.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1oqk0x0:iasyncdisposable-disposeasync",
      "kind": "method",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 112,
      "canonicalName": "IAsyncDisposable.DisposeAsync",
      "shortLabel": "IAsyncDisposable.DisposeAsync()",
      "longLabel": "IAsyncDisposable.DisposeAsync() -> ValueTask",
      "signature": "() -> ValueTask",
      "purpose": "Explicit interface implementation that forwards to DisposeAsync to unify disposal semantics.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ouv7tw:savecoverasync",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 43,
      "canonicalName": "SaveCoverAsync",
      "shortLabel": "SaveCoverAsync()",
      "longLabel": "SaveCoverAsync(data: byte[], fileName: string) -> Task<string?>",
      "signature": "(data: byte[], fileName: string) -> Task<string?>",
      "purpose": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1oz3km6:getsummaryandquizasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 32,
      "canonicalName": "GetSummaryAndQuizAsync",
      "shortLabel": "GetSummaryAndQuizAsync()",
      "longLabel": "GetSummaryAndQuizAsync(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Requests summary and quiz content for given text from the backend.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1p3f1im:handleblockreached",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 143,
      "canonicalName": "HandleBlockReached",
      "shortLabel": "HandleBlockReached()",
      "longLabel": "HandleBlockReached(blockId: string, content: string) -> Task",
      "signature": "(blockId: string, content: string) -> Task",
      "purpose": "Invoked from JS when a block becomes visible; notifies coordinator and updates sync progress if ViewModel present.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1p3ftme:dispose",
      "kind": "method",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "line": 159,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Component disposal: cancels and disposes the streaming CancellationTokenSource to stop background streaming when the component is destroyed.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1p9w1qk:isactive-getter",
      "kind": "method",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "line": 25,
      "canonicalName": "IsActive (getter)",
      "shortLabel": "IsActive (getter)",
      "longLabel": "IsActive (getter)() -> bool",
      "signature": "() -> bool",
      "purpose": "Computed property that indicates if the search input contains text; used to toggle CSS state.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1pa87x9:onquizupdated",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 13,
      "canonicalName": "OnQuizUpdated",
      "shortLabel": "OnQuizUpdated()",
      "longLabel": "OnQuizUpdatedevent Func<Task>?",
      "signature": "event Func<Task>?",
      "purpose": "Event raised when the quiz state is updated, consumers can subscribe to react to updates.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1pdmx9l:onblockreachedasync",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 106,
      "canonicalName": "OnBlockReachedAsync",
      "shortLabel": "OnBlockReachedAsync()",
      "longLabel": "OnBlockReachedAsync(blockId: string, content: string) -> Task",
      "signature": "(blockId: string, content: string) -> Task",
      "purpose": "Updates the graph service active node when a content block is reached (UI navigation), intentionally does not trigger highlight.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1pecu6b:closeasync",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 96,
      "canonicalName": "CloseAsync",
      "shortLabel": "CloseAsync()",
      "longLabel": "CloseAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Clears the cached packet and notifies the reader interaction service that selection has been cleared, effectively closing the panel.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1pi9wuc:loginasync",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 39,
      "canonicalName": "LoginAsync",
      "shortLabel": "LoginAsync()",
      "longLabel": "LoginAsync(email: string, password: string, rememberMe: bool = false) -> Task<Result>",
      "signature": "(email: string, password: string, rememberMe: bool = false) -> Task<Result>",
      "purpose": "Validates user credentials server-side (for Blazor Server) but deliberately does not perform cookie sign-in; returns success/failure result.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1pp2oro:oninitializedasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 71,
      "canonicalName": "OnInitializedAsync",
      "shortLabel": "OnInitializedAsync()",
      "longLabel": "OnInitializedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Component initialization: clears coordinator and subscribes to theme, navigation, interaction and sync events.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ptxaoh:handlefileselected",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 149,
      "canonicalName": "HandleFileSelected",
      "shortLabel": "HandleFileSelected()",
      "longLabel": "HandleFileSelected(InputFileChangeEventArgs e) -> Task",
      "signature": "(InputFileChangeEventArgs e) -> Task",
      "purpose": "Handles file selection or drop: validates file type/size, reads bytes, invokes metadata extractor, and transitions UI to verification or error state.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1pu32eo:hasnewquiz",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 10,
      "canonicalName": "HasNewQuiz",
      "shortLabel": "HasNewQuiz()",
      "longLabel": "HasNewQuiz() -> bool",
      "signature": "() -> bool",
      "purpose": "Read-only property indicating whether there is a new/unseen quiz.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1pww9i7:savecoverasync",
      "kind": "method",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "line": 28,
      "canonicalName": "SaveCoverAsync",
      "shortLabel": "SaveCoverAsync()",
      "longLabel": "SaveCoverAsync(data: Stream, fileName: string) -> Task<string?>",
      "signature": "(data: Stream, fileName: string) -> Task<string?>",
      "purpose": "Contract to save cover image from a Stream and return a relative path/URL, or null if no cover provided.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1px2su2:handlesubscriptionupdatedasync",
      "kind": "method",
      "fileId": "file:rfn6bc:ibillingservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "line": 8,
      "canonicalName": "HandleSubscriptionUpdatedAsync",
      "shortLabel": "HandleSubscriptionUpdatedAsync()",
      "longLabel": "HandleSubscriptionUpdatedAsync(customerEmail: string, stripeProductId: string) -> Task<Result>",
      "signature": "(customerEmail: string, stripeProductId: string) -> Task<Result>",
      "purpose": "Contract for handling when a customer's subscription is created or updated (by Stripe or equivalent).",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibillingservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1pxp1t3:up",
      "kind": "method",
      "fileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "line": 11,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply the migration: add IsUnlimitedTokens column to SubscriptionPlans and update seeded data for multiple plan rows.",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1q9e63q:getoptionclass",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 100,
      "canonicalName": "GetOptionClass",
      "shortLabel": "GetOptionClass()",
      "longLabel": "GetOptionClass(QuizQuestionDto question, int index) -> string",
      "signature": "(QuizQuestionDto question, int index) -> string",
      "purpose": "Returns CSS class for an option depending on selection, correctness, revealed-correct when incorrect, or faded for others.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1qc1jbv:onloadingchanged",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 13,
      "canonicalName": "OnLoadingChanged",
      "shortLabel": "OnLoadingChanged()",
      "longLabel": "OnLoadingChangedevent Func<bool, Task>? -> void",
      "signature": "event Func<bool, Task>? -> void",
      "purpose": "Event raised when the loading state changes, providing the new boolean state.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1qikoos:handleupdate",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 264,
      "canonicalName": "HandleUpdate",
      "shortLabel": "HandleUpdate()",
      "longLabel": "HandleUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Lightweight helper that requests a StateHasChanged invocation asynchronously.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1r1tcl2:notifynodeselected",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 10,
      "canonicalName": "NotifyNodeSelected",
      "shortLabel": "NotifyNodeSelected()",
      "longLabel": "NotifyNodeSelected(string nodeId) -> Task",
      "signature": "(string nodeId) -> Task",
      "purpose": "Declares an async method to notify that a node was selected (intended to trigger or forward OnNodeSelected).",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1r4sskm:authors-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 26,
      "canonicalName": "Authors (DbSet property)",
      "shortLabel": "Authors (DbSet property)",
      "longLabel": "Authors (DbSet property)() -> DbSet<Author>",
      "signature": "() -> DbSet<Author>",
      "purpose": "Exposes the DbSet for Author entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1r63qu7:onafterrenderasync",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 63,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "On first render initialize focus-mode service and attempt to attach a JS keyboard listener, updating state afterwards.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1r68c5i:onafterrenderasync",
      "kind": "method",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "line": 93,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "After-render lifecycle: on first render, attempts to import a JS module and initialize a resizer; logs on failure.",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1r8a5jx:clearcache",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 23,
      "canonicalName": "ClearCache",
      "shortLabel": "ClearCache()",
      "longLabel": "ClearCache() -> void",
      "signature": "() -> void",
      "purpose": "Clears any cached AuthenticationState and triggers Notification of authentication state change.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1rb8gnn:map-identity-api-mapgroup-identity",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 451,
      "canonicalName": "Map Identity API (MapGroup /identity)",
      "shortLabel": "Map Identity API (MapGroup /identity)",
      "longLabel": "Map Identity API (MapGroup /identity)() -> void",
      "signature": "() -> void",
      "purpose": "Map identity API endpoints provided by helper MapIdentityApi extension.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1rgip6d:removesecureasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 98,
      "canonicalName": "RemoveSecureAsync",
      "shortLabel": "RemoveSecureAsync()",
      "longLabel": "RemoveSecureAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Removes a key from MAUI SecureStorage (synchronous API) and returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1rgphlw:getstringasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 29,
      "canonicalName": "GetStringAsync",
      "shortLabel": "GetStringAsync()",
      "longLabel": "GetStringAsync(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Reads a string value from browser localStorage for the given key and returns it wrapped in a Result; failures produce a failed Result.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1rioxzo:handleselectioncleared",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 179,
      "canonicalName": "HandleSelectionCleared",
      "shortLabel": "HandleSelectionCleared()",
      "longLabel": "HandleSelectionCleared() -> Task",
      "signature": "() -> Task",
      "purpose": "Clears current text selection state and requests UI update.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ro58qu:vibrateerrorasync",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 25,
      "canonicalName": "VibrateErrorAsync",
      "shortLabel": "VibrateErrorAsync()",
      "longLabel": "VibrateErrorAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Performs a long haptic press to indicate an error and returns a FluentResults Result.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1s6rrbj:onquizrequested",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 12,
      "canonicalName": "OnQuizRequested",
      "shortLabel": "OnQuizRequested()",
      "longLabel": "OnQuizRequestedevent Func<string, Task>?",
      "signature": "event Func<string, Task>?",
      "purpose": "Event raised when a quiz is requested (carries blockId), consumers can subscribe to handle requests.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1s8oq59:broadcastingestionprogressasync",
      "kind": "method",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "line": 49,
      "canonicalName": "BroadcastIngestionProgressAsync",
      "shortLabel": "BroadcastIngestionProgressAsync()",
      "longLabel": "BroadcastIngestionProgressAsync(string userId, string message, double progress, CancellationToken cancellationToken = default) -> Task",
      "signature": "(string userId, string message, double progress, CancellationToken cancellationToken = default) -> Task",
      "purpose": "Pushes ingestion status messages and numeric progress (0.0-1.0) to a user's active sessions via SignalR.",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1sa6em1:up",
      "kind": "method",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "line": 12,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Creates the QuizResults table with columns, primary key, foreign key to AspNetUsers (cascade) and an index on UserId.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1se6qsi:oninitialized",
      "kind": "method",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "line": 34,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void (override)",
      "signature": "() -> void (override)",
      "purpose": "Component lifecycle init: subscribes to navigation change events to refresh UI.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1sfi79b:logrequestingsummary",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 163,
      "canonicalName": "LogRequestingSummary",
      "shortLabel": "LogRequestingSummary()",
      "longLabel": "LogRequestingSummary(tenantId: string) -> void",
      "signature": "(tenantId: string) -> void",
      "purpose": "Source-generated logger stub for requesting summary and quiz.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1sgd810:down",
      "kind": "method",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "line": 43,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Drops the QuizResults table to rollback the migration.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1sn20bf:searchlibrarysemanticallyasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 76,
      "canonicalName": "SearchLibrarySemanticallyAsync",
      "shortLabel": "SearchLibrarySemanticallyAsync()",
      "longLabel": "SearchLibrarySemanticallyAsync(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken) -> Task<Result<List<SemanticSearchResultDto>>>",
      "signature": "(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken) -> Task<Result<List<SemanticSearchResultDto>>>",
      "purpose": "Performs semantic search against the library via backend endpoint and returns result list.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1sosafx:savecoverasync",
      "kind": "method",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "line": 22,
      "canonicalName": "SaveCoverAsync",
      "shortLabel": "SaveCoverAsync()",
      "longLabel": "SaveCoverAsync(data: byte[], fileName: string) -> Task<string?>",
      "signature": "(data: byte[], fileName: string) -> Task<string?>",
      "purpose": "Contract to save cover image binary data and return a relative path/URL, or null if no cover provided.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ste7vn:down",
      "kind": "method",
      "fileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "line": 44,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert schema changes applied in Up: remove FK and index on EbookId, drop EbookId column, re-add SourceId string column with constraints and recreate its index.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1sx9yhe:clearsearch",
      "kind": "method",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "line": 35,
      "canonicalName": "ClearSearch",
      "shortLabel": "ClearSearch()",
      "longLabel": "ClearSearch() -> void",
      "signature": "() -> void",
      "purpose": "Clears the local search input value.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1sxv1a4:getrelevantcontextasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 328,
      "canonicalName": "GetRelevantContextAsync",
      "shortLabel": "GetRelevantContextAsync()",
      "longLabel": "GetRelevantContextAsync(query: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<List<RelevantContext>>>",
      "signature": "(query: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<List<RelevantContext>>>",
      "purpose": "Generates embedding for query, searches Qdrant for top context points (tenant or global) and returns RelevantContext list",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1t48k4l:getuserprofilequeryhandler",
      "kind": "method",
      "fileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
      "line": 13,
      "canonicalName": "GetUserProfileQueryHandler",
      "shortLabel": "GetUserProfileQueryHandler()",
      "longLabel": "GetUserProfileQueryHandler(dbContextFactory: IDbContextFactory<AppDbContext>) -> GetUserProfileQueryHandler",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>) -> GetUserProfileQueryHandler",
      "purpose": "Constructor that captures the IDbContextFactory dependency.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1tcm0y0:extractparagraphs",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 145,
      "canonicalName": "ExtractParagraphs",
      "shortLabel": "ExtractParagraphs()",
      "longLabel": "ExtractParagraphs(html: string) -> List<string>",
      "signature": "(html: string) -> List<string>",
      "purpose": "Extracts paragraph-like blocks from HTML by selecting <p>, headings, lists, blockquote, pre, hr or splitting on breaks when none found.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1to2smv:initializegraphasync",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 89,
      "canonicalName": "InitializeGraphAsync",
      "shortLabel": "InitializeGraphAsync()",
      "longLabel": "InitializeGraphAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Import the client JS module, create a DotNet helper reference and mount the graph with initial data.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1u6514u:getprofileasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 130,
      "canonicalName": "GetProfileAsync",
      "shortLabel": "GetProfileAsync()",
      "longLabel": "GetProfileAsync() -> Task<Result<UserProfileDto>>",
      "signature": "() -> Task<Result<UserProfileDto>>",
      "purpose": "Public cached-profile accessor: returns cached profile, reuses an in-flight profile task if present, otherwise triggers background fetch and returns its result wrapped in Result.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1u9mlsa:ondragenter",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 146,
      "canonicalName": "OnDragEnter",
      "shortLabel": "OnDragEnter()",
      "longLabel": "OnDragEnter() -> void",
      "signature": "() -> void",
      "purpose": "Sets drag-over UI state when a drag enters the drop zone.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1uibcuk:program-top-level",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 29,
      "canonicalName": "Program (top-level)",
      "shortLabel": "Program (top-level)",
      "longLabel": "Program (top-level)() -> Task (top-level Program)",
      "signature": "() -> Task (top-level Program)",
      "purpose": "Configure DI, middleware, authentication/authorization, register endpoints and run the web host.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1uy10ke:clear",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 18,
      "canonicalName": "Clear",
      "shortLabel": "Clear()",
      "longLabel": "Clear() -> Task",
      "signature": "() -> Task",
      "purpose": "Asynchronously clear the current graph state (reset data, active node, loading) and notify subscribers.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1v0viho:oninitialized",
      "kind": "method",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "line": 110,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Initializes component state by mapping an incoming query error code to a user-friendly error message.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1v6tqnu:semanticknowledgecache-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 20,
      "canonicalName": "SemanticKnowledgeCache (DbSet property)",
      "shortLabel": "SemanticKnowledgeCache (DbSet property)",
      "longLabel": "SemanticKnowledgeCache (DbSet property)() -> DbSet<SemanticKnowledgeCache>",
      "signature": "() -> DbSet<SemanticKnowledgeCache>",
      "purpose": "Exposes the DbSet for SemanticKnowledgeCache entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1va0nah:prouserhandler",
      "kind": "method",
      "fileId": "file:1hyu1ez:prouserhandler-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
      "line": 15,
      "canonicalName": "ProUserHandler",
      "shortLabel": "ProUserHandler()",
      "longLabel": "ProUserHandler(dbContextFactory: IDbContextFactory<AppDbContext>) -> void",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>) -> void",
      "purpose": "Constructor: receives and stores a DbContext factory for use by the handler.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1vt6hc7:extractmetadataasync",
      "kind": "method",
      "fileId": "file:d3gg9l:epubmetadataextractor-cs",
      "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "line": 15,
      "canonicalName": "ExtractMetadataAsync",
      "shortLabel": "ExtractMetadataAsync()",
      "longLabel": "ExtractMetadataAsync(epubStream: Stream) -> Task<Result<LocalEpubMetadata>>",
      "signature": "(epubStream: Stream) -> Task<Result<LocalEpubMetadata>>",
      "purpose": "Opens an EPUB stream, reads title/author/description/cover (async), and returns a FluentResults success with LocalEpubMetadata or a failure wrapping the exception.",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubmetadataextractor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1vxob4r:variantcssclass",
      "kind": "method",
      "fileId": "file:184ajmn:nexustypography-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "line": 11,
      "canonicalName": "VariantCssClass",
      "shortLabel": "VariantCssClass()",
      "longLabel": "VariantCssClass() -> string",
      "signature": "() -> string",
      "purpose": "Computes the CSS class name based on the selected TypographyVariant enum value.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexustypography-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1w0f8ik:removeasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 60,
      "canonicalName": "RemoveAsync",
      "shortLabel": "RemoveAsync()",
      "longLabel": "RemoveAsync(string key) -> Task<Result>",
      "signature": "(string key) -> Task<Result>",
      "purpose": "Removes a key from MAUI Preferences and returns a Fluent Result indicating success or failure.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1w7mi8p:updateprogressasync",
      "kind": "method",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 70,
      "canonicalName": "UpdateProgressAsync",
      "shortLabel": "UpdateProgressAsync()",
      "longLabel": "UpdateProgressAsync(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
      "signature": "(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
      "purpose": "Debounces and sends reading progress updates to the server via the hub connection in a trailing-edge manner, avoiding duplicate sends for the same page.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1whrhth:onconnectedasync",
      "kind": "method",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "line": 28,
      "canonicalName": "OnConnectedAsync",
      "shortLabel": "OnConnectedAsync()",
      "longLabel": "OnConnectedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1wlwqp0:dispose",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 151,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Unsubscribes the node-selected handler from the interaction service to avoid leaks.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1wn8qlw:onconfiguring",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 13,
      "canonicalName": "OnConfiguring",
      "shortLabel": "OnConfiguring()",
      "longLabel": "OnConfiguring(optionsBuilder: DbContextOptionsBuilder) -> void",
      "signature": "(optionsBuilder: DbContextOptionsBuilder) -> void",
      "purpose": "Performs additional EF configuration; suppresses a pending-model-changes warning to avoid runtime exceptions in some environments.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1wohrks:buildtargetmodel",
      "kind": "method",
      "fileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "line": 19,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Populates the EF Core ModelBuilder with entity configurations, annotations, columns, indexes and relationships representing the target schema for this migration.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-designer-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1wp2z4z:savechangesasync",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 84,
      "canonicalName": "SaveChangesAsync",
      "shortLabel": "SaveChangesAsync()",
      "longLabel": "SaveChangesAsync(cancellationToken: CancellationToken) -> Task<int>",
      "signature": "(cancellationToken: CancellationToken) -> Task<int>",
      "purpose": "Repository save stub that throws to prevent EF operations in WASM.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1wrq6fu:savestringasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 7,
      "canonicalName": "SaveStringAsync",
      "shortLabel": "SaveStringAsync()",
      "longLabel": "SaveStringAsync(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Persist a non-secure string value under the given key asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1ww1s1:loginasync",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 10,
      "canonicalName": "LoginAsync",
      "shortLabel": "LoginAsync()",
      "longLabel": "LoginAsync(string email, string password, bool rememberMe = false) -> Task<Result>",
      "signature": "(string email, string password, bool rememberMe = false) -> Task<Result>",
      "purpose": "Authenticates a user with credentials and optional persistence (rememberMe) and returns a Result.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1wz04qu:clearcacheasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 136,
      "canonicalName": "ClearCacheAsync",
      "shortLabel": "ClearCacheAsync()",
      "longLabel": "ClearCacheAsync(cancellationToken: CancellationToken) -> Task<Result>",
      "signature": "(cancellationToken: CancellationToken) -> Task<Result>",
      "purpose": "Requests the server to clear the knowledge cache via DELETE /api/knowledge and logs simple console messages.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1x7fw9j:up",
      "kind": "method",
      "fileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "line": 12,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply schema changes: alter several columns (timestamps and the ContentHash length) to new types/constraints.",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1x9gjeq:processfullpageasync",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 76,
      "canonicalName": "ProcessFullPageAsync",
      "shortLabel": "ProcessFullPageAsync()",
      "longLabel": "ProcessFullPageAsync(fullContent: string, tenantId: string = \"global\") -> Task",
      "signature": "(fullContent: string, tenantId: string = \"global\") -> Task",
      "purpose": "Given full page content, clears and sets graph loading, requests graph data from knowledge service, updates the graph, invokes OnGraphUpdated event, and triggers success vibration; errors are logged.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:1xc3hml:tokenlimithandler",
      "kind": "method",
      "fileId": "file:38gozs:tokenlimithandler-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
      "line": 18,
      "canonicalName": "TokenLimitHandler",
      "shortLabel": "TokenLimitHandler()",
      "longLabel": "TokenLimitHandler(dbContextFactory: IDbContextFactory<AppDbContext>, userManager: UserManager<NexusUser>) -> void",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>, userManager: UserManager<NexusUser>) -> void",
      "purpose": "Ctor: receives and stores dependencies (DB context factory and UserManager).",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "infrastructure",
        "boundaryHints": [
          "middleware",
          "infrastructure",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimithandler-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1xjbcak:handleloadingchange",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 71,
      "canonicalName": "HandleLoadingChange",
      "shortLabel": "HandleLoadingChange()",
      "longLabel": "HandleLoadingChange(isLoading: bool) -> Task",
      "signature": "(isLoading: bool) -> Task",
      "purpose": "Trigger a UI re-render when the graph loading state changes.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1xlrbb1:savecoverasync-stream",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 74,
      "canonicalName": "SaveCoverAsync (Stream)",
      "shortLabel": "SaveCoverAsync (Stream)",
      "longLabel": "SaveCoverAsync (Stream)(data: Stream, fileName: string) -> Task<string?>",
      "signature": "(data: Stream, fileName: string) -> Task<string?>",
      "purpose": "Stub cover save that throws because file storage is unsupported in WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1xwytsy:getsecurestring",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 73,
      "canonicalName": "GetSecureString",
      "shortLabel": "GetSecureString()",
      "longLabel": "GetSecureString(key: string) -> Task<Result<string?>>",
      "signature": "(key: string) -> Task<Result<string?>>",
      "purpose": "Secure-named wrapper that delegates to GetStringAsync (no extra security applied).",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1xxkfgr:islightmode",
      "kind": "method",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "line": 5,
      "canonicalName": "IsLightMode",
      "shortLabel": "IsLightMode()",
      "longLabel": "IsLightMode() -> bool (property getter)",
      "signature": "() -> bool (property getter)",
      "purpose": "Exposes whether the UI is currently in light mode.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1xywi1n:down",
      "kind": "method",
      "fileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "line": 24,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Reverts the schema change by making KnowledgeUnits.EbookId non-nullable and setting a default Guid value.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1y3guy7:epubreaderservice",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 21,
      "canonicalName": "EpubReaderService",
      "shortLabel": "EpubReaderService()",
      "longLabel": "EpubReaderService(dbContextFactory: IDbContextFactory<AppDbContext>, logger: ILogger<EpubReaderService>) -> EpubReaderService",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>, logger: ILogger<EpubReaderService>) -> EpubReaderService",
      "purpose": "Constructor that injects the DB context factory and logger.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1yhcrn6:getrelevantcontextasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 12,
      "canonicalName": "GetRelevantContextAsync",
      "shortLabel": "GetRelevantContextAsync()",
      "longLabel": "GetRelevantContextAsync(query: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<List<RelevantContext>>>",
      "signature": "(query: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<List<RelevantContext>>>",
      "purpose": "Retrieve a list of relevant context snippets for a query within a tenant.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1yypduz:oninitialized",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 30,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Subscribe to UI-level events for quiz requests and focus-mode changes when the component is initialized.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:1z06px6:logsummaryerror",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 169,
      "canonicalName": "LogSummaryError",
      "shortLabel": "LogSummaryError()",
      "longLabel": "LogSummaryError(ex: Exception, tenantId: string) -> void",
      "signature": "(ex: Exception, tenantId: string) -> void",
      "purpose": "Source-generated logger stub for errors during summary/quiz retrieval.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:26njdb:clearcacheasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 16,
      "canonicalName": "ClearCacheAsync",
      "shortLabel": "ClearCacheAsync()",
      "longLabel": "ClearCacheAsync(cancellationToken: CancellationToken = default) -> Task<Result>",
      "signature": "(cancellationToken: CancellationToken = default) -> Task<Result>",
      "purpose": "Clear any service-level caches used by the knowledge subsystem.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:2bqrkc:markquizasseen",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 18,
      "canonicalName": "MarkQuizAsSeen",
      "shortLabel": "MarkQuizAsSeen()",
      "longLabel": "MarkQuizAsSeen() -> Task",
      "signature": "() -> Task",
      "purpose": "Async contract to mark the current quiz as seen/read by the user.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:2iyuvn:addauthor",
      "kind": "method",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "line": 19,
      "canonicalName": "AddAuthor",
      "shortLabel": "AddAuthor()",
      "longLabel": "AddAuthor(author: Author) -> void",
      "signature": "(author: Author) -> void",
      "purpose": "Stages a new Author in the repository (adds to the change tracker / in-memory unit-of-work) but does not persist.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 112,
      "canonicalName": "RequestSummaryAndQuizAsync",
      "shortLabel": "RequestSummaryAndQuizAsync()",
      "longLabel": "RequestSummaryAndQuizAsync(content: string, tenantId: string = \"global\") -> Task<Result<KnowledgePacket>>",
      "signature": "(content: string, tenantId: string = \"global\") -> Task<Result<KnowledgePacket>>",
      "purpose": "Orchestrates requesting a summary and quiz from the knowledge service, maps remote quiz DTOs into local QuizDto/QuizQuestionDto, sets quiz state, triggers vibration on success, and handles errors with logging and Result.Fail.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:3dd3av:callknowledgeapiasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 116,
      "canonicalName": "CallKnowledgeApiAsync",
      "shortLabel": "CallKnowledgeApiAsync()",
      "longLabel": "CallKnowledgeApiAsync(endpoint: string, text: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(endpoint: string, text: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Generic helper that POSTs text to a given endpoint and deserializes a KnowledgePacket, handling HTTP errors and exceptions.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:3jcuy:findauthorbynameasync",
      "kind": "method",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "line": 14,
      "canonicalName": "FindAuthorByNameAsync",
      "shortLabel": "FindAuthorByNameAsync()",
      "longLabel": "FindAuthorByNameAsync(name: string, cancellationToken: CancellationToken = default) -> Task<Author?>",
      "signature": "(name: string, cancellationToken: CancellationToken = default) -> Task<Author?>",
      "purpose": "Asynchronously finds an Author by name using a case-insensitive comparison.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:3uewqk:broadcastprogressasync",
      "kind": "method",
      "fileId": "file:441s21:isyncbroadcaster-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "line": 18,
      "canonicalName": "BroadcastProgressAsync",
      "shortLabel": "BroadcastProgressAsync()",
      "longLabel": "BroadcastProgressAsync(userId: string, pageId: string, timestamp: DateTime, excludedConnectionId: string? , cancellationToken: CancellationToken = default) -> Task",
      "signature": "(userId: string, pageId: string, timestamp: DateTime, excludedConnectionId: string? , cancellationToken: CancellationToken = default) -> Task",
      "purpose": "Declares an asynchronous broadcast of a user's reading progress to that user's devices, optionally excluding a specific connection.",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:3zfaqn:down",
      "kind": "method",
      "fileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "line": 50,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert the migration: remove IsUnlimitedTokens column and restore previous seeded SubscriptionPlans values.",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:439s8m:toggleasync",
      "kind": "method",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "line": 33,
      "canonicalName": "ToggleAsync",
      "shortLabel": "ToggleAsync()",
      "longLabel": "ToggleAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Toggles the in-memory focus-mode flag, notifies subscribers, and persists the new value to localStorage; ignores JS write errors.",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:46fkcr:disposeasync",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 246,
      "canonicalName": "DisposeAsync",
      "shortLabel": "DisposeAsync()",
      "longLabel": "DisposeAsync() -> ValueTask",
      "signature": "() -> ValueTask",
      "purpose": "Clears the large epub byte array so it can be garbage-collected and completes disposal.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:4dh69s:nativestorageservice",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 16,
      "canonicalName": "NativeStorageService",
      "shortLabel": "NativeStorageService()",
      "longLabel": "NativeStorageService(IJSRuntime jsRuntime) -> NativeStorageService",
      "signature": "(IJSRuntime jsRuntime) -> NativeStorageService",
      "purpose": "Constructs the service and stores the IJSRuntime for JS interop calls.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:4eprgx:knowledgeservice",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 38,
      "canonicalName": "KnowledgeService",
      "shortLabel": "KnowledgeService()",
      "longLabel": "KnowledgeService(IChatClient chatClient, IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator, IDbContextFactory<AppDbContext> dbContextFactory, ResiliencePipelineProvider<string> pipelineProvider, IOptions<AiSettings> settings, ILogger<KnowledgeService> logger, QdrantClient qdrantClient, IDriver neo4jDriver) -> KnowledgeService",
      "signature": "(IChatClient chatClient, IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator, IDbContextFactory<AppDbContext> dbContextFactory, ResiliencePipelineProvider<string> pipelineProvider, IOptions<AiSettings> settings, ILogger<KnowledgeService> logger, QdrantClient qdrantClient, IDriver neo4jDriver) -> KnowledgeService",
      "purpose": "Constructor wiring dependencies, configuring retry pipeline and tokenizer",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:4hij31:updatemetadataasync",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 15,
      "canonicalName": "UpdateMetadataAsync",
      "shortLabel": "UpdateMetadataAsync()",
      "longLabel": "UpdateMetadataAsync(currentIndex: int, totalChapters: int, title: string) -> Task",
      "signature": "(currentIndex: int, totalChapters: int, title: string) -> Task",
      "purpose": "Update chapter-related metadata (current index, total chapters, title) asynchronously.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:4nawp0:buildtargetmodel",
      "kind": "method",
      "fileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "line": 19,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model for the InitialPostgres migration (annotations, entities, properties, keys, indexes, relationships, and navigations).",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:4o7htd:setbook",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 25,
      "canonicalName": "SetBook",
      "shortLabel": "SetBook()",
      "longLabel": "SetBook(bookId: Guid, chapterIndex: int = 0) -> void",
      "signature": "(bookId: Guid, chapterIndex: int = 0) -> void",
      "purpose": "Set the active book context (ID and optional chapter) without performing browser routing.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:4skxop:render-component-markup",
      "kind": "method",
      "fileId": "file:1bp3my2:nexusbutton-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
      "line": 1,
      "canonicalName": "Render (component markup)",
      "shortLabel": "Render (component markup)",
      "longLabel": "Render (component markup)() -> RenderFragment",
      "signature": "() -> RenderFragment",
      "purpose": "Renders the button element, binds the click event to the passed-in EventCallback, applies Disabled and additional attributes, and renders ChildContent.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexusbutton"
      ],
      "technologyTags": [
        "component",
        "eventcallback",
        "attribute-forwarding",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusbutton-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:527vme:getmyebooksqueryhandler-ctor",
      "kind": "method",
      "fileId": "file:16axv5i:getmyebooksquery-cs",
      "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "line": 15,
      "canonicalName": "GetMyEbooksQueryHandler (ctor)",
      "shortLabel": "GetMyEbooksQueryHandler (ctor)",
      "longLabel": "GetMyEbooksQueryHandler (ctor)(dbContextFactory: IDbContextFactory<AppDbContext>) -> void",
      "signature": "(dbContextFactory: IDbContextFactory<AppDbContext>) -> void",
      "purpose": "Stores injected IDbContextFactory<AppDbContext> to a readonly field.",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:5hhpkw:setquiz",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 16,
      "canonicalName": "SetQuiz",
      "shortLabel": "SetQuiz()",
      "longLabel": "SetQuiz(blockId: string? , quiz: QuizDto?) -> Task",
      "signature": "(blockId: string? , quiz: QuizDto?) -> Task",
      "purpose": "Async contract to set or clear the current quiz and associated block id.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:5hqhux:togglepassword",
      "kind": "method",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "line": 155,
      "canonicalName": "TogglePassword",
      "shortLabel": "TogglePassword()",
      "longLabel": "TogglePassword() -> void",
      "signature": "() -> void",
      "purpose": "Toggles password visibility state used by the input field.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:5tn4c6:up",
      "kind": "method",
      "fileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "line": 12,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply schema changes: remove Ebooks.Author string, add Ebooks.AuthorId int, create Authors table, create index and foreign key.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:60f4ut:getdevicecontext",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 51,
      "canonicalName": "GetDeviceContext",
      "shortLabel": "GetDeviceContext()",
      "longLabel": "GetDeviceContext() -> Result<DeviceContext>",
      "signature": "() -> Result<DeviceContext>",
      "purpose": "Reads MAUI Device and Display information, maps idiom and orientation to application types, and returns a DeviceContext wrapped in a FluentResults Result.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:64smty:handlelogout",
      "kind": "method",
      "fileId": "file:1ain1yo:mainhublayout-razor",
      "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "line": 107,
      "canonicalName": "HandleLogout",
      "shortLabel": "HandleLogout()",
      "longLabel": "HandleLogout() -> Task",
      "signature": "() -> Task",
      "purpose": "Performs logout via the identity service and redirects the browser to a logout form route.",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "mainhublayout-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:66cucs:onnodeclicked",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 101,
      "canonicalName": "OnNodeClicked",
      "shortLabel": "OnNodeClicked()",
      "longLabel": "OnNodeClicked(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Called from JS when a node is clicked: notify the interaction service and forward the event to any parent via EventCallback.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:676x78:loadbooksasync",
      "kind": "method",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "line": 519,
      "canonicalName": "LoadBooksAsync",
      "shortLabel": "LoadBooksAsync()",
      "longLabel": "LoadBooksAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Loads the list of last-read books from the backend API and updates component state with loading/success/failure handling.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:68za1u:handlelogout",
      "kind": "method",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "line": 64,
      "canonicalName": "HandleLogout",
      "shortLabel": "HandleLogout()",
      "longLabel": "HandleLogout() -> Task",
      "signature": "() -> Task",
      "purpose": "Logs the user out via IdentityService and then navigates to the logout form.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:6bf66s:ondragleave",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 147,
      "canonicalName": "OnDragLeave",
      "shortLabel": "OnDragLeave()",
      "longLabel": "OnDragLeave() -> void",
      "signature": "() -> void",
      "purpose": "Clears drag-over UI state when a drag leaves the drop zone.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:6gn0zk:verifygroundednessasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 290,
      "canonicalName": "VerifyGroundednessAsync",
      "shortLabel": "VerifyGroundednessAsync()",
      "longLabel": "VerifyGroundednessAsync(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<GroundednessResult>>",
      "signature": "(answer: string, context: string, tenantId: string, cancellationToken: CancellationToken = default) -> Task<Result<GroundednessResult>>",
      "purpose": "Asks AI to score whether an answer is grounded in given context and returns structured groundedness result",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:6gridz:mainpage",
      "kind": "method",
      "fileId": "file:ua9rra:mainpage-xaml-cs",
      "path": "NexusReader.Maui/MainPage.xaml.cs",
      "line": 5,
      "canonicalName": "MainPage",
      "shortLabel": "MainPage()",
      "longLabel": "MainPage() -> void",
      "signature": "() -> void",
      "purpose": "Constructs the page and initializes the XAML view via InitializeComponent.",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-maui",
          "mainpage-xaml-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:6i8lek:getstringasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 23,
      "canonicalName": "GetStringAsync",
      "shortLabel": "GetStringAsync()",
      "longLabel": "GetStringAsync(string key) -> Task<Result<string?>>",
      "signature": "(string key) -> Task<Result<string?>>",
      "purpose": "Reads a string from MAUI Preferences for the given key and returns the value wrapped in a Fluent Result.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:6vyv4w:handlenodeselected",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 84,
      "canonicalName": "HandleNodeSelected",
      "shortLabel": "HandleNodeSelected()",
      "longLabel": "HandleNodeSelected(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Scroll the embedded ReaderCanvas to a particular node when a node selection event occurs.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:6z33me:navigatetobook",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 58,
      "canonicalName": "NavigateToBook",
      "shortLabel": "NavigateToBook()",
      "longLabel": "NavigateToBook(bookId: Guid) -> void",
      "signature": "(bookId: Guid) -> void",
      "purpose": "Sets the current ebook id, resets chapter index to 0 and triggers a route navigation to the reader page for the book.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:72bnlj:handlesubscriptioncancellation",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 434,
      "canonicalName": "HandleSubscriptionCancellation",
      "shortLabel": "HandleSubscriptionCancellation()",
      "longLabel": "HandleSubscriptionCancellation(email: string?, userManager: UserManager<NexusUser>, dbContext: AppDbContext) -> Task",
      "signature": "(email: string?, userManager: UserManager<NexusUser>, dbContext: AppDbContext) -> Task",
      "purpose": "Revert a user's subscription to free plan and reset AI token limit on subscription deletion.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:76zo3r:httpcontext-cascadingparameter-property",
      "kind": "method",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "line": 28,
      "canonicalName": "HttpContext (CascadingParameter property)",
      "shortLabel": "HttpContext (CascadingParameter property)",
      "longLabel": "HttpContext (CascadingParameter property)private HttpContext? HttpContext { get; set; }",
      "signature": "private HttpContext? HttpContext { get; set; }",
      "purpose": "Receives the current HttpContext as a cascading parameter so the component can access TraceIdentifier when Activity is not available.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:7atrx1:addinfrastructure",
      "kind": "method",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "line": 31,
      "canonicalName": "AddInfrastructure",
      "shortLabel": "AddInfrastructure()",
      "longLabel": "AddInfrastructure(this IServiceCollection services, IConfiguration configuration) -> IServiceCollection",
      "signature": "(this IServiceCollection services, IConfiguration configuration) -> IServiceCollection",
      "purpose": "Configures and registers persistence (Postgres/Sqlite), external clients (Qdrant, Neo4j), Hangfire, AI settings/pipelines/clients, application service implementations, and authorization into the DI container.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:7gn3l8:oninitialized",
      "kind": "method",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "line": 34,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitializedprotected override void OnInitialized() -> void",
      "signature": "protected override void OnInitialized() -> void",
      "purpose": "Initializes component state by resolving the request identifier from Activity.Current or falling back to HttpContext.TraceIdentifier.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:7ldigq:handle",
      "kind": "method",
      "fileId": "file:ayj9r2:iqueryhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "line": 6,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: TQuery, cancellationToken: CancellationToken) -> Task<Result<TResponse>>",
      "signature": "(request: TQuery, cancellationToken: CancellationToken) -> Task<Result<TResponse>>",
      "purpose": "Implied contract method for handling a query and returning a Result-wrapped TResponse asynchronously (inherited from MediatR IRequestHandler).",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:7pcmld:getsummaryandquizasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 11,
      "canonicalName": "GetSummaryAndQuizAsync",
      "shortLabel": "GetSummaryAndQuizAsync()",
      "longLabel": "GetSummaryAndQuizAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Create a summary and quiz (assessment) artifact for given text within tenant/ebook scope.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:7u4uld:get-user-profile-get-identity-profile",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 548,
      "canonicalName": "Get User Profile (GET /identity/profile)",
      "shortLabel": "Get User Profile (GET /identity/profile)",
      "longLabel": "Get User Profile (GET /identity/profile)(ClaimsPrincipal user, IMediator mediator) -> IResult",
      "signature": "(ClaimsPrincipal user, IMediator mediator) -> IResult",
      "purpose": "Return the current user's profile by dispatching GetUserProfileQuery via mediator.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:85035t:countwords",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 175,
      "canonicalName": "CountWords",
      "shortLabel": "CountWords()",
      "longLabel": "CountWords(text: string) -> int",
      "signature": "(text: string) -> int",
      "purpose": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:88y0cc:ongraphupdated",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 11,
      "canonicalName": "OnGraphUpdated",
      "shortLabel": "OnGraphUpdated()",
      "longLabel": "OnGraphUpdatedevent Func<Task>? -> void",
      "signature": "event Func<Task>? -> void",
      "purpose": "Event raised when the graph data has been updated.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8fzkrx:account-login-form-post-account-login-form",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 520,
      "canonicalName": "Account Login Form (POST /account/login-form)",
      "shortLabel": "Account Login Form (POST /account/login-form)",
      "longLabel": "Account Login Form (POST /account/login-form)([FromForm] string email, [FromForm] string password, [FromForm] bool rememberMe, [FromForm] string? returnUrl, SignInManager<NexusUser> signInManager, ILogger<Program> logger) -> IResult",
      "signature": "([FromForm] string email, [FromForm] string password, [FromForm] bool rememberMe, [FromForm] string? returnUrl, SignInManager<NexusUser> signInManager, ILogger<Program> logger) -> IResult",
      "purpose": "Authenticate user via form POST using SignInManager.PasswordSignInAsync and redirect on success or failure.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:8ggznb:identityservice",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 23,
      "canonicalName": "IdentityService",
      "shortLabel": "IdentityService()",
      "longLabel": "IdentityService(HttpClient httpClient, INativeStorageService storageService, AuthenticationStateProvider? authStateProvider = null) -> IdentityService",
      "signature": "(HttpClient httpClient, INativeStorageService storageService, AuthenticationStateProvider? authStateProvider = null) -> IdentityService",
      "purpose": "Constructs the identity service wiring HttpClient, native storage and optional auth state provider.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8gksn2:openbook",
      "kind": "method",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "line": 549,
      "canonicalName": "OpenBook",
      "shortLabel": "OpenBook()",
      "longLabel": "OpenBook(bookId: Guid) -> void",
      "signature": "(bookId: Guid) -> void",
      "purpose": "Navigate to the reader view for the selected book using the injected navigation service.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 367,
      "canonicalName": "StripeWebhook (POST /api/StripeWebhook)",
      "shortLabel": "StripeWebhook (POST /api/StripeWebhook)",
      "longLabel": "StripeWebhook (POST /api/StripeWebhook)(HttpContext context, UserManager<NexusUser> userManager, IConfiguration configuration, IDbContextFactory<AppDbContext> dbContextFactory) -> IResult",
      "signature": "(HttpContext context, UserManager<NexusUser> userManager, IConfiguration configuration, IDbContextFactory<AppDbContext> dbContextFactory) -> IResult",
      "purpose": "Receive Stripe webhook, validate signature, dispatch handling based on event type and update user subscription state.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8lkc9b:saveboolasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 9,
      "canonicalName": "SaveBoolAsync",
      "shortLabel": "SaveBoolAsync()",
      "longLabel": "SaveBoolAsync(key: string, value: bool) -> Task<Result>",
      "signature": "(key: string, value: bool) -> Task<Result>",
      "purpose": "Persist a boolean value under the given key asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8m5lws:panelstyle",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 69,
      "canonicalName": "PanelStyle",
      "shortLabel": "PanelStyle()",
      "longLabel": "PanelStyle() -> string",
      "signature": "() -> string",
      "purpose": "Builds inline CSS positioning string for the panel using Coordinates and PositionBelow; returns empty string when Coordinates is null.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8mq94d:up",
      "kind": "method",
      "fileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "line": 11,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Applies the migration: adds a non-nullable boolean column 'IsReadyForReading' with default false to the 'Ebooks' table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8psub5:requestquiz",
      "kind": "method",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "line": 15,
      "canonicalName": "RequestQuiz",
      "shortLabel": "RequestQuiz()",
      "longLabel": "RequestQuiz(blockId: string) -> Task",
      "signature": "(blockId: string) -> Task",
      "purpose": "Sets the current quiz block id and notifies subscribers that a quiz was requested.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:8ug383:getstatusclass",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 81,
      "canonicalName": "GetStatusClass",
      "shortLabel": "GetStatusClass()",
      "longLabel": "GetStatusClass() -> string",
      "signature": "() -> string",
      "purpose": "Maps numeric groundedness score to a CSS status class with thresholds for high/medium/low.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:90e1ug:setloading",
      "kind": "method",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "line": 30,
      "canonicalName": "SetLoading",
      "shortLabel": "SetLoading()",
      "longLabel": "SetLoading(isLoading: bool) -> Task",
      "signature": "(isLoading: bool) -> Task",
      "purpose": "Update the IsLoading flag and notify subscribers about loading state changes.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:91tjy5:handlekeyup",
      "kind": "method",
      "fileId": "file:1kjntt:intelligence-razor",
      "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "line": 400,
      "canonicalName": "HandleKeyUp",
      "shortLabel": "HandleKeyUp()",
      "longLabel": "HandleKeyUp(e: KeyboardEventArgs) -> Task",
      "signature": "(e: KeyboardEventArgs) -> Task",
      "purpose": "Handles key up events on the input; triggers AskQuestionAsync when Enter is pressed and input is non-empty and not loading.",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "intelligence-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:965937:getknowledgeinternalasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 81,
      "canonicalName": "GetKnowledgeInternalAsync",
      "shortLabel": "GetKnowledgeInternalAsync()",
      "longLabel": "GetKnowledgeInternalAsync(text: string, tenantId: string, systemPrompt: string, traceType: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, systemPrompt: string, traceType: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Core flow: validate input, check cache, deduplicate concurrent requests, and invoke AI + caching if needed",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:98t2qk:down",
      "kind": "method",
      "fileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "line": 21,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert schema change: remove the 'Description' column from the 'Ebooks' table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:99k8q7:disposeasync",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 100,
      "canonicalName": "DisposeAsync",
      "shortLabel": "DisposeAsync()",
      "longLabel": "DisposeAsync() -> ValueTask",
      "signature": "() -> ValueTask",
      "purpose": "Unsubscribe event handlers, detach JS keyboard listener if present, dispose JS interop objects and DotNetObjectReference when the component is disposed.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:9hjjot:createdbcontext",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 61,
      "canonicalName": "CreateDbContext",
      "shortLabel": "CreateDbContext()",
      "longLabel": "CreateDbContext() -> AppDbContext",
      "signature": "() -> AppDbContext",
      "purpose": "IDbContextFactory implementation that prevents use of EF DbContext in the WASM client by always throwing.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:9ls8js:createaitrigger",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 181,
      "canonicalName": "CreateAiTrigger",
      "shortLabel": "CreateAiTrigger()",
      "longLabel": "CreateAiTrigger(id: string) -> AiActionTriggerBlock",
      "signature": "(id: string) -> AiActionTriggerBlock",
      "purpose": "Factory that creates an AiActionTriggerBlock with localized prompt and action labels.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:9q9eda:dispose",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 63,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Lifecycle cleanup: unsubscribes from the QuizService update event.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:9ujebp:fetchandstreamasync",
      "kind": "method",
      "fileId": "file:83c16m:aiassistantbubble-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
      "line": 82,
      "canonicalName": "FetchAndStreamAsync",
      "shortLabel": "FetchAndStreamAsync()",
      "longLabel": "FetchAndStreamAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Orchestrates requesting a summary/quiz from the KnowledgeCoordinator, handles fallbacks, streams the summary word-by-word to the UI, and manages cancellation, errors, and state flags.",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "aiassistantbubble-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:9ytc6k:saveebookasync-byte",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 74,
      "canonicalName": "SaveEbookAsync (byte[])",
      "shortLabel": "SaveEbookAsync (byte[])",
      "longLabel": "SaveEbookAsync (byte[])(data: byte[], fileName: string) -> Task<string>",
      "signature": "(data: byte[], fileName: string) -> Task<string>",
      "purpose": "Stub storage operation that throws because file storage is unsupported in WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:aocpxz:isfocusmodeactive",
      "kind": "method",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "line": 5,
      "canonicalName": "IsFocusModeActive",
      "shortLabel": "IsFocusModeActive()",
      "longLabel": "IsFocusModeActiveget -> bool",
      "signature": "get -> bool",
      "purpose": "Property getter that indicates whether focus mode is currently active.",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:arton1:logsummarywarning",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 166,
      "canonicalName": "LogSummaryWarning",
      "shortLabel": "LogSummaryWarning()",
      "longLabel": "LogSummaryWarning(tenantId: string) -> void",
      "signature": "(tenantId: string) -> void",
      "purpose": "Source-generated logger stub for warnings when summary/quiz retrieval fails.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:axmshz:bookstorageservice",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 14,
      "canonicalName": "BookStorageService",
      "shortLabel": "BookStorageService()",
      "longLabel": "BookStorageService(environment: IWebHostEnvironment) -> BookStorageService",
      "signature": "(environment: IWebHostEnvironment) -> BookStorageService",
      "purpose": "Ctor; captures IWebHostEnvironment for resolving web root paths.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:b27zpe:updategraph",
      "kind": "method",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "line": 15,
      "canonicalName": "UpdateGraph",
      "shortLabel": "UpdateGraph()",
      "longLabel": "UpdateGraph(newData: GraphDataDto) -> Task",
      "signature": "(newData: GraphDataDto) -> Task",
      "purpose": "Replace CurrentGraphData with new graph data, clear loading flag, and notify subscribers that loading changed and graph updated.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:b38ztv:buildtargetmodel",
      "kind": "method",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Builds the EF Core model snapshot for this migration: adds annotations, DB extensions, defines all entity mappings (tables, columns, keys, indices), relationships, navigations, and seed data.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:b6asoe:loginasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 46,
      "canonicalName": "LoginAsync",
      "shortLabel": "LoginAsync()",
      "longLabel": "LoginAsync(string email, string password, bool rememberMe = false) -> Task<Result>",
      "signature": "(string email, string password, bool rememberMe = false) -> Task<Result>",
      "purpose": "Performs login against backend, stores tokens, invalidates auth state, fetches profile and persists profile metadata; returns success/failure.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:b6ndo3:clearasync",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 145,
      "canonicalName": "ClearAsync",
      "shortLabel": "ClearAsync()",
      "longLabel": "ClearAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Clears the graph service state and clears the quiz state.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:b9ya71:navigatetolibrary-inline-lambda",
      "kind": "method",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "line": 62,
      "canonicalName": "NavigateToLibrary (inline lambda)",
      "shortLabel": "NavigateToLibrary (inline lambda)",
      "longLabel": "NavigateToLibrary (inline lambda)() -> void (lambda)",
      "signature": "() -> void (lambda)",
      "purpose": "Inline click handler that navigates to the /library route.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:bamm0e:getepubcontentasync",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 30,
      "canonicalName": "GetEpubContentAsync",
      "shortLabel": "GetEpubContentAsync()",
      "longLabel": "GetEpubContentAsync(ebookId: Guid, chapterIndex: int, userId: string?) -> Task<Result<ReaderPageViewModel>>",
      "signature": "(ebookId: Guid, chapterIndex: int, userId: string?) -> Task<Result<ReaderPageViewModel>>",
      "purpose": "Main runtime method: resolves the ebook file via DB, parses an EPUB, extracts chapter text into content blocks, inserts AI triggers based on word threshold, and returns a ReaderPageViewModel or a failure result.",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:bktx49:onafterrenderasync",
      "kind": "method",
      "fileId": "file:1uhcs2l:library-razor",
      "path": "NexusReader.UI.Shared/Pages/Library.razor",
      "line": 511,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "Lifecycle override that triggers initial load of books on first render.",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "library-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:boip8u:render-razor-markup",
      "kind": "method",
      "fileId": "file:qvoxmq:app-razor",
      "path": "NexusReader.Web/Components/App.razor",
      "line": 1,
      "canonicalName": "Render (razor markup)",
      "shortLabel": "Render (razor markup)",
      "longLabel": "Render (razor markup)() -> RenderFragment (markup)",
      "signature": "() -> RenderFragment (markup)",
      "purpose": "Renders the app HTML shell, includes CSS, HeadOutlet, top-level routes and modal components, and references scripts required to start the Blazor client.",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "app-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:c84ulg:askquestionasync",
      "kind": "method",
      "fileId": "file:1kjntt:intelligence-razor",
      "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
      "line": 408,
      "canonicalName": "AskQuestionAsync",
      "shortLabel": "AskQuestionAsync()",
      "longLabel": "AskQuestionAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Orchestrates asking the knowledge service a question: validates input, sets loading state, optionally scopes by book, calls IKnowledgeService, handles success/error responses and exceptions, and clears loading state.",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "intelligence-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:cdxwj:up",
      "kind": "method",
      "fileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "line": 12,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply schema changes: remove SourceId column and index from KnowledgeUnits, add non-nullable EbookId Guid column with default, create index on EbookId, and add FK to Ebooks with cascade delete.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:cfsfui:ebooks-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 23,
      "canonicalName": "Ebooks (DbSet property)",
      "shortLabel": "Ebooks (DbSet property)",
      "longLabel": "Ebooks (DbSet property)() -> DbSet<Ebook>",
      "signature": "() -> DbSet<Ebook>",
      "purpose": "Exposes the DbSet for Ebook entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:cgrv35:selectoptionasync",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 68,
      "canonicalName": "SelectOptionAsync",
      "shortLabel": "SelectOptionAsync()",
      "longLabel": "SelectOptionAsync(QuizQuestionDto question, int index) -> Task",
      "signature": "(QuizQuestionDto question, int index) -> Task",
      "purpose": "Handles user's option selection: prevents double submissions, triggers haptic feedback, submits an answer command via Mediator, updates local state, and triggers success/error vibration and UI refresh.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:cho50r:activenodeid",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 8,
      "canonicalName": "ActiveNodeId",
      "shortLabel": "ActiveNodeId()",
      "longLabel": "ActiveNodeId() -> string?",
      "signature": "() -> string?",
      "purpose": "Read-only property exposing the currently active/selected node id.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:cuqhj0:getknowledgemapasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 10,
      "canonicalName": "GetKnowledgeMapAsync",
      "shortLabel": "GetKnowledgeMapAsync()",
      "longLabel": "GetKnowledgeMapAsync(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid? = null, cancellationToken: CancellationToken = default) -> Task<Result<KnowledgePacket>>",
      "purpose": "Generate a knowledge map (likely node/edge representation) for the supplied text and tenant.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:cusclc:subscriptionplans-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 25,
      "canonicalName": "SubscriptionPlans (DbSet property)",
      "shortLabel": "SubscriptionPlans (DbSet property)",
      "longLabel": "SubscriptionPlans (DbSet property)() -> DbSet<SubscriptionPlan>",
      "signature": "() -> DbSet<SubscriptionPlan>",
      "purpose": "Exposes the DbSet for SubscriptionPlan entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:cylg7j:render-component-markup",
      "kind": "method",
      "fileId": "file:1niza9w:globalintelligencepanel-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "line": 5,
      "canonicalName": "Render (component markup)",
      "shortLabel": "Render (component markup)",
      "longLabel": "Render (component markup)() -> void (renders component UI)",
      "signature": "() -> void (renders component UI)",
      "purpose": "Renders the Global Intelligence panel and conditionally displays loading, search results (with a loop), or an empty state.",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "globalintelligencepanel-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:d54w6c:reset",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 135,
      "canonicalName": "Reset",
      "shortLabel": "Reset()",
      "longLabel": "Reset() -> void",
      "signature": "() -> void",
      "purpose": "Clears parsing/verification/ingestion flags and temporary data (metadata, errors, drag state, epub bytes).",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:d5t49u:onstateinvalidated",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 8,
      "canonicalName": "OnStateInvalidated",
      "shortLabel": "OnStateInvalidated()",
      "longLabel": "OnStateInvalidatedevent Func<Task>? OnStateInvalidated -> event",
      "signature": "event Func<Task>? OnStateInvalidated -> event",
      "purpose": "Event triggered when identity/authentication state becomes invalid and consumers should react (e.g., clear state or re-authenticate).",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:dw3sqb:toggletheme",
      "kind": "method",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "line": 7,
      "canonicalName": "ToggleTheme",
      "shortLabel": "ToggleTheme()",
      "longLabel": "ToggleTheme() -> Task",
      "signature": "() -> Task",
      "purpose": "Toggles the current theme between light and dark modes (declaration only).",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:dz8xj4:currentquiz",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 8,
      "canonicalName": "CurrentQuiz",
      "shortLabel": "CurrentQuiz()",
      "longLabel": "CurrentQuiz() -> QuizDto?",
      "signature": "() -> QuizDto?",
      "purpose": "Read-only property exposing the current Quiz DTO.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:dzihxd:onfocusmodechanged",
      "kind": "method",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "line": 6,
      "canonicalName": "OnFocusModeChanged",
      "shortLabel": "OnFocusModeChanged()",
      "longLabel": "OnFocusModeChangedevent Func<Task>? -> void",
      "signature": "event Func<Task>? -> void",
      "purpose": "Event raised when focus mode changes, subscribers receive an asynchronous notification.",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:e05nak:up",
      "kind": "method",
      "fileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "line": 11,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Apply schema change: add a nullable text 'Description' column to the 'Ebooks' table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:e4n4cn:buildtargetmodel",
      "kind": "method",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model for this migration: configures entities, properties, constraints, relationships, annotations and seed data.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:e8akyb:handle",
      "kind": "method",
      "fileId": "file:hc4koi:submitanswercommandhandler-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
      "line": 16,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: SubmitAnswerCommand, cancellationToken: CancellationToken) -> Task<Result>",
      "signature": "(request: SubmitAnswerCommand, cancellationToken: CancellationToken) -> Task<Result>",
      "purpose": "Checks the submitted answer; vibrates the device and returns success if correct, otherwise returns a failure Result.",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:eacfb6:buildtargetmodel",
      "kind": "method",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "line": 19,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Constructs the EF Core model for the migration: declares entities, columns, keys, indexes, relationships, and Npgsql identity config.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ecn87d:onscrolltoblockrequested",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 6,
      "canonicalName": "OnScrollToBlockRequested",
      "shortLabel": "OnScrollToBlockRequested()",
      "longLabel": "OnScrollToBlockRequestedevent Func<string, Task>? -> void (event declaration)",
      "signature": "event Func<string, Task>? -> void (event declaration)",
      "purpose": "Event fired to request scrolling to a specific blockId.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ecwzho:setbook",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 65,
      "canonicalName": "SetBook",
      "shortLabel": "SetBook()",
      "longLabel": "SetBook(bookId: Guid, chapterIndex: int = 0) -> void",
      "signature": "(bookId: Guid, chapterIndex: int = 0) -> void",
      "purpose": "Sets the current ebook id and optionally the current chapter index without triggering navigation or notifications.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ef0iff:saveboolasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 35,
      "canonicalName": "SaveBoolAsync",
      "shortLabel": "SaveBoolAsync()",
      "longLabel": "SaveBoolAsync(string key, bool value) -> Task<Result>",
      "signature": "(string key, bool value) -> Task<Result>",
      "purpose": "Saves a boolean value to MAUI Preferences and returns success/failure as a Fluent Result.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ekp9ov:clear",
      "kind": "method",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "line": 36,
      "canonicalName": "Clear",
      "shortLabel": "Clear()",
      "longLabel": "Clear() -> Task",
      "signature": "() -> Task",
      "purpose": "Clear the stored graph data, active node, reset loading flag, and notify graph-updated subscribers.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:en9pi8:getboolasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 44,
      "canonicalName": "GetBoolAsync",
      "shortLabel": "GetBoolAsync()",
      "longLabel": "GetBoolAsync(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "signature": "(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "purpose": "Reads a stored string for the key, attempts to parse it as bool, and returns the parsed value or a default wrapped in a Result; catches errors and returns the default.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:eni3nx:identity-login-get-identity-login-google",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 453,
      "canonicalName": "Identity Login (GET /identity/login/google)",
      "shortLabel": "Identity Login (GET /identity/login/google)",
      "longLabel": "Identity Login (GET /identity/login/google)(string? returnUrl) -> IResult",
      "signature": "(string? returnUrl) -> IResult",
      "purpose": "Initiate Google external login by issuing an authentication challenge with redirect metadata.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:eown21:vibrateerrorasync",
      "kind": "method",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "line": 17,
      "canonicalName": "VibrateErrorAsync",
      "shortLabel": "VibrateErrorAsync()",
      "longLabel": "VibrateErrorAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Convenience method to trigger a longer error vibration (300ms) by delegating to VibrateAsync.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ero6bp:loadchapterasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 212,
      "canonicalName": "LoadChapterAsync",
      "shortLabel": "LoadChapterAsync()",
      "longLabel": "LoadChapterAsync(index: int) -> Task",
      "signature": "(index: int) -> Task",
      "purpose": "Loads a reader page (chapter) via Mediator, updates view model and navigation metadata, handles errors and UI loading state, and triggers coordinator/process sync when interactive.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:etczkb:onparameterssetasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 83,
      "canonicalName": "OnParametersSetAsync",
      "shortLabel": "OnParametersSetAsync()",
      "longLabel": "OnParametersSetAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Triggered when component parameters are set; loads the chapter for the current navigation index.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ev8hjj:vibratesuccessasync",
      "kind": "method",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "line": 16,
      "canonicalName": "VibrateSuccessAsync",
      "shortLabel": "VibrateSuccessAsync()",
      "longLabel": "VibrateSuccessAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Convenience method to trigger a short success vibration (100ms) by delegating to VibrateAsync.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ex6nhz:appdbcontext",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 9,
      "canonicalName": "AppDbContext",
      "shortLabel": "AppDbContext()",
      "longLabel": "AppDbContext(options: DbContextOptions<AppDbContext>) -> AppDbContext",
      "signature": "(options: DbContextOptions<AppDbContext>) -> AppDbContext",
      "purpose": "Constructs the EF DbContext with provided options.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:f76by4:askquestionasync",
      "kind": "method",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 15,
      "canonicalName": "AskQuestionAsync",
      "shortLabel": "AskQuestionAsync()",
      "longLabel": "AskQuestionAsync(question: string, tenantId: string, ebookId: Guid? = null, limit: int = 5, cancellationToken: CancellationToken = default) -> Task<Result<GroundedResponseDto>>",
      "signature": "(question: string, tenantId: string, ebookId: Guid? = null, limit: int = 5, cancellationToken: CancellationToken = default) -> Task<Result<GroundedResponseDto>>",
      "purpose": "Ask a question against tenant (and optional ebook) data and return a grounded response, limited by passed limit.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:fmgrt8:getdevicecontext",
      "kind": "method",
      "fileId": "file:qt46oq:webplatformservice-cs",
      "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
      "line": 32,
      "canonicalName": "GetDeviceContext",
      "shortLabel": "GetDeviceContext()",
      "longLabel": "GetDeviceContext() -> Result<DeviceContext>",
      "signature": "() -> Result<DeviceContext>",
      "purpose": "Provides a DeviceContext describing the running platform (hardcoded for browser/web) wrapped in a FluentResults Result.",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "webplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:fpl7t6:initializeasync",
      "kind": "method",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "line": 7,
      "canonicalName": "InitializeAsync",
      "shortLabel": "InitializeAsync()",
      "longLabel": "InitializeAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Asynchronously initializes the focus mode service (e.g., load persisted state or perform startup tasks).",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:fu1sr5:oninitialized",
      "kind": "method",
      "fileId": "file:1awldsb:error-razor",
      "path": "NexusReader.Web/Components/Error.razor",
      "line": 5,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Component lifecycle hook called during initialization; currently contains a placeholder for logging the exception.",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:fxyqm0:resolvepath",
      "kind": "method",
      "fileId": "file:q4k94a:epubreaderservice-cs",
      "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "line": 124,
      "canonicalName": "ResolvePath",
      "shortLabel": "ResolvePath()",
      "longLabel": "ResolvePath(relativePath: string) -> string?",
      "signature": "(relativePath: string) -> string?",
      "purpose": "Resolves a web-relative storage path to an absolute filesystem path by searching up the app base directory for wwwroot (and a development src path).",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubreaderservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 261,
      "canonicalName": "Knowledge API group mappings",
      "shortLabel": "Knowledge API group mappings()",
      "longLabel": "Knowledge API group mappings() -> void (registers multiple endpoints)",
      "signature": "() -> void (registers multiple endpoints)",
      "purpose": "Register knowledge-related endpoints under /api/knowledge with token-based authorization disabled antiforgery and policy 'HasAvailableTokens'.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:gfuk2l:onparametersset",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 33,
      "canonicalName": "OnParametersSet",
      "shortLabel": "OnParametersSet()",
      "longLabel": "OnParametersSet() -> void",
      "signature": "() -> void",
      "purpose": "Resets cached result when Answer or Context parameters change.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ggo2op:ingestebook-post-api-library-ingest",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 330,
      "canonicalName": "IngestEbook (POST /api/library/ingest)",
      "shortLabel": "IngestEbook (POST /api/library/ingest)",
      "longLabel": "IngestEbook (POST /api/library/ingest)([FromBody] IngestEbookRequest request, ClaimsPrincipal user, IMediator mediator) -> IResult",
      "signature": "([FromBody] IngestEbookRequest request, ClaimsPrincipal user, IMediator mediator) -> IResult",
      "purpose": "Accept base64 EPUB and optional cover, construct IngestEbookCommand and send via MediatR to ingest an ebook for the authenticated user.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:gisz9i:sethydrating",
      "kind": "method",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "line": 30,
      "canonicalName": "SetHydrating",
      "shortLabel": "SetHydrating()",
      "longLabel": "SetHydrating(hydrating: bool) -> Task",
      "signature": "(hydrating: bool) -> Task",
      "purpose": "Sets the IsHydrating flag and notifies subscribers of the update.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:grwwrg:savechangesasync",
      "kind": "method",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "line": 29,
      "canonicalName": "SaveChangesAsync",
      "shortLabel": "SaveChangesAsync()",
      "longLabel": "SaveChangesAsync(cancellationToken: CancellationToken = default) -> Task<int>",
      "signature": "(cancellationToken: CancellationToken = default) -> Task<int>",
      "purpose": "Persists all staged changes to the underlying store and returns the number of affected entries.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:gy7qh:handle",
      "kind": "method",
      "fileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "line": 23,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: IngestEbookCommand, cancellationToken: CancellationToken) -> Task<Result<Guid>>",
      "signature": "(request: IngestEbookCommand, cancellationToken: CancellationToken) -> Task<Result<Guid>>",
      "purpose": "Orchestrates ebook ingestion: saves epub/cover to storage, resolves or creates author, constructs Ebook entity, persists it and returns the created Ebook Id or failure.",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:h3fyyz:savesecurestring",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 73,
      "canonicalName": "SaveSecureString",
      "shortLabel": "SaveSecureString()",
      "longLabel": "SaveSecureString(string key, string value) -> Task<Result>",
      "signature": "(string key, string value) -> Task<Result>",
      "purpose": "Asynchronously saves a string to MAUI SecureStorage and returns a Fluent Result for success/failure.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:h9z30t:handlesearch",
      "kind": "method",
      "fileId": "file:1niza9w:globalintelligencepanel-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
      "line": 56,
      "canonicalName": "HandleSearch",
      "shortLabel": "HandleSearch()",
      "longLabel": "HandleSearch(query: string) -> Task",
      "signature": "(query: string) -> Task",
      "purpose": "Invoked when the child search box triggers a search; marks that a search occurred and forwards the query via OnPerformSearch EventCallback.",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "globalintelligencepanel-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:hh1uha:createmauiapp",
      "kind": "method",
      "fileId": "file:1uay25w:mauiprogram-cs",
      "path": "NexusReader.Maui/MauiProgram.cs",
      "line": 12,
      "canonicalName": "CreateMauiApp",
      "shortLabel": "CreateMauiApp()",
      "longLabel": "CreateMauiApp() -> MauiApp",
      "signature": "() -> MauiApp",
      "purpose": "Create and configure the MAUI app builder, register application and platform services, configure debugging tools in DEBUG, and build/return the app; catches startup exceptions and rethrows after logging.",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "unknown",
        "boundaryHints": [
          "program-entry",
          "unknown",
          "nexusreader-maui",
          "mauiprogram-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:hj2kxb:saveboolasync",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 42,
      "canonicalName": "SaveBoolAsync",
      "shortLabel": "SaveBoolAsync()",
      "longLabel": "SaveBoolAsync(key: string, value: bool) -> Task<Result>",
      "signature": "(key: string, value: bool) -> Task<Result>",
      "purpose": "Convenience wrapper that saves a boolean by converting it to string and delegating to SaveStringAsync.",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:hkgxib:render-markup",
      "kind": "method",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "line": 1,
      "canonicalName": "Render (markup)",
      "shortLabel": "Render (markup)",
      "longLabel": "Render (markup)() -> RenderFragment",
      "signature": "() -> RenderFragment",
      "purpose": "Renders the profile UI, shows loading state when _profile is null, binds profile fields into the UI, and wires button click handlers.",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:hwn6lg:extractmetadataasync",
      "kind": "method",
      "fileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
      "line": 9,
      "canonicalName": "ExtractMetadataAsync",
      "shortLabel": "ExtractMetadataAsync()",
      "longLabel": "ExtractMetadataAsync(epubStream: Stream) -> Task<Result<LocalEpubMetadata>>",
      "signature": "(epubStream: Stream) -> Task<Result<LocalEpubMetadata>>",
      "purpose": "Asynchronously extracts metadata from the provided EPUB stream and returns it wrapped in a FluentResults Result.",
      "domainTags": [
        "epub",
        "metadata",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-inversion"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubmetadataextractor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:icuddu:serveridentityservice",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 25,
      "canonicalName": "ServerIdentityService",
      "shortLabel": "ServerIdentityService()",
      "longLabel": "ServerIdentityService(userManager: UserManager<NexusUser>, signInManager: SignInManager<NexusUser>, httpContextAccessor: IHttpContextAccessor, mediator: IMediator, storageService: INativeStorageService) -> ServerIdentityService",
      "signature": "(userManager: UserManager<NexusUser>, signInManager: SignInManager<NexusUser>, httpContextAccessor: IHttpContextAccessor, mediator: IMediator, storageService: INativeStorageService) -> ServerIdentityService",
      "purpose": "Constructor - wires up UserManager, SignInManager, HttpContextAccessor, Mediator and native storage dependency fields.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ij0vl0:addebook",
      "kind": "method",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "line": 24,
      "canonicalName": "AddEbook",
      "shortLabel": "AddEbook()",
      "longLabel": "AddEbook(ebook: Ebook) -> void",
      "signature": "(ebook: Ebook) -> void",
      "purpose": "Stages a new Ebook in the repository (adds to the change tracker / in-memory unit-of-work) but does not persist.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ilkln5:onparametersset",
      "kind": "method",
      "fileId": "file:1ez5kuw:selectionaipanel-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
      "line": 62,
      "canonicalName": "OnParametersSet",
      "shortLabel": "OnParametersSet()",
      "longLabel": "OnParametersSet() -> void",
      "signature": "() -> void",
      "purpose": "Lifecycle method called when component parameters change; logs state and resets the cached KnowledgePacket.",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "selectionaipanel-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:io0xiq:askquestionasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 549,
      "canonicalName": "AskQuestionAsync",
      "shortLabel": "AskQuestionAsync()",
      "longLabel": "AskQuestionAsync(question: string, tenantId: string, ebookId: Guid? = null, limit: int = 5, cancellationToken: CancellationToken = default) -> Task<Result<GroundedResponseDto>>",
      "signature": "(question: string, tenantId: string, ebookId: Guid? = null, limit: int = 5, cancellationToken: CancellationToken = default) -> Task<Result<GroundedResponseDto>>",
      "purpose": "RAG question-answering flow: embed question, retrieve top contexts from Qdrant, optionally expand via Neo4j, fetch ebook titles, build grounding prompt, call chat AI with strict JSON response expectations, and hydrate citation book titles",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:iyd7fv:requestscrolltoblock",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 11,
      "canonicalName": "RequestScrollToBlock",
      "shortLabel": "RequestScrollToBlock()",
      "longLabel": "RequestScrollToBlock(string blockId) -> Task",
      "signature": "(string blockId) -> Task",
      "purpose": "Declares an async request to scroll the UI to a block (intended to trigger OnScrollToBlockRequested).",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:j1tqds:handlekeypress",
      "kind": "method",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "line": 27,
      "canonicalName": "HandleKeyPress",
      "shortLabel": "HandleKeyPress()",
      "longLabel": "HandleKeyPress(KeyboardEventArgs e) -> Task",
      "signature": "(KeyboardEventArgs e) -> Task",
      "purpose": "Handles keyboard input on the search box and triggers the OnSearch callback when Enter is pressed.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:je6l0s:ensuredirectoryexists",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 66,
      "canonicalName": "EnsureDirectoryExists",
      "shortLabel": "EnsureDirectoryExists()",
      "longLabel": "EnsureDirectoryExists(path: string) -> void",
      "signature": "(path: string) -> void",
      "purpose": "Checks for the existence of a directory and creates it if missing.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:jenau5:up",
      "kind": "method",
      "fileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "line": 12,
      "canonicalName": "Up",
      "shortLabel": "Up()",
      "longLabel": "Up(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Applies the schema change to alter KnowledgeUnits.EbookId to be nullable.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:jffhoh:askquestionasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 96,
      "canonicalName": "AskQuestionAsync",
      "shortLabel": "AskQuestionAsync()",
      "longLabel": "AskQuestionAsync(question: string, tenantId: string, ebookId: Guid?, limit: int = 5, cancellationToken: CancellationToken) -> Task<Result<GroundedResponseDto>>",
      "signature": "(question: string, tenantId: string, ebookId: Guid?, limit: int = 5, cancellationToken: CancellationToken) -> Task<Result<GroundedResponseDto>>",
      "purpose": "Sends a question to the backend QA endpoint and returns a grounded response DTO.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:jhc678:maporientation",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 79,
      "canonicalName": "MapOrientation",
      "shortLabel": "MapOrientation()",
      "longLabel": "MapOrientation(orientation: Microsoft.Maui.Devices.DisplayOrientation) -> NexusReader.Application.Abstractions.Services.DisplayOrientation",
      "signature": "(orientation: Microsoft.Maui.Devices.DisplayOrientation) -> NexusReader.Application.Abstractions.Services.DisplayOrientation",
      "purpose": "Maps MAUI DisplayOrientation values to the application's DisplayOrientation enum using a switch expression.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:jkfjp3:getboolasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 48,
      "canonicalName": "GetBoolAsync",
      "shortLabel": "GetBoolAsync()",
      "longLabel": "GetBoolAsync(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "signature": "(key: string, defaultValue: bool = false) -> Task<Result<bool>>",
      "purpose": "Reads a boolean from MAUI Preferences with an optional default and returns it wrapped in FluentResults; errors produce a failed Result.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:jlw375:ingestebookcommandhandler",
      "kind": "method",
      "fileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
      "line": 15,
      "canonicalName": "IngestEbookCommandHandler",
      "shortLabel": "IngestEbookCommandHandler()",
      "longLabel": "IngestEbookCommandHandler(ebookRepository: IEbookRepository, storageService: IBookStorageService) -> IngestEbookCommandHandler",
      "signature": "(ebookRepository: IEbookRepository, storageService: IBookStorageService) -> IngestEbookCommandHandler",
      "purpose": "Constructor; receives repository and storage service via DI and assigns to fields.",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:jq1xnu:getknowledgemapasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 27,
      "canonicalName": "GetKnowledgeMapAsync",
      "shortLabel": "GetKnowledgeMapAsync()",
      "longLabel": "GetKnowledgeMapAsync(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Requests a knowledge map from the backend.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:k4xtk2:saveebookasync-stream",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 74,
      "canonicalName": "SaveEbookAsync (Stream)",
      "shortLabel": "SaveEbookAsync (Stream)",
      "longLabel": "SaveEbookAsync (Stream)(data: Stream, fileName: string) -> Task<string>",
      "signature": "(data: Stream, fileName: string) -> Task<string>",
      "purpose": "Stub storage operation that throws because file storage is unsupported in WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:k7fbfq:calculateprogress",
      "kind": "method",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "line": 121,
      "canonicalName": "CalculateProgress",
      "shortLabel": "CalculateProgress()",
      "longLabel": "CalculateProgress() -> int",
      "signature": "() -> int",
      "purpose": "Calculates percentage of AI tokens used and clamps it to a maximum of 100.",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:kf6qfg:registerasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 33,
      "canonicalName": "RegisterAsync",
      "shortLabel": "RegisterAsync()",
      "longLabel": "RegisterAsync(string email, string password) -> Task<Result>",
      "signature": "(string email, string password) -> Task<Result>",
      "purpose": "Sends registration request to the backend and returns success/failure result.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:kjs6w7:iife-bootstrap-preloader-handlers",
      "kind": "method",
      "fileId": "file:qvoxmq:app-razor",
      "path": "NexusReader.Web/Components/App.razor",
      "line": 25,
      "canonicalName": "IIFE — bootstrap preloader handlers",
      "shortLabel": "IIFE — bootstrap preloader handlers()",
      "longLabel": "IIFE — bootstrap preloader handlers(() => void) invoked immediately",
      "signature": "(() => void) invoked immediately",
      "purpose": "Initializes preloader lifecycle: hides immediately if document is ready, otherwise waits for window load; also registers a fallback timeout to ensure the preloader is removed even if load does not fire.",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "app-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:kv7eey:removesecureasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 98,
      "canonicalName": "RemoveSecureAsync",
      "shortLabel": "RemoveSecureAsync()",
      "longLabel": "RemoveSecureAsync(string key) -> Task<Result>",
      "signature": "(string key) -> Task<Result>",
      "purpose": "Removes a key from MAUI SecureStorage and returns a Fluent Result indicating success or failure.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:l29i6z:gotochapter",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 21,
      "canonicalName": "GoToChapter",
      "shortLabel": "GoToChapter()",
      "longLabel": "GoToChapter(index: int) -> Task",
      "signature": "(index: int) -> Task",
      "purpose": "Validates a target chapter index, updates CurrentChapterIndex and notifies subscribers if valid.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:l33fvs:totalchapters",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 7,
      "canonicalName": "TotalChapters",
      "shortLabel": "TotalChapters()",
      "longLabel": "TotalChapters() -> int",
      "signature": "() -> int",
      "purpose": "Exposes the total number of chapters for the active ebook.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:lftqc:savestringasync",
      "kind": "method",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 10,
      "canonicalName": "SaveStringAsync",
      "shortLabel": "SaveStringAsync()",
      "longLabel": "SaveStringAsync(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Saves a string into MAUI Preferences and returns a FluentResults Result indicating success or failure.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:lhrad4:assembly-property-getter",
      "kind": "method",
      "fileId": "file:qieb5i:dependencyinjection-cs",
      "path": "NexusReader.Application/DependencyInjection.cs",
      "line": 16,
      "canonicalName": "Assembly (property getter)",
      "shortLabel": "Assembly (property getter)",
      "longLabel": "Assembly (property getter)() -> System.Reflection.Assembly",
      "signature": "() -> System.Reflection.Assembly",
      "purpose": "Exposes the assembly containing the DependencyInjection type for registration/discovery.",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:llsrxk:down",
      "kind": "method",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "line": 271,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert schema changes performed in Up: drop created tables, indexes, columns and restore previous column types/values and the dropped CurrentPlan column.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:lqrlha:oninitializedasync",
      "kind": "method",
      "fileId": "file:1b5rrku:dashboard-razor",
      "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
      "line": 90,
      "canonicalName": "OnInitializedAsync",
      "shortLabel": "OnInitializedAsync()",
      "longLabel": "OnInitializedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Component lifecycle method: asynchronously fetches the current user's profile when the dashboard initializes and stores it in component state.",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "dashboard-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:lvsss7:disposeasync",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 125,
      "canonicalName": "DisposeAsync",
      "shortLabel": "DisposeAsync()",
      "longLabel": "DisposeAsync() -> ValueTask",
      "signature": "() -> ValueTask",
      "purpose": "Unsubscribe event handlers, unmount and dispose the JS module and DotNet helper when the component is disposed.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:lwiyp5:render-razor-markup",
      "kind": "method",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "line": 5,
      "canonicalName": "Render (Razor markup)",
      "shortLabel": "Render (Razor markup)",
      "longLabel": "Render (Razor markup)(render) -> void",
      "signature": "(render) -> void",
      "purpose": "Renders the current-reading card UI and chooses between book view and empty state based on Book parameter.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ly29k7:savesecurestring",
      "kind": "method",
      "fileId": "file:15km3l4:webstorageservice-cs",
      "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
      "line": 71,
      "canonicalName": "SaveSecureString",
      "shortLabel": "SaveSecureString()",
      "longLabel": "SaveSecureString(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Secure-named wrapper that currently delegates to SaveStringAsync (no extra security applied).",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "webstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:mdoq3y:retry",
      "kind": "method",
      "fileId": "file:1wkle85:reconnectmodal-razor-js",
      "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "line": 23,
      "canonicalName": "retry",
      "shortLabel": "retry()",
      "longLabel": "retry() -> Promise<void>",
      "signature": "() -> Promise<void>",
      "purpose": "Attempts to reconnect via Blazor.reconnect; if server reachable but circuit rejected attempts resume, otherwise reloads; on network error schedules visibility-driven retry.",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "reconnectmodal-razor-js"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:mes1h8:onparameterssetasync",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 43,
      "canonicalName": "OnParametersSetAsync",
      "shortLabel": "OnParametersSetAsync()",
      "longLabel": "OnParametersSetAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Triggers a background groundedness check if component is interactive and inputs are present and no result cached.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:mhcg2e:onnodeselected",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 5,
      "canonicalName": "OnNodeSelected",
      "shortLabel": "OnNodeSelected()",
      "longLabel": "OnNodeSelectedevent Func<string, Task>? -> void (event declaration)",
      "signature": "event Func<string, Task>? -> void (event declaration)",
      "purpose": "Event fired when a node is selected; subscribers receive the selected nodeId.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:mj67eu:handleregister",
      "kind": "method",
      "fileId": "file:1hn70tz:register-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
      "line": 84,
      "canonicalName": "HandleRegister",
      "shortLabel": "HandleRegister()",
      "longLabel": "HandleRegister() -> Task",
      "signature": "() -> Task",
      "purpose": "Handles the registration form submission: calls identity service to register, attempts immediate login, triggers a hidden form submission via JS to establish cookie-based auth, and surfaces errors to the UI.",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ml3mse:percentage-getter",
      "kind": "method",
      "fileId": "file:1wyr0y8:quizresult-cs",
      "path": "NexusReader.Domain/Entities/QuizResult.cs",
      "line": 31,
      "canonicalName": "Percentage (getter)",
      "shortLabel": "Percentage (getter)",
      "longLabel": "Percentage (getter)() -> double",
      "signature": "() -> double",
      "purpose": "Computes the score percentage of correct answers; guards against division by zero.",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "quizresult-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:mpmpcx:saveebookasync",
      "kind": "method",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 25,
      "canonicalName": "SaveEbookAsync",
      "shortLabel": "SaveEbookAsync()",
      "longLabel": "SaveEbookAsync(data: Stream, fileName: string) -> Task<string>",
      "signature": "(data: Stream, fileName: string) -> Task<string>",
      "purpose": "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).",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:n19kbi:seedasync",
      "kind": "method",
      "fileId": "file:136c3oe:dbinitializer-cs",
      "path": "NexusReader.Data/Persistence/DbInitializer.cs",
      "line": 14,
      "canonicalName": "SeedAsync",
      "shortLabel": "SeedAsync()",
      "longLabel": "SeedAsync(serviceProvider: IServiceProvider) -> Task",
      "signature": "(serviceProvider: IServiceProvider) -> Task",
      "purpose": "Create a scoped DbContext and seed initial database data: subscription plans, roles, an admin user (with role), a sample author and an ebook, with logging and error handling.",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "boundary": {
        "role": "bootstrap",
        "layer": "data",
        "boundaryHints": [
          "bootstrap",
          "data",
          "nexusreader-data",
          "persistence",
          "dbinitializer-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:n5kc06:currentgraphdata",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 7,
      "canonicalName": "CurrentGraphData",
      "shortLabel": "CurrentGraphData()",
      "longLabel": "CurrentGraphData() -> GraphDataDto?",
      "signature": "() -> GraphDataDto?",
      "purpose": "Read-only property exposing the current graph data held by the service.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:nb75z9:refreshtokenasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 202,
      "canonicalName": "RefreshTokenAsync",
      "shortLabel": "RefreshTokenAsync()",
      "longLabel": "RefreshTokenAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Attempts to refresh access token using stored refresh token, persists new tokens, invalidates auth state and refreshes profile information.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ne3mm3:removeasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 11,
      "canonicalName": "RemoveAsync",
      "shortLabel": "RemoveAsync()",
      "longLabel": "RemoveAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Remove a non-secure entry by key from native storage asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:nguekt:getboolasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 49,
      "canonicalName": "GetBoolAsync",
      "shortLabel": "GetBoolAsync()",
      "longLabel": "GetBoolAsync(string key, bool defaultValue = false) -> Task<Result<bool>>",
      "signature": "(string key, bool defaultValue = false) -> Task<Result<bool>>",
      "purpose": "Reads a boolean value from localStorage, with parsing, default fallback and exception-safe behavior.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:nvgthi:requestscrolltoblock",
      "kind": "method",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "line": 15,
      "canonicalName": "RequestScrollToBlock",
      "shortLabel": "RequestScrollToBlock()",
      "longLabel": "RequestScrollToBlock(string blockId) -> Task",
      "signature": "(string blockId) -> Task",
      "purpose": "Requests scrolling to a block by raising the OnScrollToBlockRequested event when subscribers exist.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:nwogow:createdbcontext",
      "kind": "method",
      "fileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "line": 10,
      "canonicalName": "CreateDbContext",
      "shortLabel": "CreateDbContext()",
      "longLabel": "CreateDbContext(args: string[]) -> AppDbContext",
      "signature": "(args: string[]) -> AppDbContext",
      "purpose": "Creates and configures an AppDbContext for design-time use by reading environment, locating the Web project for configuration files, resolving a connection string (with fallback), applying Npgsql + pgvector options, and returning the context.",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "unknown",
        "boundaryHints": [
          "unknown",
          "nexusreader-data",
          "persistence",
          "appdbcontextfactory-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:nyrl9z:getprofileinternalasync",
      "kind": "method",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 150,
      "canonicalName": "GetProfileInternalAsync",
      "shortLabel": "GetProfileInternalAsync()",
      "longLabel": "GetProfileInternalAsync() -> Task<UserProfileDto?>",
      "signature": "() -> Task<UserProfileDto?>",
      "purpose": "Performs the actual HTTP profile fetch with basic rate-limiting, updates cache/storage and notifies auth provider; handles unauthorized by logging out.",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:o6n51:setquiz",
      "kind": "method",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "line": 21,
      "canonicalName": "SetQuiz",
      "shortLabel": "SetQuiz()",
      "longLabel": "SetQuiz(blockId: string? , quiz: QuizDto? ) -> Task",
      "signature": "(blockId: string? , quiz: QuizDto? ) -> Task",
      "purpose": "Updates the current quiz and related flags, stops hydrating state, and notifies subscribers of the update.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:o7fqko:handlesyncprogressreceived",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 161,
      "canonicalName": "HandleSyncProgressReceived",
      "shortLabel": "HandleSyncProgressReceived()",
      "longLabel": "HandleSyncProgressReceived(blockId: string, timestamp: DateTime) -> Task",
      "signature": "(blockId: string, timestamp: DateTime) -> Task",
      "purpose": "Receives progress from other devices, logs it, scrolls to the corresponding node and requests UI update.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:oj5ghm:handleupdate",
      "kind": "method",
      "fileId": "file:q33ld0:intelligencetoolbar-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
      "line": 70,
      "canonicalName": "HandleUpdate",
      "shortLabel": "HandleUpdate()",
      "longLabel": "HandleUpdate() -> Task",
      "signature": "() -> Task",
      "purpose": "Triggers a UI refresh on the Blazor renderer when FocusMode changes.",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "intelligencetoolbar-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:oosx7v:clonehttprequestmessageasync",
      "kind": "method",
      "fileId": "file:17v8pus:authenticationheaderhandler-cs",
      "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "line": 112,
      "canonicalName": "CloneHttpRequestMessageAsync",
      "shortLabel": "CloneHttpRequestMessageAsync()",
      "longLabel": "CloneHttpRequestMessageAsync(req: HttpRequestMessage) -> Task<HttpRequestMessage>",
      "signature": "(req: HttpRequestMessage) -> Task<HttpRequestMessage>",
      "purpose": "Creates a deep clone of an HttpRequestMessage (including content stream and headers) suitable for resending.",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "handler",
        "layer": "infrastructure",
        "boundaryHints": [
          "handler",
          "infrastructure",
          "nexusreader-web-client",
          "handlers",
          "authenticationheaderhandler-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:orf66k:gotochapter",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 12,
      "canonicalName": "GoToChapter",
      "shortLabel": "GoToChapter()",
      "longLabel": "GoToChapter(index: int) -> Task",
      "signature": "(index: int) -> Task",
      "purpose": "Navigate to a specific chapter index and notify interested subscribers.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:p2mw02:notifytextselected",
      "kind": "method",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 13,
      "canonicalName": "NotifyTextSelected",
      "shortLabel": "NotifyTextSelected()",
      "longLabel": "NotifyTextSelected(string text, string blockId, SelectionCoordinates coords) -> Task",
      "signature": "(string text, string blockId, SelectionCoordinates coords) -> Task",
      "purpose": "Declares an async method to notify that text was selected, providing text, block context, and coordinates.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:p4hxqo:oninitializedasync",
      "kind": "method",
      "fileId": "file:1ain1yo:mainhublayout-razor",
      "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
      "line": 94,
      "canonicalName": "OnInitializedAsync",
      "shortLabel": "OnInitializedAsync()",
      "longLabel": "OnInitializedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Component initialization: avoids duplicate syncs, checks authentication state, and attempts to sync profile from server if the user is not authenticated.",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "mainhublayout-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:p5ejmn:onparameterssetasync",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 36,
      "canonicalName": "OnParametersSetAsync",
      "shortLabel": "OnParametersSetAsync()",
      "longLabel": "OnParametersSetAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "React to route/query changes: parse chapter query, determine BookId from route or fallback to last-read book from profile, and instruct navigation service to load the correct book/chapter.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:p6r8md:setactivenode",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 16,
      "canonicalName": "SetActiveNode",
      "shortLabel": "SetActiveNode()",
      "longLabel": "SetActiveNode(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Asynchronously set the active node by id and notify subscribers of the change.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:pcq8ik:refreshtokenasync",
      "kind": "method",
      "fileId": "file:10axm6l:serveridentityservice-cs",
      "path": "NexusReader.Web/Services/ServerIdentityService.cs",
      "line": 106,
      "canonicalName": "RefreshTokenAsync",
      "shortLabel": "RefreshTokenAsync()",
      "longLabel": "RefreshTokenAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Placeholder/no-op refresh token implementation returning success.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-web",
          "serveridentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:pd4yo:sethydrating",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 17,
      "canonicalName": "SetHydrating",
      "shortLabel": "SetHydrating()",
      "longLabel": "SetHydrating(hydrating: bool) -> Task",
      "signature": "(hydrating: bool) -> Task",
      "purpose": "Async contract to set the hydrating flag (state loading indicator).",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:pkbr0t:down",
      "kind": "method",
      "fileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "line": 51,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert schema changes made in Up: restore previous timestamp types and ContentHash length.",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ppivt7:notifyuserlogout",
      "kind": "method",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 112,
      "canonicalName": "NotifyUserLogout",
      "shortLabel": "NotifyUserLogout()",
      "longLabel": "NotifyUserLogout() -> void",
      "signature": "() -> void",
      "purpose": "Clears cached authentication and notifies consumers that the user is logged out (returns anonymous principal).",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:pqi00v:onprogressreceived",
      "kind": "method",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "line": 9,
      "canonicalName": "OnProgressReceived",
      "shortLabel": "OnProgressReceived()",
      "longLabel": "OnProgressReceived(pageId: string, timestamp: DateTime) -> Task (event)",
      "signature": "(pageId: string, timestamp: DateTime) -> Task (event)",
      "purpose": "Event invoked when progress is received; subscribers are called with a page id and timestamp.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:pslukv:computehash",
      "kind": "method",
      "fileId": "file:13kvr59:contenthasher-cs",
      "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "line": 9,
      "canonicalName": "ComputeHash",
      "shortLabel": "ComputeHash()",
      "longLabel": "ComputeHash(input: string) -> string",
      "signature": "(input: string) -> string",
      "purpose": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input.",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "contenthasher-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ptkxhj:vibratesuccessasync",
      "kind": "method",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 7,
      "canonicalName": "VibrateSuccessAsync",
      "shortLabel": "VibrateSuccessAsync()",
      "longLabel": "VibrateSuccessAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Contract for invoking a short/success vibration on the device.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:qdnq0x:vibrateerrorasync",
      "kind": "method",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 8,
      "canonicalName": "VibrateErrorAsync",
      "shortLabel": "VibrateErrorAsync()",
      "longLabel": "VibrateErrorAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Contract for invoking an error/alert vibration on the device.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:qegcuf:notifynodeselected",
      "kind": "method",
      "fileId": "file:1jnstne:readerinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
      "line": 10,
      "canonicalName": "NotifyNodeSelected",
      "shortLabel": "NotifyNodeSelected()",
      "longLabel": "NotifyNodeSelected(string nodeId) -> Task",
      "signature": "(string nodeId) -> Task",
      "purpose": "Raises the OnNodeSelected event if any subscriber is attached.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readerinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:qjg1lv:handlefocussimulation",
      "kind": "method",
      "fileId": "file:jo64ly:knowledgegraph-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
      "line": 112,
      "canonicalName": "HandleFocusSimulation",
      "shortLabel": "HandleFocusSimulation()",
      "longLabel": "HandleFocusSimulation() -> Task",
      "signature": "() -> Task",
      "purpose": "Respond to focus-mode toggles by pausing or resuming the client JS graph simulation.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "knowledgegraph-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:qspmus:onafterrenderasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 97,
      "canonicalName": "OnAfterRenderAsync",
      "shortLabel": "OnAfterRenderAsync()",
      "longLabel": "OnAfterRenderAsync(firstRender: bool) -> Task",
      "signature": "(firstRender: bool) -> Task",
      "purpose": "After render hook: initializes sync, processes full page with coordinator on first render, and initializes JS observers/listeners when needed.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:r0ndyk:asklibraryquestionqueryhandler",
      "kind": "method",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "line": 18,
      "canonicalName": "AskLibraryQuestionQueryHandler",
      "shortLabel": "AskLibraryQuestionQueryHandler()",
      "longLabel": "AskLibraryQuestionQueryHandler(knowledgeService: IKnowledgeService) -> AskLibraryQuestionQueryHandler",
      "signature": "(knowledgeService: IKnowledgeService) -> AskLibraryQuestionQueryHandler",
      "purpose": "Constructs the handler and captures the injected IKnowledgeService.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:r2rlv7:initializeasync",
      "kind": "method",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 32,
      "canonicalName": "InitializeAsync",
      "shortLabel": "InitializeAsync()",
      "longLabel": "InitializeAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Initializes the SignalR HubConnection (with token from secure storage), registers a progress handler, and starts the connection with automatic reconnect.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:rb5d4b:notifynavigationchangedasync",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 71,
      "canonicalName": "NotifyNavigationChangedAsync",
      "shortLabel": "NotifyNavigationChangedAsync()",
      "longLabel": "NotifyNavigationChangedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Invokes all registered OnNavigationChanged handlers sequentially (awaiting each), if any are subscribed.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:rci0sa:getknowledgegraphqueryhandler",
      "kind": "method",
      "fileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "line": 11,
      "canonicalName": "GetKnowledgeGraphQueryHandler",
      "shortLabel": "GetKnowledgeGraphQueryHandler()",
      "longLabel": "GetKnowledgeGraphQueryHandler(knowledgeService: IKnowledgeService) -> GetKnowledgeGraphQueryHandler",
      "signature": "(knowledgeService: IKnowledgeService) -> GetKnowledgeGraphQueryHandler",
      "purpose": "Constructor that injects the IKnowledgeService dependency.",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:rzym3m:getboolasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 48,
      "canonicalName": "GetBoolAsync",
      "shortLabel": "GetBoolAsync()",
      "longLabel": "GetBoolAsync(string key, bool defaultValue = false) -> Task<Result<bool>>",
      "signature": "(string key, bool defaultValue = false) -> Task<Result<bool>>",
      "purpose": "Reads a boolean from MAUI Preferences with an optional default and returns it wrapped in a Fluent Result.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:s3i4fd:findauthorbynameasync",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 84,
      "canonicalName": "FindAuthorByNameAsync",
      "shortLabel": "FindAuthorByNameAsync()",
      "longLabel": "FindAuthorByNameAsync(name: string, cancellationToken: CancellationToken) -> Task<Author?>",
      "signature": "(name: string, cancellationToken: CancellationToken) -> Task<Author?>",
      "purpose": "Ebook repository lookup stub that throws in WASM; repository operations should be done via server API.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:s95smj:savestringasync",
      "kind": "method",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 10,
      "canonicalName": "SaveStringAsync",
      "shortLabel": "SaveStringAsync()",
      "longLabel": "SaveStringAsync(string key, string value) -> Task<Result>",
      "signature": "(string key, string value) -> Task<Result>",
      "purpose": "Saves a string value to MAUI Preferences under the provided key and returns a Fluent Result indicating success or failure.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:sdo0jm:vibrateasync",
      "kind": "method",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 9,
      "canonicalName": "VibrateAsync",
      "shortLabel": "VibrateAsync()",
      "longLabel": "VibrateAsync(milliseconds: int) -> Task<Result>",
      "signature": "(milliseconds: int) -> Task<Result>",
      "purpose": "Contract for invoking a vibration for a specified duration in milliseconds.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:swctk:getservice",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 71,
      "canonicalName": "GetService",
      "shortLabel": "GetService()",
      "longLabel": "GetService(serviceType: Type, serviceKey: object?) -> object?",
      "signature": "(serviceType: Type, serviceKey: object?) -> object?",
      "purpose": "Returns null for service lookup; minimal service accessor to satisfy interface.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:t1zuul:handlenodeselected",
      "kind": "method",
      "fileId": "file:uvydt4:knowledgecoordinator-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "line": 44,
      "canonicalName": "HandleNodeSelected",
      "shortLabel": "HandleNodeSelected()",
      "longLabel": "HandleNodeSelected(nodeId: string) -> Task",
      "signature": "(nodeId: string) -> Task",
      "purpose": "Handles a node selection event from UI: resolves a target block id (preferring connected 'current' block), then requests scrolling and highlighting of that block.",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgecoordinator-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:t9hn2c:oncreate",
      "kind": "method",
      "fileId": "file:1246987:mainactivity-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "line": 13,
      "canonicalName": "OnCreate",
      "shortLabel": "OnCreate()",
      "longLabel": "OnCreate(Bundle? savedInstanceState) -> void",
      "signature": "(Bundle? savedInstanceState) -> void",
      "purpose": "Handles the Android creation lifecycle event; logs start and completion and delegates to base implementation.",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "frontend",
        "boundaryHints": [
          "program-entry",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:tgg1x1:handle",
      "kind": "method",
      "fileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
      "line": 16,
      "canonicalName": "Handle",
      "shortLabel": "Handle()",
      "longLabel": "Handle(request: GetKnowledgeGraphQuery, cancellationToken: CancellationToken) -> Task<Result<GraphDataDto>>",
      "signature": "(request: GetKnowledgeGraphQuery, cancellationToken: CancellationToken) -> Task<Result<GraphDataDto>>",
      "purpose": "Validates the query text, calls IKnowledgeService.GetGraphDataAsync to obtain graph data, and returns appropriate Result<GraphDataDto> (empty, failed, or the graph).",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:tmysty:render-razor-markup",
      "kind": "method",
      "fileId": "file:1foudu6:readerfooter-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
      "line": 5,
      "canonicalName": "Render (Razor markup)",
      "shortLabel": "Render (Razor markup)",
      "longLabel": "Render (Razor markup)() -> RenderFragment",
      "signature": "() -> RenderFragment",
      "purpose": "Renders footer HTML: navigation buttons, chapter info, progress bar and meta info; wires button onclicks to navigation service methods and displays computed progress/time/battery.",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readerfooter-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:tuoc3y:requestquiz",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 15,
      "canonicalName": "RequestQuiz",
      "shortLabel": "RequestQuiz()",
      "longLabel": "RequestQuiz(blockId: string) -> Task",
      "signature": "(blockId: string) -> Task",
      "purpose": "Async contract to request loading or activation of a quiz by block id.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:twu1zj:vibratesuccessasync",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 10,
      "canonicalName": "VibrateSuccessAsync",
      "shortLabel": "VibrateSuccessAsync()",
      "longLabel": "VibrateSuccessAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Performs a short double haptic click to indicate success and returns a FluentResults Result.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:tx9z61:updatemetadataasync",
      "kind": "method",
      "fileId": "file:1aunxq2:readernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
      "line": 45,
      "canonicalName": "UpdateMetadataAsync",
      "shortLabel": "UpdateMetadataAsync()",
      "longLabel": "UpdateMetadataAsync(currentIndex: int, totalChapters: int, title: string) -> Task",
      "signature": "(currentIndex: int, totalChapters: int, title: string) -> Task",
      "purpose": "Updates in-memory metadata (index, total, title) only if values changed and notifies subscribers when a change occurred.",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "readernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ty8u23:allquestionsanswered",
      "kind": "method",
      "fileId": "file:yno7se:knowledgecheck-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
      "line": 88,
      "canonicalName": "AllQuestionsAnswered",
      "shortLabel": "AllQuestionsAnswered()",
      "longLabel": "AllQuestionsAnswered() -> bool",
      "signature": "() -> bool",
      "purpose": "Determines whether all quiz questions have been answered by comparing local state count with current quiz question count.",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "knowledgecheck-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:tz9mq3:buildtargetmodel",
      "kind": "method",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 20,
      "canonicalName": "BuildTargetModel",
      "shortLabel": "BuildTargetModel()",
      "longLabel": "BuildTargetModel(modelBuilder: ModelBuilder) -> void",
      "signature": "(modelBuilder: ModelBuilder) -> void",
      "purpose": "Populates the EF Core ModelBuilder with entity types, columns, keys, indices, relationships, Postgres/vector extensions and seed data for this migration snapshot.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:u5zr3n:render-component-markup",
      "kind": "method",
      "fileId": "file:1awldsb:error-razor",
      "path": "NexusReader.Web/Components/Error.razor",
      "line": 11,
      "canonicalName": "Render (component markup)",
      "shortLabel": "Render (component markup)",
      "longLabel": "Render (component markup)() -> void",
      "signature": "() -> void",
      "purpose": "Renders a user-facing error message and conditionally shows expandable technical details when Exception is present.",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ujsh2c:closemodal",
      "kind": "method",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 128,
      "canonicalName": "CloseModal",
      "shortLabel": "CloseModal()",
      "longLabel": "CloseModal() -> Task",
      "signature": "() -> Task",
      "purpose": "Closes the modal, resets internal state, and notifies consumers that IsOpen changed.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:ulf8of:addauthor",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 84,
      "canonicalName": "AddAuthor",
      "shortLabel": "AddAuthor()",
      "longLabel": "AddAuthor(author: Author) -> void",
      "signature": "(author: Author) -> void",
      "purpose": "Repository add stub that throws to prevent local data mutation in WASM.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:ulfoov:handlegooglelogin",
      "kind": "method",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "line": 154,
      "canonicalName": "HandleGoogleLogin",
      "shortLabel": "HandleGoogleLogin()",
      "longLabel": "HandleGoogleLogin() -> void",
      "signature": "() -> void",
      "purpose": "Initiates external Google/OAuth login by navigating to the identity external-login route with forceLoad.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:upe53r:oninitialized",
      "kind": "method",
      "fileId": "file:82rsqa:redirecttologin-razor",
      "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
      "line": 4,
      "canonicalName": "OnInitialized",
      "shortLabel": "OnInitialized()",
      "longLabel": "OnInitialized() -> void",
      "signature": "() -> void",
      "purpose": "Component lifecycle method that computes a relative returnUrl and redirects the browser to the login page, appending returnUrl if present.",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "redirecttologin-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:uqgfbl:broadcastingestionprogressasync",
      "kind": "method",
      "fileId": "file:441s21:isyncbroadcaster-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "line": 33,
      "canonicalName": "BroadcastIngestionProgressAsync",
      "shortLabel": "BroadcastIngestionProgressAsync()",
      "longLabel": "BroadcastIngestionProgressAsync(userId: string, message: string, progress: double, cancellationToken: CancellationToken = default) -> Task",
      "signature": "(userId: string, message: string, progress: double, cancellationToken: CancellationToken = default) -> Task",
      "purpose": "Declares an asynchronous broadcast of ingestion (background processing) status and progress to a specific user.",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:urpd77:logoutasync",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 11,
      "canonicalName": "LogoutAsync",
      "shortLabel": "LogoutAsync()",
      "longLabel": "LogoutAsync() -> Task<Result>",
      "signature": "() -> Task<Result>",
      "purpose": "Logs out the current user and returns a Result indicating success/failure.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:uwsk5z:handlelogin",
      "kind": "method",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "line": 126,
      "canonicalName": "HandleLogin",
      "shortLabel": "HandleLogin()",
      "longLabel": "HandleLogin() -> Task",
      "signature": "() -> Task",
      "purpose": "Handles form submission: calls IdentityService.LoginAsync, sets submission state, handles success by invoking a JS helper to submit a hidden form (cookie sign-in), and surfaces errors.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:v3kul8:addebook",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 84,
      "canonicalName": "AddEbook",
      "shortLabel": "AddEbook()",
      "longLabel": "AddEbook(ebook: Ebook) -> void",
      "signature": "(ebook: Ebook) -> void",
      "purpose": "Repository add stub that throws to prevent local data mutation in WASM.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:va46s8:vibrateasync",
      "kind": "method",
      "fileId": "file:12lov7s:mauiplatformservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
      "line": 38,
      "canonicalName": "VibrateAsync",
      "shortLabel": "VibrateAsync()",
      "longLabel": "VibrateAsync(milliseconds: int) -> Task<Result>",
      "signature": "(milliseconds: int) -> Task<Result>",
      "purpose": "Performs a single haptic click (parameter provided but not used) and returns a FluentResults Result.",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauiplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:vdmrat:currentquizblockid",
      "kind": "method",
      "fileId": "file:savadk:iquizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "line": 7,
      "canonicalName": "CurrentQuizBlockId",
      "shortLabel": "CurrentQuizBlockId()",
      "longLabel": "CurrentQuizBlockId() -> string?",
      "signature": "() -> string?",
      "purpose": "Read-only property exposing the current quiz block identifier.",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iquizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:veacg9:getmyebooks-get-api-library-books",
      "kind": "method",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 355,
      "canonicalName": "GetMyEbooks (GET /api/library/books)",
      "shortLabel": "GetMyEbooks (GET /api/library/books)",
      "longLabel": "GetMyEbooks (GET /api/library/books)(ClaimsPrincipal user, IMediator mediator) -> IResult",
      "signature": "(ClaimsPrincipal user, IMediator mediator) -> IResult",
      "purpose": "Return list of ebooks for the authenticated user via a GetMyEbooksQuery.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:viikop:render-razor-template-component-render",
      "kind": "method",
      "fileId": "file:q8opk3:nexusicon-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "line": 1,
      "canonicalName": "Render (Razor template / component render)",
      "shortLabel": "Render (Razor template / component render)",
      "longLabel": "Render (Razor template / component render)() -> RenderFragment",
      "signature": "() -> RenderFragment",
      "purpose": "Renders an <svg> element and selects SVG child elements based on the lowercase Name parameter; merges additional attributes into the svg element.",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusicon-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:vkortc:addebook",
      "kind": "method",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 42,
      "canonicalName": "AddEbook",
      "shortLabel": "AddEbook()",
      "longLabel": "AddEbook(ebook: Ebook) -> void",
      "signature": "(ebook: Ebook) -> void",
      "purpose": "Prepares a new Ebook for persistence by setting readiness to false and adding it to the DbContext.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:vlhvyc:currentebookid",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 5,
      "canonicalName": "CurrentEbookId",
      "shortLabel": "CurrentEbookId()",
      "longLabel": "CurrentEbookId() -> Guid",
      "signature": "() -> Guid",
      "purpose": "Exposes the current ebook identifier.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:vlrx66:synchub",
      "kind": "method",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "line": 14,
      "canonicalName": "SyncHub",
      "shortLabel": "SyncHub()",
      "longLabel": "SyncHub(mediator: IMediator) -> void",
      "signature": "(mediator: IMediator) -> void",
      "purpose": "Constructs the hub and stores an IMediator reference.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:w31hua:getdevicecontext",
      "kind": "method",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 10,
      "canonicalName": "GetDeviceContext",
      "shortLabel": "GetDeviceContext()",
      "longLabel": "GetDeviceContext() -> Result<DeviceContext>",
      "signature": "() -> Result<DeviceContext>",
      "purpose": "Contract for obtaining device metadata (model, manufacturer, type, orientation) synchronously.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:w4053o:initializeselectionlistenerasync",
      "kind": "method",
      "fileId": "file:3sb16d:readercanvas-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
      "line": 117,
      "canonicalName": "InitializeSelectionListenerAsync",
      "shortLabel": "InitializeSelectionListenerAsync()",
      "longLabel": "InitializeSelectionListenerAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Loads a JS module and registers a DOM selection listener via JS interop; logs warning on failure.",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "readercanvas-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:w8lt4l:quizresults-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 24,
      "canonicalName": "QuizResults (DbSet property)",
      "shortLabel": "QuizResults (DbSet property)",
      "longLabel": "QuizResults (DbSet property)() -> DbSet<QuizResult>",
      "signature": "() -> DbSet<QuizResult>",
      "purpose": "Exposes the DbSet for QuizResult entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:wcjzgl:getgraphdataasync",
      "kind": "method",
      "fileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
      "line": 22,
      "canonicalName": "GetGraphDataAsync",
      "shortLabel": "GetGraphDataAsync()",
      "longLabel": "GetGraphDataAsync(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "signature": "(text: string, tenantId: string, ebookId: Guid?, cancellationToken: CancellationToken) -> Task<Result<KnowledgePacket>>",
      "purpose": "Requests graph-form knowledge data from backend.",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "boundary": {
        "role": "integration-client",
        "layer": "infrastructure",
        "boundaryHints": [
          "integration-client",
          "infrastructure",
          "nexusreader-web-client",
          "wasmknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:wcoxzi:down",
      "kind": "method",
      "fileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "line": 53,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Revert the Up changes: drop FK, drop Authors table, drop index and AuthorId column, and re-add Ebooks.Author string column.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:whfss9:onfocuskeypressed",
      "kind": "method",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 77,
      "canonicalName": "OnFocusKeypressed",
      "shortLabel": "OnFocusKeypressed()",
      "longLabel": "OnFocusKeypressed() -> Task",
      "signature": "() -> Task",
      "purpose": "JS-invokable handler called when the focus-mode key is pressed: toggles focus mode and refreshes UI.",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:wn38ys:focusmodeservice",
      "kind": "method",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "line": 11,
      "canonicalName": "FocusModeService",
      "shortLabel": "FocusModeService()",
      "longLabel": "FocusModeService(jsRuntime: IJSRuntime) -> FocusModeService",
      "signature": "(jsRuntime: IJSRuntime) -> FocusModeService",
      "purpose": "Constructs the service and captures an IJSRuntime instance for JS interop.",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:wsqlg8:getstringasync",
      "kind": "method",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 34,
      "canonicalName": "GetStringAsync",
      "shortLabel": "GetStringAsync()",
      "longLabel": "GetStringAsync(string key) -> Task<Result<string?>>",
      "signature": "(string key) -> Task<Result<string?>>",
      "purpose": "Reads a string value from browser localStorage via JS interop and wraps it in a FluentResults Result.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:wxhxya:chaptertitle",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 8,
      "canonicalName": "ChapterTitle",
      "shortLabel": "ChapterTitle()",
      "longLabel": "ChapterTitle() -> string",
      "signature": "() -> string",
      "purpose": "Exposes the title of the current chapter.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:x1z3b8:hidepreloader",
      "kind": "method",
      "fileId": "file:qvoxmq:app-razor",
      "path": "NexusReader.Web/Components/App.razor",
      "line": 26,
      "canonicalName": "hidePreloader",
      "shortLabel": "hidePreloader()",
      "longLabel": "hidePreloader() -> void",
      "signature": "() -> void",
      "purpose": "Hides the #app-preloader element visually then removes it from layout after a transition timeout.",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "app-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:x4i3zt:generateasync",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 69,
      "canonicalName": "GenerateAsync",
      "shortLabel": "GenerateAsync()",
      "longLabel": "GenerateAsync(values: IEnumerable<string>, options: EmbeddingGenerationOptions?, cancellationToken: CancellationToken) -> Task<GeneratedEmbeddings<Embedding<float>>>",
      "signature": "(values: IEnumerable<string>, options: EmbeddingGenerationOptions?, cancellationToken: CancellationToken) -> Task<GeneratedEmbeddings<Embedding<float>>>",
      "purpose": "Stub embedding generation that always throws in the WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:x4s1g:setloading",
      "kind": "method",
      "fileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
      "line": 17,
      "canonicalName": "SetLoading",
      "shortLabel": "SetLoading()",
      "longLabel": "SetLoading(isLoading: bool) -> Task",
      "signature": "(isLoading: bool) -> Task",
      "purpose": "Asynchronously set the loading flag and notify listeners.",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "iknowledgegraphservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:xctw2t:down",
      "kind": "method",
      "fileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
      "line": 29,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Reverts schema changes applied in Up by dropping LastChapter and Progress columns from the Ebooks table.",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:xfwbbe:removesecureasync",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 15,
      "canonicalName": "RemoveSecureAsync",
      "shortLabel": "RemoveSecureAsync()",
      "longLabel": "RemoveSecureAsync(key: string) -> Task<Result>",
      "signature": "(key: string) -> Task<Result>",
      "purpose": "Remove a secure entry by key from platform secure storage asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:xqcyw0:savechangesasync",
      "kind": "method",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 50,
      "canonicalName": "SaveChangesAsync",
      "shortLabel": "SaveChangesAsync()",
      "longLabel": "SaveChangesAsync(cancellationToken: CancellationToken = default) -> Task<int>",
      "signature": "(cancellationToken: CancellationToken = default) -> Task<int>",
      "purpose": "Saves tracked changes in the DbContext to the underlying database.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:xt4lks:runcheck",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 63,
      "canonicalName": "RunCheck",
      "shortLabel": "RunCheck()",
      "longLabel": "RunCheck() -> Task",
      "signature": "() -> Task",
      "purpose": "Performs the verification: sets checking state, obtains tenant id from auth, requests groundedness verification, stores result on success, and clears checking state.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:xv5ikh:currentchapterindex",
      "kind": "method",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 6,
      "canonicalName": "CurrentChapterIndex",
      "shortLabel": "CurrentChapterIndex()",
      "longLabel": "CurrentChapterIndex() -> int",
      "signature": "() -> int",
      "purpose": "Exposes the current chapter index within the active ebook.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:y8prsw:down",
      "kind": "method",
      "fileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "line": 22,
      "canonicalName": "Down",
      "shortLabel": "Down()",
      "longLabel": "Down(migrationBuilder: MigrationBuilder) -> void",
      "signature": "(migrationBuilder: MigrationBuilder) -> void",
      "purpose": "Rolls back the migration: removes the 'IsReadyForReading' column from the 'Ebooks' table.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:yif4p8:processknowledgeunitsasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 225,
      "canonicalName": "ProcessKnowledgeUnitsAsync",
      "shortLabel": "ProcessKnowledgeUnitsAsync()",
      "longLabel": "ProcessKnowledgeUnitsAsync(packet: KnowledgePacket, tenantId: string, ebookId: Guid?, dbContext: AppDbContext, cancellationToken: CancellationToken) -> Task",
      "signature": "(packet: KnowledgePacket, tenantId: string, ebookId: Guid?, dbContext: AppDbContext, cancellationToken: CancellationToken) -> Task",
      "purpose": "Upserts KnowledgeUnit entities and KnowledgeUnitLink entities from parsed KnowledgePacket into the relational DB",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:yo2gbi:broadcastingestionprogressasync",
      "kind": "method",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 94,
      "canonicalName": "BroadcastIngestionProgressAsync",
      "shortLabel": "BroadcastIngestionProgressAsync()",
      "longLabel": "BroadcastIngestionProgressAsync(userId: string, message: string, progress: double, cancellationToken: CancellationToken) -> Task",
      "signature": "(userId: string, message: string, progress: double, cancellationToken: CancellationToken) -> Task",
      "purpose": "Real-time ingestion progress broadcast stub that throws because server-only broadcasting is required.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:yy00ql:handlecontinuereading",
      "kind": "method",
      "fileId": "file:1uvdam9:currentreadingwidget-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "line": 72,
      "canonicalName": "HandleContinueReading",
      "shortLabel": "HandleContinueReading()",
      "longLabel": "HandleContinueReading() -> void",
      "signature": "() -> void",
      "purpose": "Handles the Continue Reading button click by navigating to the reader route for the current book and chapter.",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "currentreadingwidget-razor"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "method",
      "fileId": "file:27eki7:knowledgeservice-cs",
      "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "line": 385,
      "canonicalName": "SearchLibrarySemanticallyAsync",
      "shortLabel": "SearchLibrarySemanticallyAsync()",
      "longLabel": "SearchLibrarySemanticallyAsync(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken = default) -> Task<Result<List<SemanticSearchResultDto>>>",
      "signature": "(queryText: string, tenantId: string, limit: int, cancellationToken: CancellationToken = default) -> Task<Result<List<SemanticSearchResultDto>>>",
      "purpose": "Performs semantic search: embedding generation, Qdrant retrieval, optional Neo4j graph expansion, enrich with ebook titles from Postgres, and map to DTOs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "knowledgeservice-cs"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:yzr6ph:getprofileasync",
      "kind": "method",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 12,
      "canonicalName": "GetProfileAsync",
      "shortLabel": "GetProfileAsync()",
      "longLabel": "GetProfileAsync() -> Task<Result<UserProfileDto>>",
      "signature": "() -> Task<Result<UserProfileDto>>",
      "purpose": "Retrieves the current user's profile wrapped in a Result with UserProfileDto on success.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:z1n8tn:oninitializedasync",
      "kind": "method",
      "fileId": "file:11crtur:profile-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
      "line": 111,
      "canonicalName": "OnInitializedAsync",
      "shortLabel": "OnInitializedAsync()",
      "longLabel": "OnInitializedAsync() -> Task",
      "signature": "() -> Task",
      "purpose": "Lifecycle init method: asynchronously requests the current user's profile from IdentityService and updates component state.",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": [
        "method"
      ]
    },
    {
      "id": "method:z2iy0h:showrequestid-computed-property",
      "kind": "method",
      "fileId": "file:p5ean4:error-razor",
      "path": "NexusReader.Web/Components/Pages/Error.razor",
      "line": 32,
      "canonicalName": "ShowRequestId (computed property)",
      "shortLabel": "ShowRequestId (computed property)",
      "longLabel": "ShowRequestId (computed property)private bool ShowRequestId => !string.IsNullOrEmpty(RequestId)",
      "signature": "private bool ShowRequestId => !string.IsNullOrEmpty(RequestId)",
      "purpose": "Returns true when RequestId is non-empty so the UI can conditionally render the Request ID block.",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-web",
          "pages",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:zb4rdj:dispose",
      "kind": "method",
      "fileId": "file:mm1vnb:readerlayout-razor",
      "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
      "line": 111,
      "canonicalName": "Dispose",
      "shortLabel": "Dispose()",
      "longLabel": "Dispose() -> void",
      "signature": "() -> void",
      "purpose": "Component disposal: unsubscribes from FocusMode and Quiz update events to avoid memory leaks.",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "layout",
          "readerlayout-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:zf4i3h:addapplication",
      "kind": "method",
      "fileId": "file:qieb5i:dependencyinjection-cs",
      "path": "NexusReader.Application/DependencyInjection.cs",
      "line": 8,
      "canonicalName": "AddApplication",
      "shortLabel": "AddApplication()",
      "longLabel": "AddApplication(services: IServiceCollection) -> IServiceCollection",
      "signature": "(services: IServiceCollection) -> IServiceCollection",
      "purpose": "Extension method that registers application-layer services: Mapster mapping configuration and MediatR handlers, then returns the IServiceCollection.",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "application",
        "boundaryHints": [
          "service-registration",
          "application",
          "nexusreader-application",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:zj5uq4:knowledgeunits-dbset-property",
      "kind": "method",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 21,
      "canonicalName": "KnowledgeUnits (DbSet property)",
      "shortLabel": "KnowledgeUnits (DbSet property)",
      "longLabel": "KnowledgeUnits (DbSet property)() -> DbSet<KnowledgeUnit>",
      "signature": "() -> DbSet<KnowledgeUnit>",
      "purpose": "Exposes the DbSet for KnowledgeUnit entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:zopugm:geticon",
      "kind": "method",
      "fileId": "file:108l4jq:groundednessbadge-razor",
      "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
      "line": 89,
      "canonicalName": "GetIcon",
      "shortLabel": "GetIcon()",
      "longLabel": "GetIcon() -> string",
      "signature": "() -> string",
      "purpose": "Selects an icon name based on groundedness score thresholds, with fallback for unknown.",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "molecules",
          "groundednessbadge-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "method:zxocvw:savesecurestring",
      "kind": "method",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 13,
      "canonicalName": "SaveSecureString",
      "shortLabel": "SaveSecureString()",
      "longLabel": "SaveSecureString(key: string, value: string) -> Task<Result>",
      "signature": "(key: string, value: string) -> Task<Result>",
      "purpose": "Persist a string securely (platform secure storage) under the given key asynchronously.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1363qq7:where-c-c-tenantid-request-tenantid-c-embedding-",
      "kind": "store",
      "canonicalName": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "shortLabel": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "longLabel": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "purpose": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-c-c-tenantid-request-tenantid-c-embedding-null"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:13kwuip:firstordefault",
      "kind": "store",
      "canonicalName": "}).FirstOrDefault(),",
      "shortLabel": "}).FirstOrDefault(),",
      "longLabel": "}).FirstOrDefault(),",
      "purpose": "}).FirstOrDefault(),",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "firstordefault"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:13o96bq:var-userid-context-useridentifier",
      "kind": "store",
      "canonicalName": "var userId = Context.UserIdentifier;",
      "shortLabel": "var userId = Context.UserIdentifier;",
      "longLabel": "var userId = Context.UserIdentifier;",
      "purpose": "var userId = Context.UserIdentifier;",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-userid-context-useridentifier"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:14gpj8y:where-e-ebookids-contains-e-id",
      "kind": "store",
      "canonicalName": ".Where(e => ebookIds.Contains(e.Id))",
      "shortLabel": ".Where(e => ebookIds.Contains(e.Id))",
      "longLabel": ".Where(e => ebookIds.Contains(e.Id))",
      "purpose": ".Where(e => ebookIds.Contains(e.Id))",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-e-ebookids-contains-e-id"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:15yx1zi:var-ebook-await-context-ebooks-firstordefaultasy",
      "kind": "store",
      "canonicalName": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "shortLabel": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "longLabel": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "purpose": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-ebook-await-context-ebooks-firstordefaultasync-e-e-id-request-ebookid-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:164m416:return-context-null-result-ok-context-result-fai",
      "kind": "store",
      "canonicalName": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "shortLabel": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "longLabel": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "purpose": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "return-context-null-result-ok-context-result-fail-failed-to-deserialize-relevant-context"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1662huz:task-author-findauthorbynameasync-string-name-ca",
      "kind": "store",
      "canonicalName": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "shortLabel": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "longLabel": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "purpose": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "task-author-findauthorbynameasync-string-name-cancellationtoken-cancellationtoken-default"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:16h1nc:var-tenantid-user-findfirstvalue-tenantid-global",
      "kind": "store",
      "canonicalName": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "shortLabel": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "longLabel": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "purpose": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-tenantid-user-findfirstvalue-tenantid-global"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:17v7uel:var-isapirequest-context-request-path-startswith",
      "kind": "store",
      "canonicalName": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "shortLabel": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "longLabel": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "purpose": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-isapirequest-context-request-path-startswithsegments",
          "api"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:19ypa2f:relatedcontexts-add-source-id-sourceid-content",
      "kind": "store",
      "canonicalName": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "shortLabel": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "longLabel": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "purpose": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "relatedcontexts-add-source-id-sourceid-content"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1c53sg7:dbcontext-ebooks-add-new-ebook",
      "kind": "store",
      "canonicalName": "dbContext.Ebooks.Add(new Ebook",
      "shortLabel": "dbContext.Ebooks.Add(new Ebook",
      "longLabel": "dbContext.Ebooks.Add(new Ebook",
      "purpose": "dbContext.Ebooks.Add(new Ebook",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-ebooks-add-new-ebook"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1dhrx8l:await-groups-addtogroupasync-context-connectioni",
      "kind": "store",
      "canonicalName": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "shortLabel": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "longLabel": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "purpose": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "await-groups-addtogroupasync-context-connectionid-user-userid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1dobere:var-user-await-usermanager-findbyemailasync-emai",
      "kind": "store",
      "canonicalName": "var user = await _userManager.FindByEmailAsync(email);",
      "shortLabel": "var user = await _userManager.FindByEmailAsync(email);",
      "longLabel": "var user = await _userManager.FindByEmailAsync(email);",
      "purpose": "var user = await _userManager.FindByEmailAsync(email);",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-user-await-usermanager-findbyemailasync-email"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1dwn4ic:relatedcontexts-add-source-id-sourceid-sourcecon",
      "kind": "store",
      "canonicalName": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "shortLabel": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "longLabel": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "purpose": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "relatedcontexts-add-source-id-sourceid-sourcecontent"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1gsept0:context-response-statuscode-statuscodes-status40",
      "kind": "store",
      "canonicalName": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "shortLabel": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "longLabel": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "purpose": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-response-statuscode-statuscodes-status401unauthorized"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1hgnorv:where-u-u-id-request-userid",
      "kind": "store",
      "canonicalName": ".Where(u => u.Id == request.UserId)",
      "shortLabel": ".Where(u => u.Id == request.UserId)",
      "longLabel": ".Where(u => u.Id == request.UserId)",
      "purpose": ".Where(u => u.Id == request.UserId)",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-u-u-id-request-userid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1hquuu6:calls-addebook-and-savechangesasync-to-persist-t",
      "kind": "store",
      "canonicalName": "Calls AddEbook and SaveChangesAsync to persist the new entity",
      "shortLabel": "Calls AddEbook and SaveChangesAsync to persist the new entity",
      "longLabel": "Calls AddEbook and SaveChangesAsync to persist the new entity",
      "purpose": "Calls AddEbook and SaveChangesAsync to persist the new entity",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "calls-addebook-and-savechangesasync-to-persist-the-new-entity"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1i3rrjs:ismobile-context-value-devicetype-switch",
      "kind": "store",
      "canonicalName": "_isMobile = context.Value.DeviceType switch",
      "shortLabel": "_isMobile = context.Value.DeviceType switch",
      "longLabel": "_isMobile = context.Value.DeviceType switch",
      "purpose": "_isMobile = context.Value.DeviceType switch",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout",
        "data"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "ismobile-context-value-devicetype-switch"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1igfwg6:var-ebook-await-context-ebooks",
      "kind": "store",
      "canonicalName": "var ebook = await context.Ebooks",
      "shortLabel": "var ebook = await context.Ebooks",
      "longLabel": "var ebook = await context.Ebooks",
      "purpose": "var ebook = await context.Ebooks",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-ebook-await-context-ebooks"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1isdduh:where-r-r-payload-trygetvalue-ebookid-out-var-ev",
      "kind": "store",
      "canonicalName": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "shortLabel": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "longLabel": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "purpose": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-r-r-payload-trygetvalue-ebookid-out-var-ev-guid-tryparse-ev-stringvalue-out"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1jb20f0:var-userid-authstate-user-findfirst-system-secur",
      "kind": "store",
      "canonicalName": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "shortLabel": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "longLabel": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "purpose": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization",
        "data"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-userid-authstate-user-findfirst-system-security-claims-claimtypes-nameidentifier-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1jozrsm:dbcontext-users-add-adminuser",
      "kind": "store",
      "canonicalName": "dbContext.Users.Add(adminUser);",
      "shortLabel": "dbContext.Users.Add(adminUser);",
      "longLabel": "dbContext.Users.Add(adminUser);",
      "purpose": "dbContext.Users.Add(adminUser);",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-users-add-adminuser"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1k74zre:if-context-issuccess",
      "kind": "store",
      "canonicalName": "if (context.IsSuccess)",
      "shortLabel": "if (context.IsSuccess)",
      "longLabel": "if (context.IsSuccess)",
      "purpose": "if (context.IsSuccess)",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout",
        "data"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "if-context-issuccess"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1kadcg7:await-context-savechangesasync-cancellationtoken",
      "kind": "store",
      "canonicalName": "await context.SaveChangesAsync(cancellationToken);",
      "shortLabel": "await context.SaveChangesAsync(cancellationToken);",
      "longLabel": "await context.SaveChangesAsync(cancellationToken);",
      "purpose": "await context.SaveChangesAsync(cancellationToken);",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "await-context-savechangesasync-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1lgwsa9:errormessage-regresult-errors-firstordefault-mes",
      "kind": "store",
      "canonicalName": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "shortLabel": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "longLabel": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "purpose": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "errormessage-regresult-errors-firstordefault-message-rejestracja-nie-powiod-a-si"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1ljoi91:dbcontext-authors-add-author",
      "kind": "store",
      "canonicalName": "dbContext.Authors.Add(author);",
      "shortLabel": "dbContext.Authors.Add(author);",
      "longLabel": "dbContext.Authors.Add(author);",
      "purpose": "dbContext.Authors.Add(author);",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-authors-add-author"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1mb6tc8:int-u-quizresults-where-q-q-totalquestions-0-ave",
      "kind": "store",
      "canonicalName": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "shortLabel": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "longLabel": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "purpose": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "int-u-quizresults-where-q-q-totalquestions-0-average-q-double-q-score",
          "q-totalquestions-100"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1net1ay:var-user-await-usermanager-findbyemailasync-cust",
      "kind": "store",
      "canonicalName": "var user = await _userManager.FindByEmailAsync(customerEmail);",
      "shortLabel": "var user = await _userManager.FindByEmailAsync(customerEmail);",
      "longLabel": "var user = await _userManager.FindByEmailAsync(customerEmail);",
      "purpose": "var user = await _userManager.FindByEmailAsync(customerEmail);",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-user-await-usermanager-findbyemailasync-customeremail"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1oe6439:var-userid-context-user-findfirst-claimtypes-nam",
      "kind": "store",
      "canonicalName": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "shortLabel": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "longLabel": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "purpose": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-userid-context-user-findfirst-claimtypes-nameidentifier-value"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1oft4no:private-static-string-findtitleinnavigation-ienu",
      "kind": "store",
      "canonicalName": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "shortLabel": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "longLabel": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "purpose": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "private-static-string-findtitleinnavigation-ienumerable-epubnavigationitemref-navigation-string-filepath"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1opwi8i:context-succeed-requirement",
      "kind": "store",
      "canonicalName": "context.Succeed(requirement);",
      "shortLabel": "context.Succeed(requirement);",
      "longLabel": "context.Succeed(requirement);",
      "purpose": "context.Succeed(requirement);",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader",
        "data",
        "aitokens",
        "user-identity-claims"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext",
        "data",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-succeed-requirement"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1ozgz5e:context-request-path-startswithsegments-identity",
      "kind": "store",
      "canonicalName": "context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "shortLabel": "context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "longLabel": "context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "purpose": "context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-request-path-startswithsegments",
          "identity"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1q4ufx0:await-mediator-send-new-updatereadingprogresscom",
      "kind": "store",
      "canonicalName": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "shortLabel": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "longLabel": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "purpose": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "await-mediator-send-new-updatereadingprogresscommand-pageid-userid-ebookid-progress-chaptertitle-chapterindex-context-connectionid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1rd4l51:return-result-fail-result-errors-select-e-e-desc",
      "kind": "store",
      "canonicalName": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "shortLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "longLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "purpose": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "return-result-fail-result-errors-select-e-e-description-firstordefault-failed-to-update-user-profile"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1to6fdn:context-request-headers-accept-tostring-contains",
      "kind": "store",
      "canonicalName": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "shortLabel": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "longLabel": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "purpose": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-request-headers-accept-tostring-contains-application",
          "json"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1xjot4x:dbcontext-knowledgeunitlinks-add-link",
      "kind": "store",
      "canonicalName": "dbContext.KnowledgeUnitLinks.Add(link);",
      "shortLabel": "dbContext.KnowledgeUnitLinks.Add(link);",
      "longLabel": "dbContext.KnowledgeUnitLinks.Add(link);",
      "purpose": "dbContext.KnowledgeUnitLinks.Add(link);",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-knowledgeunitlinks-add-link"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1xsov3i:answer-error-result-errors-firstordefault-messag",
      "kind": "store",
      "canonicalName": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "shortLabel": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "longLabel": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "purpose": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "answer-error-result-errors-firstordefault-message-an-error-occurred"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1xun3da:var-tenantid-authstate-user-findfirst-tenantid-v",
      "kind": "store",
      "canonicalName": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "shortLabel": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "longLabel": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "purpose": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules",
        "data"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-tenantid-authstate-user-findfirst-tenantid-value-global"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:1yqfykk:errormessage-result-errors-firstordefault-messag",
      "kind": "store",
      "canonicalName": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "shortLabel": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "longLabel": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "purpose": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "errormessage-result-errors-firstordefault-message-nieprawid-owy-e-mail-lub-has-o"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:2amwm9:return-result-fail-result-errors-select-e-e-desc",
      "kind": "store",
      "canonicalName": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "shortLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "longLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "purpose": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "return-result-fail-result-errors-select-e-e-description-firstordefault-failed-to-reset-user-to-free-tier"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:3aiz9x:context-response-redirect-context-redirecturi",
      "kind": "store",
      "canonicalName": "context.Response.Redirect(context.RedirectUri);",
      "shortLabel": "context.Response.Redirect(context.RedirectUri);",
      "longLabel": "context.Response.Redirect(context.RedirectUri);",
      "purpose": "context.Response.Redirect(context.RedirectUri);",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-response-redirect-context-redirecturi"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:63pl8h:if-cached-null-dbcontext-semanticknowledgecache-",
      "kind": "store",
      "canonicalName": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "shortLabel": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "longLabel": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "purpose": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "if-cached-null-dbcontext-semanticknowledgecache-add-cacheentry"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:66nke4:var-userid-user-findfirstvalue-claimtypes-nameid",
      "kind": "store",
      "canonicalName": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "shortLabel": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "longLabel": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "purpose": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data",
        "user",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-userid-user-findfirstvalue-claimtypes-nameidentifier"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:66z21x:where-ur-ur-userid-u-id",
      "kind": "store",
      "canonicalName": ".Where(ur => ur.UserId == u.Id)",
      "shortLabel": ".Where(ur => ur.UserId == u.Id)",
      "longLabel": ".Where(ur => ur.UserId == u.Id)",
      "purpose": ".Where(ur => ur.UserId == u.Id)",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-ur-ur-userid-u-id"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:6ew30w:return-result-fail-result-errors-select-e-e-desc",
      "kind": "store",
      "canonicalName": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "shortLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "longLabel": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "purpose": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "return-result-fail-result-errors-select-e-e-description-firstordefault-rejestracja-nie-powiod-a-si"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:7z4hx4:dbcontext-userroles-add-new-identityuserrole-str",
      "kind": "store",
      "canonicalName": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "shortLabel": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "longLabel": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "purpose": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-userroles-add-new-identityuserrole-string-userid-adminuser-id-roleid-adminrole-id"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:a5nsx:errormessage-result-errors-firstordefault-messag",
      "kind": "store",
      "canonicalName": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "shortLabel": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "longLabel": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "purpose": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library",
        "data"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "errormessage-result-errors-firstordefault-message-failed-to-parse-epub"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:eanb5r:var-chaptertitle-findtitleinnavigation-navigatio",
      "kind": "store",
      "canonicalName": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "shortLabel": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "longLabel": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "purpose": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-chaptertitle-findtitleinnavigation-navigation-chapterref-filepath"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:gcvc8x:var-userid-context-user-findfirstvalue-claimtype",
      "kind": "store",
      "canonicalName": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "shortLabel": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "longLabel": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "purpose": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader",
        "data",
        "aitokens",
        "user-identity-claims"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext",
        "data",
        "db-backed-claim-authorization-check"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-userid-context-user-findfirstvalue-claimtypes-nameidentifier"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:go6e6j:await-groups-removefromgroupasync-context-connec",
      "kind": "store",
      "canonicalName": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "shortLabel": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "longLabel": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "purpose": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "await-groups-removefromgroupasync-context-connectionid-user-userid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:lobpp9:var-user-await-context-users-firstordefaultasync",
      "kind": "store",
      "canonicalName": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "shortLabel": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "longLabel": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "purpose": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-user-await-context-users-firstordefaultasync-u-u-id-request-userid-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:lv7lmn:answer-i-cannot-answer-this-based-on-the-provide",
      "kind": "store",
      "canonicalName": "Answer = \"I cannot answer this based on the provided book context.\",",
      "shortLabel": "Answer = \"I cannot answer this based on the provided book context.\",",
      "longLabel": "Answer = \"I cannot answer this based on the provided book context.\",",
      "purpose": "Answer = \"I cannot answer this based on the provided book context.\",",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "answer-i-cannot-answer-this-based-on-the-provided-book-context"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:menq3u:relatedcontexts-add-related-context-relation-to-",
      "kind": "store",
      "canonicalName": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "shortLabel": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "longLabel": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "purpose": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "relatedcontexts-add-related-context-relation-to-sourceid-targetcontent"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:o198xq:var-author-await-ebookrepository-findauthorbynam",
      "kind": "store",
      "canonicalName": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "shortLabel": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "longLabel": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "purpose": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-author-await-ebookrepository-findauthorbynameasync-authorname-cancellationtoken"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:ogoitz:public-async-task-author-findauthorbynameasync-s",
      "kind": "store",
      "canonicalName": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "shortLabel": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "longLabel": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "purpose": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "public-async-task-author-findauthorbynameasync-string-name-cancellationtoken-cancellationtoken-default"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:oqk8ve:context-ebooks-add-ebook",
      "kind": "store",
      "canonicalName": "_context.Ebooks.Add(ebook);",
      "shortLabel": "_context.Ebooks.Add(ebook);",
      "longLabel": "_context.Ebooks.Add(ebook);",
      "purpose": "_context.Ebooks.Add(ebook);",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "context-ebooks-add-ebook"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:prjd43:var-childtitle-findtitleinnavigation-item-nested",
      "kind": "store",
      "canonicalName": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "shortLabel": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "longLabel": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "purpose": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-childtitle-findtitleinnavigation-item-nesteditems-filepath"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:rgdfd6:var-othernode-graph-nodes-firstordefault-n-n-id-",
      "kind": "store",
      "canonicalName": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "shortLabel": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "longLabel": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "purpose": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-othernode-graph-nodes-firstordefault-n-n-id-otherid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:sbfxjz:dbcontext-knowledgeunits-add-unit",
      "kind": "store",
      "canonicalName": "dbContext.KnowledgeUnits.Add(unit);",
      "shortLabel": "dbContext.KnowledgeUnits.Add(unit);",
      "longLabel": "dbContext.KnowledgeUnits.Add(unit);",
      "purpose": "dbContext.KnowledgeUnits.Add(unit);",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-knowledgeunits-add-unit"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:uy6h6e:where-e-e-userid-request-userid",
      "kind": "store",
      "canonicalName": ".Where(e => e.UserId == request.UserId)",
      "shortLabel": ".Where(e => e.UserId == request.UserId)",
      "longLabel": ".Where(e => e.UserId == request.UserId)",
      "purpose": ".Where(e => e.UserId == request.UserId)",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-e-e-userid-request-userid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:v4goxe:where-u-allcandidateids-contains-u-id",
      "kind": "store",
      "canonicalName": ".Where(u => allCandidateIds.Contains(u.Id))",
      "shortLabel": ".Where(u => allCandidateIds.Contains(u.Id))",
      "longLabel": ".Where(u => allCandidateIds.Contains(u.Id))",
      "purpose": ".Where(u => allCandidateIds.Contains(u.Id))",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "where-u-allcandidateids-contains-u-id"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:vnp9jg:statusmessage-b-d-result-errors-firstordefault-m",
      "kind": "store",
      "canonicalName": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "shortLabel": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "longLabel": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "purpose": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization",
        "data"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "statusmessage-b-d-result-errors-firstordefault-message-nie-uda-o-si-wczyta-tre-ci"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:w36z93:public-task-author-findauthorbynameasync-string-",
      "kind": "store",
      "canonicalName": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "shortLabel": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "longLabel": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "purpose": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "public-task-author-findauthorbynameasync-string-name-cancellationtoken-cancellationtoken-default-throw-new-notsupportedexception-errormessage"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:w8w2rh:var-selectednode-graph-nodes-firstordefault-n-n-",
      "kind": "store",
      "canonicalName": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "shortLabel": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "longLabel": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "purpose": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-selectednode-graph-nodes-firstordefault-n-n-id-nodeid"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:wn8shr:var-connectedlinks-graph-links-where-l-l-source-",
      "kind": "store",
      "canonicalName": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "shortLabel": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "longLabel": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "purpose": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "var-connectedlinks-graph-links-where-l-l-source-nodeid-l-target-nodeid-tolist"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "store:ytmheg:dbcontext-roles-add-new-identityrole-name-rolena",
      "kind": "store",
      "canonicalName": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "shortLabel": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "longLabel": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "purpose": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "boundary": {
        "role": "data-store",
        "layer": "data",
        "boundaryHints": [
          "data-store",
          "data",
          "dbcontext-roles-add-new-identityrole-name-rolename-normalizedname-rolename-toupper"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:10b7z70:semanticknowledgecache",
      "kind": "type",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 58,
      "canonicalName": "SemanticKnowledgeCache",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "SemanticKnowledgeCache (entity)",
      "purpose": "Stores cached semantic embeddings/metadata keyed by content hash to avoid recomputation.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1143kg0:mainapplication",
      "kind": "type",
      "fileId": "file:p180ke:mainapplication-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
      "line": 10,
      "canonicalName": "MainApplication",
      "shortLabel": "MainApplication",
      "longLabel": "MainApplication (model)",
      "purpose": "Android Application subclass that bootstraps the MAUI app on Android and provides platform-specific startup behavior.",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:11qfbw:knowledgepacket",
      "kind": "type",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "line": 19,
      "canonicalName": "KnowledgePacket",
      "shortLabel": "KnowledgePacket",
      "longLabel": "KnowledgePacket (dto)",
      "purpose": "Aggregates concepts, quizzes, units, links, optional graph data, and a summary into a single serializable package.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:11syh06:subscriptionplans-table",
      "kind": "type",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "line": 156,
      "canonicalName": "SubscriptionPlans (table)",
      "shortLabel": "SubscriptionPlans (table)",
      "longLabel": "SubscriptionPlans (table) (entity)",
      "purpose": "Represents normalized subscription plans with token limits, pricing and Stripe product mapping.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:11t8gjy:appdbcontextmodelsnapshot",
      "kind": "type",
      "fileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
      "line": 15,
      "canonicalName": "AppDbContextModelSnapshot",
      "shortLabel": "AppDbContextModelSnapshot",
      "longLabel": "AppDbContextModelSnapshot (model)",
      "purpose": "Generated EF Core ModelSnapshot class that captures the compiled model for AppDbContext used by the migrations system.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "appdbcontextmodelsnapshot-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:11vxpr5:prouserrequirement",
      "kind": "type",
      "fileId": "file:1vi6r42:prouserrequirement-cs",
      "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
      "line": 8,
      "canonicalName": "ProUserRequirement",
      "shortLabel": "ProUserRequirement",
      "longLabel": "ProUserRequirement (model)",
      "purpose": "Marker requirement indicating the user must have an active Pro subscription or sufficient AI tokens for authorization policies.",
      "domainTags": [
        "pro-subscription",
        "ai-tokens",
        "authorization-requirement",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-policy"
      ],
      "boundary": {
        "role": "middleware",
        "layer": "application",
        "boundaryHints": [
          "middleware",
          "application",
          "nexusreader-application",
          "security",
          "authorization"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:120koss:nexusbutton-parameters-component-props",
      "kind": "type",
      "fileId": "file:1bp3my2:nexusbutton-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
      "line": 5,
      "canonicalName": "NexusButton parameters (component props)",
      "shortLabel": "NexusButton parameters (component props)",
      "longLabel": "NexusButton parameters (component props) (view-model)",
      "purpose": "Represents the publicly configurable properties for the NexusButton component.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexusbutton"
      ],
      "technologyTags": [
        "component",
        "eventcallback",
        "attribute-forwarding",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusbutton-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:12mtiix:knowledgeunitlink-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 280,
      "canonicalName": "KnowledgeUnitLink (model configured)",
      "shortLabel": "KnowledgeUnitLink (model configured)",
      "longLabel": "KnowledgeUnitLink (model configured) (entity)",
      "purpose": "Represents directed relations between KnowledgeUnits (source -> target) with relation type.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:13day2p:nexusreader-domain-entities-knowledgeunit",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 209,
      "canonicalName": "NexusReader.Domain.Entities.KnowledgeUnit",
      "shortLabel": "NexusReader.Domain.Entities.KnowledgeUnit",
      "longLabel": "NexusReader.Domain.Entities.KnowledgeUnit (entity)",
      "purpose": "Vectorized knowledge unit used for semantic search and storage",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14djij0:infrastructuremarker",
      "kind": "type",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "line": 141,
      "canonicalName": "InfrastructureMarker",
      "shortLabel": "InfrastructureMarker",
      "longLabel": "InfrastructureMarker (model)",
      "purpose": "Internal concrete implementation of IInfrastructureMarker used solely to register a marker instance in DI.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14glqwn:selectioncoordinates",
      "kind": "type",
      "fileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "line": 16,
      "canonicalName": "SelectionCoordinates",
      "shortLabel": "SelectionCoordinates",
      "longLabel": "SelectionCoordinates (dto)",
      "purpose": "Represents the coordinates (top, left) and width of a text selection in UI units.",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireaderinteractionservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14gvkuy:loginresponse",
      "kind": "type",
      "fileId": "file:b8uv8h:identityservice-cs",
      "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
      "line": 252,
      "canonicalName": "LoginResponse",
      "shortLabel": "LoginResponse",
      "longLabel": "LoginResponse (dto)",
      "purpose": "Local DTO used to deserialize login/refresh responses (token, expiry, refresh token).",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "identityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14omw7a:knowledgerequest",
      "kind": "type",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 566,
      "canonicalName": "KnowledgeRequest",
      "shortLabel": "KnowledgeRequest",
      "longLabel": "KnowledgeRequest (dto)",
      "purpose": "DTO for knowledge-related API calls containing input text and optional ebook id.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14vwagc:ebookrepository",
      "kind": "type",
      "fileId": "file:veuxa3:ebookrepository-cs",
      "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "line": 12,
      "canonicalName": "EbookRepository",
      "shortLabel": "EbookRepository",
      "longLabel": "EbookRepository (model)",
      "purpose": "Concrete EF Core repository implementing IEbookRepository to manage Ebook and Author entities using AppDbContext.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "boundary": {
        "role": "repository",
        "layer": "infrastructure",
        "boundaryHints": [
          "repository",
          "infrastructure",
          "nexusreader-infrastructure",
          "persistence",
          "ebookrepository-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:14w07kf:nexusreader-domain-entities-subscriptionplan",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 467,
      "canonicalName": "NexusReader.Domain.Entities.SubscriptionPlan",
      "shortLabel": "NexusReader.Domain.Entities.SubscriptionPlan",
      "longLabel": "NexusReader.Domain.Entities.SubscriptionPlan (entity)",
      "purpose": "Subscription plan catalog with token limits, price and Stripe product id; seeded by migration",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:15iy4fl:textsegmentblock",
      "kind": "type",
      "fileId": "file:1rikffk:viewmodels-cs",
      "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "line": 8,
      "canonicalName": "TextSegmentBlock",
      "shortLabel": "TextSegmentBlock",
      "longLabel": "TextSegmentBlock (model)",
      "purpose": "Represents a text segment block containing textual content.",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:15ow7t1:nexusreader-domain-entities-nexususer",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 287,
      "canonicalName": "NexusReader.Domain.Entities.NexusUser",
      "shortLabel": "NexusReader.Domain.Entities.NexusUser",
      "longLabel": "NexusReader.Domain.Entities.NexusUser (entity)",
      "purpose": "Application user mapped to AspNetUsers with subscription and tenant info",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:165f8vd:searchlibrarysemanticallyqueryhandler",
      "kind": "type",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "line": 22,
      "canonicalName": "SearchLibrarySemanticallyQueryHandler",
      "shortLabel": "SearchLibrarySemanticallyQueryHandler",
      "longLabel": "SearchLibrarySemanticallyQueryHandler (model)",
      "purpose": "MediatR handler that orchestrates embedding generation, resilient execution, DB similarity query and mapping to DTOs.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:16mxgid:ifocusmodeservice",
      "kind": "type",
      "fileId": "file:xs3ks1:ifocusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "line": 3,
      "canonicalName": "IFocusModeService",
      "shortLabel": "IFocusModeService",
      "longLabel": "IFocusModeService (interface)",
      "purpose": "Contract for a UI-level service that manages focus mode state, initialization, toggling, and change notifications.",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ifocusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:16wdv5z:promptregistry",
      "kind": "type",
      "fileId": "file:ha7eft:promptregistry-cs",
      "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
      "line": 3,
      "canonicalName": "PromptRegistry",
      "shortLabel": "PromptRegistry",
      "longLabel": "PromptRegistry (model)",
      "purpose": "Static registry class containing constant prompt strings for LLM-driven extraction and summarization tasks.",
      "domainTags": [
        "knowledge-extraction",
        "knowledge-graph",
        "quiz-generation",
        "knowledge-unit-segmentation"
      ],
      "technologyTags": [
        "dotnet",
        "registry",
        "constants"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "promptregistry-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:16wzuux:nexususer",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 305,
      "canonicalName": "NexusUser",
      "shortLabel": "NexusUser",
      "longLabel": "NexusUser (entity)",
      "purpose": "Application user record mapped to AspNetUsers with tenant and subscription data.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:17161bt:searchlibrarysemanticallyquery",
      "kind": "type",
      "fileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
      "line": 19,
      "canonicalName": "SearchLibrarySemanticallyQuery",
      "shortLabel": "SearchLibrarySemanticallyQuery",
      "longLabel": "SearchLibrarySemanticallyQuery (query)",
      "purpose": "CQRS request record carrying query text, tenant id and optional limit for semantic search.",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:18ezfq6:getinitializationstatusquery",
      "kind": "type",
      "fileId": "file:1m26se1:getinitializationstatusquery-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
      "line": 5,
      "canonicalName": "GetInitializationStatusQuery",
      "shortLabel": "GetInitializationStatusQuery",
      "longLabel": "GetInitializationStatusQuery (query)",
      "purpose": "Represents a request message for retrieving initialization status; a marker query returning a string result.",
      "domainTags": [
        "initializationstatus",
        "nexusreader",
        "queries",
        "system"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "query-object"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:18g2en:aspnetroles",
      "kind": "type",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 15,
      "canonicalName": "AspNetRoles",
      "shortLabel": "AspNetRoles",
      "longLabel": "AspNetRoles (entity)",
      "purpose": "Identity roles table used by ASP.NET Identity.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:19fc1gq:ebook",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 180,
      "canonicalName": "Ebook",
      "shortLabel": "Ebook",
      "longLabel": "Ebook (entity)",
      "purpose": "Represents an ebook record with owner, author, and tenant scoping.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:19jp6ev:knowledgeunits-table",
      "kind": "type",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "line": 137,
      "canonicalName": "KnowledgeUnits (table)",
      "shortLabel": "KnowledgeUnits (table)",
      "longLabel": "KnowledgeUnits (table) (entity)",
      "purpose": "Stores normalized knowledge unit records with tenant scoping and vector embedding for semantic search.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:19q79ms:authenticationheaderhandler",
      "kind": "type",
      "fileId": "file:17v8pus:authenticationheaderhandler-cs",
      "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
      "line": 14,
      "canonicalName": "AuthenticationHeaderHandler",
      "shortLabel": "AuthenticationHeaderHandler",
      "longLabel": "AuthenticationHeaderHandler (model)",
      "purpose": "Delegating handler that secures outgoing HTTP calls by attaching and refreshing JWTs.",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "boundary": {
        "role": "handler",
        "layer": "infrastructure",
        "boundaryHints": [
          "handler",
          "infrastructure",
          "nexusreader-web-client",
          "handlers",
          "authenticationheaderhandler-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1a1s3lb:icommandhandler-tcommand-tresponse",
      "kind": "type",
      "fileId": "file:kgb933:icommandhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
      "line": 11,
      "canonicalName": "ICommandHandler<TCommand, TResponse>",
      "shortLabel": "ICommandHandler<TCommand, TResponse>",
      "longLabel": "ICommandHandler<TCommand, TResponse> (interface)",
      "purpose": "Contract for handling command messages that return a typed response wrapped in FluentResults.Result<TResponse>.",
      "domainTags": [
        "command",
        "result-operation-outcome",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "command-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1a7gg4i:fixknowledgeunitebookid",
      "kind": "type",
      "fileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
      "line": 9,
      "canonicalName": "FixKnowledgeUnitEbookId",
      "shortLabel": "FixKnowledgeUnitEbookId",
      "longLabel": "FixKnowledgeUnitEbookId (model)",
      "purpose": "EF Core Migration class that applies and reverts schema changes to replace SourceId with EbookId on KnowledgeUnits.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1a84if1:groundednessresult",
      "kind": "type",
      "fileId": "file:pvs6tn:iknowledgeservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
      "line": 19,
      "canonicalName": "GroundednessResult",
      "shortLabel": "GroundednessResult",
      "longLabel": "GroundednessResult (dto)",
      "purpose": "Represents the outcome of a groundedness check with score, rationale, and boolean flag.",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iknowledgeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1af3t0x:focusmodeservice",
      "kind": "type",
      "fileId": "file:1953stk:focusmodeservice-cs",
      "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
      "line": 5,
      "canonicalName": "FocusModeService",
      "shortLabel": "FocusModeService",
      "longLabel": "FocusModeService (model)",
      "purpose": "Service to manage a user-selectable 'focus mode' state, persistence, and notifications.",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "focusmodeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1agxbak:semanticknowledgecache-entity-mapping",
      "kind": "type",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "line": 307,
      "canonicalName": "SemanticKnowledgeCache (entity mapping)",
      "shortLabel": "SemanticKnowledgeCache (entity mapping)",
      "longLabel": "SemanticKnowledgeCache (entity mapping) (entity)",
      "purpose": "Caches semantic knowledge artifacts keyed by content hash for reuse (stored as JSON), persisted in SemanticKnowledgeCache.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1b16u65:localepubmetadata",
      "kind": "type",
      "fileId": "file:485hwz:localepubmetadata-cs",
      "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
      "line": 6,
      "canonicalName": "LocalEpubMetadata",
      "shortLabel": "LocalEpubMetadata",
      "longLabel": "LocalEpubMetadata (dto)",
      "purpose": "Represents metadata extracted from a local EPUB file for query/transfer purposes.",
      "domainTags": [
        "epub",
        "book",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1b5mqrj:throwingembeddinggenerator",
      "kind": "type",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 66,
      "canonicalName": "ThrowingEmbeddingGenerator",
      "shortLabel": "ThrowingEmbeddingGenerator",
      "longLabel": "ThrowingEmbeddingGenerator (model)",
      "purpose": "IEmbeddingGenerator stub that throws on GenerateAsync to prevent embedding generation in WASM.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1bqutxs:knowledgeunitdto",
      "kind": "type",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "line": 16,
      "canonicalName": "KnowledgeUnitDto",
      "shortLabel": "KnowledgeUnitDto",
      "longLabel": "KnowledgeUnitDto (dto)",
      "purpose": "Represents a single knowledge unit with optional metadata.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1cq4i8l:app",
      "kind": "type",
      "fileId": "file:62lucr:app-xaml-cs",
      "path": "NexusReader.Maui/App.xaml.cs",
      "line": 3,
      "canonicalName": "App",
      "shortLabel": "App",
      "longLabel": "App (model)",
      "purpose": "MAUI Application subclass that bootstraps the UI and provides the root MainPage.",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-maui",
          "app-xaml-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1cvgax3:subscriptionplan",
      "kind": "type",
      "fileId": "file:1b03oou:subscriptionplan-cs",
      "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "line": 5,
      "canonicalName": "SubscriptionPlan",
      "shortLabel": "SubscriptionPlan",
      "longLabel": "SubscriptionPlan (entity)",
      "purpose": "Represents a subscription tier including identifiers, human name, token limits, pricing, and Stripe product mapping.",
      "domainTags": [
        "subscriptionplan",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "dataannotations-ef-core"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "subscriptionplan-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1d5hut9:author-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 162,
      "canonicalName": "Author (model configured)",
      "shortLabel": "Author (model configured)",
      "longLabel": "Author (model configured) (entity)",
      "purpose": "Book author with a collection of Ebooks.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1dhn7tl:throwingebookrepository",
      "kind": "type",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 84,
      "canonicalName": "ThrowingEbookRepository",
      "shortLabel": "ThrowingEbookRepository",
      "longLabel": "ThrowingEbookRepository (model)",
      "purpose": "IEbookRepository stub that throws for all repository operations to force use of server API.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1dhxtbx:mauiprogram",
      "kind": "type",
      "fileId": "file:1uay25w:mauiprogram-cs",
      "path": "NexusReader.Maui/MauiProgram.cs",
      "line": 10,
      "canonicalName": "MauiProgram",
      "shortLabel": "MauiProgram",
      "longLabel": "MauiProgram (model)",
      "purpose": "Static bootstrap helper class that exposes CreateMauiApp used to initialize the MAUI app.",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "unknown",
        "boundaryHints": [
          "program-entry",
          "unknown",
          "nexusreader-maui",
          "mauiprogram-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1djp2cc:subscriptionplan",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 467,
      "canonicalName": "SubscriptionPlan",
      "shortLabel": "SubscriptionPlan",
      "longLabel": "SubscriptionPlan (entity)",
      "purpose": "Represents subscription tiers including AI token limits and a flag for unlimited tokens; seeded with default plans.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1dtv9c0:nexususer-entity-mapping",
      "kind": "type",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "line": 200,
      "canonicalName": "NexusUser (entity mapping)",
      "shortLabel": "NexusUser (entity mapping)",
      "longLabel": "NexusUser (entity mapping) (entity)",
      "purpose": "Application user (extends IdentityUser) persisted in AspNetUsers with authentication/tenant and AI token tracking fields.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1e3plwu:makeknowledgeunitebookidnullable",
      "kind": "type",
      "fileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
      "line": 9,
      "canonicalName": "MakeKnowledgeUnitEbookIdNullable",
      "shortLabel": "MakeKnowledgeUnitEbookIdNullable",
      "longLabel": "MakeKnowledgeUnitEbookIdNullable (model)",
      "purpose": "Represents an EF Core migration that changes the EbookId nullability on KnowledgeUnits.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1eqmnca:ingestebookrequest",
      "kind": "type",
      "fileId": "file:1qcpa0s:ingestebookrequest-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs",
      "line": 3,
      "canonicalName": "IngestEbookRequest",
      "shortLabel": "IngestEbookRequest",
      "longLabel": "IngestEbookRequest (command)",
      "purpose": "Payload/DTO for requesting ingestion of an ebook into the library.",
      "domainTags": [
        "ebook",
        "library",
        "ingestion",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "command",
        "dto"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1f52ore:dependencyinjection",
      "kind": "type",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "line": 29,
      "canonicalName": "DependencyInjection",
      "shortLabel": "DependencyInjection",
      "longLabel": "DependencyInjection (type-alias)",
      "purpose": "Static DI composition class that exposes AddInfrastructure and the assembly reference for the Infrastructure layer.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1f6rpfs:addquizresults",
      "kind": "type",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "line": 9,
      "canonicalName": "AddQuizResults",
      "shortLabel": "AddQuizResults",
      "longLabel": "AddQuizResults (model)",
      "purpose": "EF Core Migration class that applies schema changes to add QuizResults and rollback.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1fj6zpl:addebooklastchapterindex",
      "kind": "type",
      "fileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
      "line": 17,
      "canonicalName": "AddEbookLastChapterIndex",
      "shortLabel": "AddEbookLastChapterIndex",
      "longLabel": "AddEbookLastChapterIndex (model)",
      "purpose": "Partial EF Core Migration designer class representing the AddEbookLastChapterIndex migration and its model snapshot.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1fmha7h:nexususer",
      "kind": "type",
      "fileId": "file:xcxh5w:nexususer-cs",
      "path": "NexusReader.Domain/Entities/NexusUser.cs",
      "line": 7,
      "canonicalName": "NexusUser",
      "shortLabel": "NexusUser",
      "longLabel": "NexusUser (entity)",
      "purpose": "Represents a user in the NexusReader domain with tenant, subscription and AI-usage metadata plus relationships to ebooks and quiz results.",
      "domainTags": [
        "user",
        "tenant",
        "subscriptionplan",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "nexususer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1g1re12:lastreadbookdto",
      "kind": "type",
      "fileId": "file:1fs0p2c:userprofiledto-cs",
      "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "line": 31,
      "canonicalName": "LastReadBookDto",
      "shortLabel": "LastReadBookDto",
      "longLabel": "LastReadBookDto (dto)",
      "purpose": "Carries a compact summary of the last book the user was reading, for display in UI and profile pages.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1gdonul:semanticknowledgecache",
      "kind": "type",
      "fileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "line": 7,
      "canonicalName": "SemanticKnowledgeCache",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "SemanticKnowledgeCache (entity)",
      "purpose": "Represents a cached semantic artifact including original text, serialized JSON, model/prompt metadata, tenant scoping, and an optional vector embedding used for semantic search.",
      "domainTags": [
        "semanticknowledgecache",
        "embedding",
        "modelid",
        "promptversion"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-mapped-model-ef-core-style-with-data-annotations",
        "embedding-cache"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "semanticknowledgecache-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1hf0y4h:updatereadingprogresscommandhandler",
      "kind": "type",
      "fileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
      "line": 13,
      "canonicalName": "UpdateReadingProgressCommandHandler",
      "shortLabel": "UpdateReadingProgressCommandHandler",
      "longLabel": "UpdateReadingProgressCommandHandler (model)",
      "purpose": "MediatR request handler that orchestrates persistence of reading progress and broadcasting updates.",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1iyorzj:aspnetusers",
      "kind": "type",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 29,
      "canonicalName": "AspNetUsers",
      "shortLabel": "AspNetUsers",
      "longLabel": "AspNetUsers (entity)",
      "purpose": "Application users table extended with tenant and AI token tracking fields.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1j77tf7:quizresult",
      "kind": "type",
      "fileId": "file:1wyr0y8:quizresult-cs",
      "path": "NexusReader.Domain/Entities/QuizResult.cs",
      "line": 9,
      "canonicalName": "QuizResult",
      "shortLabel": "QuizResult",
      "longLabel": "QuizResult (entity)",
      "purpose": "Represents a persisted quiz attempt by a user, including score details, topic and tenant context.",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "quizresult-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1jb5rcg:askquestionrequest",
      "kind": "type",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 569,
      "canonicalName": "AskQuestionRequest",
      "shortLabel": "AskQuestionRequest",
      "longLabel": "AskQuestionRequest (dto)",
      "purpose": "DTO for asking a question against knowledge with optional ebook scope and limit.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1jbz88m:aiactiontriggerblock",
      "kind": "type",
      "fileId": "file:1rikffk:viewmodels-cs",
      "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "line": 9,
      "canonicalName": "AiActionTriggerBlock",
      "shortLabel": "AiActionTriggerBlock",
      "longLabel": "AiActionTriggerBlock (model)",
      "purpose": "Represents an actionable AI-trigger block with dialogue and selectable action options.",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1jksru0:devicetype",
      "kind": "type",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 20,
      "canonicalName": "DeviceType",
      "shortLabel": "DeviceType",
      "longLabel": "DeviceType (enum)",
      "purpose": "Enumerates broad device categories.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1jmw5xq:knowledgeunittype",
      "kind": "type",
      "fileId": "file:17um7nh:knowledgeunittype-cs",
      "path": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "line": 3,
      "canonicalName": "KnowledgeUnitType",
      "shortLabel": "KnowledgeUnitType",
      "longLabel": "KnowledgeUnitType (enum)",
      "purpose": "Enumerates the possible kinds of knowledge units (Section, Table, Definition, etc.) used by the domain.",
      "domainTags": [
        "knowledgeunit",
        "section",
        "table",
        "definition"
      ],
      "technologyTags": [
        "dotnet",
        "enum"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "enums",
          "knowledgeunittype-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1juajpg:makeknowledgeunitebookidnullable",
      "kind": "type",
      "fileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
      "line": 17,
      "canonicalName": "MakeKnowledgeUnitEbookIdNullable",
      "shortLabel": "MakeKnowledgeUnitEbookIdNullable",
      "longLabel": "MakeKnowledgeUnitEbookIdNullable (model)",
      "purpose": "Partial migration class representing the migration that makes KnowledgeUnit.EbookId nullable and supplies the target model snapshot.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1l23zuf:addebookreadyflag",
      "kind": "type",
      "fileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
      "line": 17,
      "canonicalName": "AddEbookReadyFlag",
      "shortLabel": "AddEbookReadyFlag",
      "longLabel": "AddEbookReadyFlag (model)",
      "purpose": "Partial migration class representing the AddEbookReadyFlag migration (contains BuildTargetModel snapshot).",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1l8om0z:planconstants",
      "kind": "type",
      "fileId": "file:qqutlm:planconstants-cs",
      "path": "NexusReader.Application/Constants/PlanConstants.cs",
      "line": 3,
      "canonicalName": "PlanConstants",
      "shortLabel": "PlanConstants",
      "longLabel": "PlanConstants (model)",
      "purpose": "Static holder for default plan-related constants used by the application.",
      "domainTags": [
        "plan",
        "tokenlimit",
        "activitylabel",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "application",
        "boundaryHints": [
          "unknown",
          "application",
          "nexusreader-application",
          "constants",
          "planconstants-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1lq0yf5:signalrsyncbroadcaster",
      "kind": "type",
      "fileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "line": 11,
      "canonicalName": "SignalRSyncBroadcaster",
      "shortLabel": "SignalRSyncBroadcaster",
      "longLabel": "SignalRSyncBroadcaster (model)",
      "purpose": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "signalrsyncbroadcaster-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1m6ptus:authordto",
      "kind": "type",
      "fileId": "file:e05hy9:authordto-cs",
      "path": "NexusReader.Application/DTOs/User/AuthorDto.cs",
      "line": 3,
      "canonicalName": "AuthorDto",
      "shortLabel": "AuthorDto",
      "longLabel": "AuthorDto (dto)",
      "purpose": "Carries author identity and display name across application boundaries.",
      "domainTags": [
        "author",
        "user",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "immutable-record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1mmobgz:themeservice",
      "kind": "type",
      "fileId": "file:i1pwrm:themeservice-cs",
      "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
      "line": 3,
      "canonicalName": "ThemeService",
      "shortLabel": "ThemeService",
      "longLabel": "ThemeService (model)",
      "purpose": "Service that holds theme state and exposes an event to notify consumers when the theme changes.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "themeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1mrj3g3:quizdto",
      "kind": "type",
      "fileId": "file:uhcd4x:quizviewmodels-cs",
      "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
      "line": 4,
      "canonicalName": "QuizDto",
      "shortLabel": "QuizDto",
      "longLabel": "QuizDto (dto)",
      "purpose": "Encapsulates a collection of quiz questions as the payload for quiz-related queries/responses.",
      "domainTags": [
        "quiz",
        "quizquestion",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "quiz"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1mye80d:throwingbookstorageservice",
      "kind": "type",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 74,
      "canonicalName": "ThrowingBookStorageService",
      "shortLabel": "ThrowingBookStorageService",
      "longLabel": "ThrowingBookStorageService (model)",
      "purpose": "IBookStorageService stub that throws for all file storage operations in the WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1n37540:class1",
      "kind": "type",
      "fileId": "file:43kjze:class1-cs",
      "path": "NexusReader.Infrastructure.Mobile/Class1.cs",
      "line": 3,
      "canonicalName": "Class1",
      "shortLabel": "Class1",
      "longLabel": "Class1 (model)",
      "purpose": "Empty placeholder class in the mobile infrastructure namespace; no behavior or members defined.",
      "domainTags": [
        "nexusreader-infrastructure",
        "class1"
      ],
      "technologyTags": [
        "dotnet"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "class1-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1nbofxi:mauistorageservice",
      "kind": "type",
      "fileId": "file:d17zn6:mauistorageservice-cs",
      "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
      "line": 8,
      "canonicalName": "MauiStorageService",
      "shortLabel": "MauiStorageService",
      "longLabel": "MauiStorageService (model)",
      "purpose": "Concrete MAUI implementation of INativeStorageService that adapts Preferences and SecureStorage to the application's storage abstraction.",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure-mobile",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1nn41cx:knowledgeunitlink",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 273,
      "canonicalName": "KnowledgeUnitLink",
      "shortLabel": "KnowledgeUnitLink",
      "longLabel": "KnowledgeUnitLink (entity)",
      "purpose": "Represents directed relations between knowledge units.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1nt1924:quizquestion",
      "kind": "type",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "line": 10,
      "canonicalName": "QuizQuestion",
      "shortLabel": "QuizQuestion",
      "longLabel": "QuizQuestion (dto)",
      "purpose": "Represents a quiz question with options and the index of the correct answer.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1obfu5w:addebooklastchapterindex",
      "kind": "type",
      "fileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
      "line": 8,
      "canonicalName": "AddEbookLastChapterIndex",
      "shortLabel": "AddEbookLastChapterIndex",
      "longLabel": "AddEbookLastChapterIndex (model)",
      "purpose": "EF Core migration class representing the schema change that adds/removes LastChapterIndex on Ebooks.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510171941-addebooklastchapterindex-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1oku42b:epubmetadataextractor",
      "kind": "type",
      "fileId": "file:d3gg9l:epubmetadataextractor-cs",
      "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "line": 12,
      "canonicalName": "EpubMetadataExtractor",
      "shortLabel": "EpubMetadataExtractor",
      "longLabel": "EpubMetadataExtractor (model)",
      "purpose": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "epubmetadataextractor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1p2z625:normalizeauthor",
      "kind": "type",
      "fileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
      "line": 9,
      "canonicalName": "NormalizeAuthor",
      "shortLabel": "NormalizeAuthor",
      "longLabel": "NormalizeAuthor (model)",
      "purpose": "EF Core migration class that applies and reverts schema normalization for authors.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1p6mlsn:nexususer-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 312,
      "canonicalName": "NexusUser (model configured)",
      "shortLabel": "NexusUser (model configured)",
      "longLabel": "NexusUser (model configured) (entity)",
      "purpose": "Application user with subscription & usage tracking fields plus identity columns.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1p7g8wz:ingestresult",
      "kind": "type",
      "fileId": "file:8kve74:bookingestionmodal-razor",
      "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
      "line": 244,
      "canonicalName": "IngestResult",
      "shortLabel": "IngestResult",
      "longLabel": "IngestResult (dto)",
      "purpose": "Represents the server response when an ebook is ingested; contains the new book Id.",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "organisms",
          "bookingestionmodal-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1pi9458:knowledgeunitlinks-table",
      "kind": "type",
      "fileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
      "line": 172,
      "canonicalName": "KnowledgeUnitLinks (table)",
      "shortLabel": "KnowledgeUnitLinks (table)",
      "longLabel": "KnowledgeUnitLinks (table) (entity)",
      "purpose": "Associative links between knowledge units to model relations; enforces FK constraints to KnowledgeUnits.",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1qfkwqz:semanticsearchresultdto",
      "kind": "type",
      "fileId": "file:1k69za4:semanticsearchresultdto-cs",
      "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
      "line": 3,
      "canonicalName": "SemanticSearchResultDto",
      "shortLabel": "SemanticSearchResultDto",
      "longLabel": "SemanticSearchResultDto (dto)",
      "purpose": "Carries the result of a semantic search (content hash, snippet, relevance, source and optional metadata).",
      "domainTags": [
        "semanticsearch",
        "ai",
        "searchresult",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1qhatfu:displayorientation",
      "kind": "type",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 28,
      "canonicalName": "DisplayOrientation",
      "shortLabel": "DisplayOrientation",
      "longLabel": "DisplayOrientation (enum)",
      "purpose": "Enumerates display orientations.",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1rcw5yd:nexusauthenticationstateprovider",
      "kind": "type",
      "fileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
      "line": 9,
      "canonicalName": "NexusAuthenticationStateProvider",
      "shortLabel": "NexusAuthenticationStateProvider",
      "longLabel": "NexusAuthenticationStateProvider (model)",
      "purpose": "Authentication state provider that derives authentication information from secure native storage and exposes state changes to Blazor components.",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "nexusauthenticationstateprovider-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1rne00x:knowledgelinkdto",
      "kind": "type",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "line": 17,
      "canonicalName": "KnowledgeLinkDto",
      "shortLabel": "KnowledgeLinkDto",
      "longLabel": "KnowledgeLinkDto (dto)",
      "purpose": "Represents a directed relation/link between two knowledge units.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1sbj28q:syncservice",
      "kind": "type",
      "fileId": "file:1la6lrw:syncservice-cs",
      "path": "NexusReader.UI.Shared/Services/SyncService.cs",
      "line": 8,
      "canonicalName": "SyncService",
      "shortLabel": "SyncService",
      "longLabel": "SyncService (model)",
      "purpose": "Encapsulates client synchronization logic for reading progress via SignalR, providing initialization, debounced update sending, event exposure, and disposal.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "syncservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1si295l:appjsoncontext",
      "kind": "type",
      "fileId": "file:wxheam:appjsoncontext-cs",
      "path": "NexusReader.Application/Common/AppJsonContext.cs",
      "line": 12,
      "canonicalName": "AppJsonContext",
      "shortLabel": "AppJsonContext",
      "longLabel": "AppJsonContext (model)",
      "purpose": "A source-generated JsonSerializerContext subclass configured to include serialization metadata for Graph DTO types and to emit indented JSON.",
      "domainTags": [
        "graph",
        "graphnode",
        "graphlink",
        "graphdata"
      ],
      "technologyTags": [
        "dotnet",
        "source-generator",
        "serialization-context"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "appjsoncontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1sj29na:fixknowledgeunitebookid",
      "kind": "type",
      "fileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
      "line": 17,
      "canonicalName": "FixKnowledgeUnitEbookId",
      "shortLabel": "FixKnowledgeUnitEbookId",
      "longLabel": "FixKnowledgeUnitEbookId (model)",
      "purpose": "Partial migration class representing the migration snapshot and model-building logic for 'FixKnowledgeUnitEbookId'.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1t001js:bookid",
      "kind": "type",
      "fileId": "file:h6mj95:home-razor",
      "path": "NexusReader.UI.Shared/Pages/Home.razor",
      "line": 21,
      "canonicalName": "BookId",
      "shortLabel": "BookId",
      "longLabel": "BookId (type-alias)",
      "purpose": "Component Parameter holding optional route BookId (Guid?).",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "home-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1tp07fo:nexussearchbox-component",
      "kind": "type",
      "fileId": "file:igeyi7:nexussearchbox-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
      "line": 1,
      "canonicalName": "NexusSearchBox (component)",
      "shortLabel": "NexusSearchBox (component)",
      "longLabel": "NexusSearchBox (component) (view-model)",
      "purpose": "Represents the search box component and its parameters/state for use in Razor UI.",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexussearchbox-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1trrs3x:author",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 162,
      "canonicalName": "Author",
      "shortLabel": "Author",
      "longLabel": "Author (entity)",
      "purpose": "Represents an ebook author; mapped to Authors table.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1tv21lf:quizresults-table-schema",
      "kind": "type",
      "fileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
      "line": 14,
      "canonicalName": "QuizResults (table schema)",
      "shortLabel": "QuizResults (table schema)",
      "longLabel": "QuizResults (table schema) (entity)",
      "purpose": "Represents the database table schema created by this migration.",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1tyno9s:appdbcontextfactory",
      "kind": "type",
      "fileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
      "line": 8,
      "canonicalName": "AppDbContextFactory",
      "shortLabel": "AppDbContextFactory",
      "longLabel": "AppDbContextFactory (model)",
      "purpose": "Design-time factory to create AppDbContext instances for EF Core tooling.",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "unknown",
        "boundaryHints": [
          "unknown",
          "nexusreader-data",
          "persistence",
          "appdbcontextfactory-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1u9bw06:getuserprofilequery",
      "kind": "type",
      "fileId": "file:vjfxh7:getuserprofilequery-cs",
      "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
      "line": 7,
      "canonicalName": "GetUserProfileQuery",
      "shortLabel": "GetUserProfileQuery",
      "longLabel": "GetUserProfileQuery (query)",
      "purpose": "Represents a request message to fetch a user's profile given a UserId.",
      "domainTags": [
        "user",
        "userprofile",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-request-message"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1vae1rw:inativestorageservice",
      "kind": "type",
      "fileId": "file:1it42kj:inativestorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
      "line": 5,
      "canonicalName": "INativeStorageService",
      "shortLabel": "INativeStorageService",
      "longLabel": "INativeStorageService (interface)",
      "purpose": "Abstraction for platform-specific key-value storage operations (secure and non-secure) used by application components.",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "inativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1w5eq5k:semanticknowledgecache-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 447,
      "canonicalName": "SemanticKnowledgeCache (model configured)",
      "shortLabel": "SemanticKnowledgeCache (model configured)",
      "longLabel": "SemanticKnowledgeCache (model configured) (entity)",
      "purpose": "Cache of semantic embeddings and JSON response data per tenant and model/version to avoid recomputation.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1wumbre:initialpostgres",
      "kind": "type",
      "fileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
      "line": 16,
      "canonicalName": "InitialPostgres",
      "shortLabel": "InitialPostgres",
      "longLabel": "InitialPostgres (model)",
      "purpose": "Partial EF Core Migration class representing the InitialPostgres migration; contains BuildTargetModel to describe the schema.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1wz8rxq:nexusicon-component-parameters",
      "kind": "type",
      "fileId": "file:q8opk3:nexusicon-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "line": 96,
      "canonicalName": "NexusIcon (component parameters)",
      "shortLabel": "NexusIcon (component parameters)",
      "longLabel": "NexusIcon (component parameters) (view-model)",
      "purpose": "Component parameter definitions that control which icon is rendered and how (size, css class, extra attributes).",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexusicon-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1y9p8ya:iinfrastructuremarker",
      "kind": "type",
      "fileId": "file:r7svsj:dependencyinjection-cs",
      "path": "NexusReader.Infrastructure/DependencyInjection.cs",
      "line": 140,
      "canonicalName": "IInfrastructureMarker",
      "shortLabel": "IInfrastructureMarker",
      "longLabel": "IInfrastructureMarker (interface)",
      "purpose": "Marker interface used to identify the infrastructure assembly/types during scanning or composition.",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "boundary": {
        "role": "service-registration",
        "layer": "infrastructure",
        "boundaryHints": [
          "service-registration",
          "infrastructure",
          "nexusreader-infrastructure",
          "dependencyinjection-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1yhkunt:aspnetroleclaims-aspnetuserclaims-aspnetuserlogi",
      "kind": "type",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 73,
      "canonicalName": "AspNetRoleClaims / AspNetUserClaims / AspNetUserLogins / AspNetUserRoles / AspNetUserTokens",
      "shortLabel": "AspNetRoleClaims / AspNetUserClaims / AspNetUserLogins / AspNetUserRoles / AspNetUserTokens",
      "longLabel": "AspNetRoleClaims / AspNetUserClaims / AspNetUserLogins / AspNetUserRoles / AspNetUserTokens (entity)",
      "purpose": "Standard ASP.NET Identity auxiliary tables for claims, logins, roles and tokens.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:1yqx104:iepubreader",
      "kind": "type",
      "fileId": "file:1mo9e25:iepubreader-cs",
      "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
      "line": 9,
      "canonicalName": "IEpubReader",
      "shortLabel": "IEpubReader",
      "longLabel": "IEpubReader (interface)",
      "purpose": "Service contract that exposes EPUB reading/parsing behavior for ebooks and chapters.",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iepubreader-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:2f6m0y:subscriptionplandto",
      "kind": "type",
      "fileId": "file:9775p0:subscriptionplandto-cs",
      "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
      "line": 3,
      "canonicalName": "SubscriptionPlanDto",
      "shortLabel": "SubscriptionPlanDto",
      "longLabel": "SubscriptionPlanDto (dto)",
      "purpose": "Carries subscription plan details (id, name, AI token limits, and price) across boundaries.",
      "domainTags": [
        "subscriptionplan",
        "billing",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record-c-9"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:30kk08:nexusreader-domain-entities-semanticknowledgecac",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 422,
      "canonicalName": "NexusReader.Domain.Entities.SemanticKnowledgeCache",
      "shortLabel": "NexusReader.Domain.Entities.SemanticKnowledgeCache",
      "longLabel": "NexusReader.Domain.Entities.SemanticKnowledgeCache (entity)",
      "purpose": "Cached semantic results with embedding vector and prompt/model metadata",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:3fxux:icommand",
      "kind": "type",
      "fileId": "file:gg5jm5:icommand-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
      "line": 6,
      "canonicalName": "ICommand",
      "shortLabel": "ICommand",
      "longLabel": "ICommand (interface)",
      "purpose": "Marker interface for commands that produce a FluentResults.Result with no payload via MediatR.",
      "domainTags": [
        "command",
        "nexusreader",
        "abstractions",
        "messaging"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:4o1nar:semanticknowledgecache",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 422,
      "canonicalName": "SemanticKnowledgeCache",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "SemanticKnowledgeCache (entity)",
      "purpose": "Caches semantic embedding results with original text, model and tenant scoping.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:4pccjy:mainactivity",
      "kind": "type",
      "fileId": "file:1246987:mainactivity-cs",
      "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
      "line": 9,
      "canonicalName": "MainActivity",
      "shortLabel": "MainActivity",
      "longLabel": "MainActivity (entity)",
      "purpose": "Android Activity class that serves as the MAUI application entry point on Android.",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "frontend",
        "boundaryHints": [
          "program-entry",
          "frontend",
          "nexusreader-maui",
          "platforms",
          "android"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:4pvcwi:getreaderpagequeryhandler",
      "kind": "type",
      "fileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
      "line": 7,
      "canonicalName": "GetReaderPageQueryHandler",
      "shortLabel": "GetReaderPageQueryHandler",
      "longLabel": "GetReaderPageQueryHandler (model)",
      "purpose": "Internal query handler class that coordinates fetching reader page content via IEpubReader.",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:4tuqh6:graphlinkdto",
      "kind": "type",
      "fileId": "file:1c4q2p1:graphviewmodels-cs",
      "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "line": 4,
      "canonicalName": "GraphLinkDto",
      "shortLabel": "GraphLinkDto",
      "longLabel": "GraphLinkDto (dto)",
      "purpose": "Represents an edge/link between two nodes with a relation type and a numeric value/weight.",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:52venu:adddescriptiontoebook",
      "kind": "type",
      "fileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
      "line": 17,
      "canonicalName": "AddDescriptionToEbook",
      "shortLabel": "AddDescriptionToEbook",
      "longLabel": "AddDescriptionToEbook (model)",
      "purpose": "Partial EF Core Migration class that contains the BuildTargetModel snapshot for the 'AddDescriptionToEbook' migration.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:58td3x:groundedresponsedto",
      "kind": "type",
      "fileId": "file:1bdy8y4:groundedresponsedto-cs",
      "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
      "line": 5,
      "canonicalName": "GroundedResponseDto",
      "shortLabel": "GroundedResponseDto",
      "longLabel": "GroundedResponseDto (dto)",
      "purpose": "Represents a grounded AI answer plus associated citations.",
      "domainTags": [
        "grounded-ai-response",
        "citation",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "poco"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5b8im:quizquestiondto",
      "kind": "type",
      "fileId": "file:uhcd4x:quizviewmodels-cs",
      "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
      "line": 3,
      "canonicalName": "QuizQuestionDto",
      "shortLabel": "QuizQuestionDto",
      "longLabel": "QuizQuestionDto (dto)",
      "purpose": "Represents a single quiz question with its options and the index of the correct option.",
      "domainTags": [
        "quiz",
        "quizquestion",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "quiz"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5dm37d:ithemeservice",
      "kind": "type",
      "fileId": "file:vbuljf:ithemeservice-cs",
      "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
      "line": 3,
      "canonicalName": "IThemeService",
      "shortLabel": "IThemeService",
      "longLabel": "IThemeService (interface)",
      "purpose": "Abstraction for UI theme management exposing current mode, a change event, and a toggle operation.",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ithemeservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5hfl1o:nativestorageservice",
      "kind": "type",
      "fileId": "file:902xey:nativestorageservice-cs",
      "path": "NexusReader.Web/Services/NativeStorageService.cs",
      "line": 12,
      "canonicalName": "NativeStorageService",
      "shortLabel": "NativeStorageService",
      "longLabel": "NativeStorageService (model)",
      "purpose": "Server-side implementation class that adapts INativeStorageService to IJSRuntime-based localStorage access.",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web",
          "nativestorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5mx9m5:wasmepubmetadataextractor",
      "kind": "type",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "line": 43,
      "canonicalName": "WasmEpubMetadataExtractor",
      "shortLabel": "WasmEpubMetadataExtractor",
      "longLabel": "WasmEpubMetadataExtractor (model)",
      "purpose": "Local EPUB metadata extractor that uses VersOne.Epub to read title, author and cover image from an EPUB stream.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5sl01j:graphnodedto",
      "kind": "type",
      "fileId": "file:1c4q2p1:graphviewmodels-cs",
      "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "line": 3,
      "canonicalName": "GraphNodeDto",
      "shortLabel": "GraphNodeDto",
      "longLabel": "GraphNodeDto (dto)",
      "purpose": "Represents a single graph node with an identifier, label, grouping, and optional type metadata.",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5wsb01:mainpage",
      "kind": "type",
      "fileId": "file:ua9rra:mainpage-xaml-cs",
      "path": "NexusReader.Maui/MainPage.xaml.cs",
      "line": 3,
      "canonicalName": "MainPage",
      "shortLabel": "MainPage",
      "longLabel": "MainPage (model)",
      "purpose": "MAUI ContentPage class representing the main UI page for the app.",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-maui",
          "mainpage-xaml-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:5xf7z1:knowledgeunitlink",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 255,
      "canonicalName": "KnowledgeUnitLink",
      "shortLabel": "KnowledgeUnitLink",
      "longLabel": "KnowledgeUnitLink (entity)",
      "purpose": "Represents a directed relation/link between knowledge units.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:6i8iop:verifygroundednesscommand",
      "kind": "type",
      "fileId": "file:2eckht:verifygroundednesscommand-cs",
      "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
      "line": 7,
      "canonicalName": "VerifyGroundednessCommand",
      "shortLabel": "VerifyGroundednessCommand",
      "longLabel": "VerifyGroundednessCommand (command)",
      "purpose": "Command DTO carrying an answer, context, and tenant id to be verified for groundedness.",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:6l0ozw:readerpageviewmodel",
      "kind": "type",
      "fileId": "file:1rikffk:viewmodels-cs",
      "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "line": 11,
      "canonicalName": "ReaderPageViewModel",
      "shortLabel": "ReaderPageViewModel",
      "longLabel": "ReaderPageViewModel (view-model)",
      "purpose": "Aggregates content blocks and chapter/ebook metadata for rendering a reader page.",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:6xl8d4:nexusreader-domain-entities-quizresult",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 385,
      "canonicalName": "NexusReader.Domain.Entities.QuizResult",
      "shortLabel": "NexusReader.Domain.Entities.QuizResult",
      "longLabel": "NexusReader.Domain.Entities.QuizResult (entity)",
      "purpose": "User quiz result entries with score and topic",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:7ek9gn:aisettings",
      "kind": "type",
      "fileId": "file:11mkiaz:aisettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "line": 3,
      "canonicalName": "AiSettings",
      "shortLabel": "AiSettings",
      "longLabel": "AiSettings (dto)",
      "purpose": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
      "domainTags": [
        "ai",
        "model-selection",
        "embedding",
        "rate-retry-and-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-dto"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "aisettings-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:7fsbyq:contenthasher",
      "kind": "type",
      "fileId": "file:13kvr59:contenthasher-cs",
      "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "line": 7,
      "canonicalName": "ContentHasher",
      "shortLabel": "ContentHasher",
      "longLabel": "ContentHasher (model)",
      "purpose": "Static helper class exposing normalization and hashing utilities for content.",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "contenthasher-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:7ob3p3:nexusreader-domain-entities-ebook",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 162,
      "canonicalName": "NexusReader.Domain.Entities.Ebook",
      "shortLabel": "NexusReader.Domain.Entities.Ebook",
      "longLabel": "NexusReader.Domain.Entities.Ebook (entity)",
      "purpose": "Domain entity configuration for ebooks table",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:7t3l5d:storagekeys",
      "kind": "type",
      "fileId": "file:g197tx:storagekeys-cs",
      "path": "NexusReader.Application/Constants/StorageKeys.cs",
      "line": 3,
      "canonicalName": "StorageKeys",
      "shortLabel": "StorageKeys",
      "longLabel": "StorageKeys (model)",
      "purpose": "Container for storage key constants used throughout the application for persisting auth and user data.",
      "domainTags": [
        "authentication",
        "user",
        "nexusreader",
        "constants"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "boundary": {
        "role": "config",
        "layer": "application",
        "boundaryHints": [
          "config",
          "application",
          "nexusreader-application",
          "constants",
          "storagekeys-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:8wi1r9:adddescriptiontoebook",
      "kind": "type",
      "fileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
      "line": 8,
      "canonicalName": "AddDescriptionToEbook",
      "shortLabel": "AddDescriptionToEbook",
      "longLabel": "AddDescriptionToEbook (model)",
      "purpose": "EF Core Migration class that encapsulates the schema change to add/remove the Description column on Ebooks.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:96fzwh:ebooks",
      "kind": "type",
      "fileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
      "line": 179,
      "canonicalName": "Ebooks",
      "shortLabel": "Ebooks",
      "longLabel": "Ebooks (entity)",
      "purpose": "Represents ebooks uploaded or tracked by users in the application.",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428184727-initialpostgres-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:9todq3:bookstorageservice",
      "kind": "type",
      "fileId": "file:14qnurl:bookstorageservice-cs",
      "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "line": 10,
      "canonicalName": "BookStorageService",
      "shortLabel": "BookStorageService",
      "longLabel": "BookStorageService (model)",
      "purpose": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-infrastructure",
          "bookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:9y8b30:nexusreader-domain-entities-knowledgeunitlink",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 255,
      "canonicalName": "NexusReader.Domain.Entities.KnowledgeUnitLink",
      "shortLabel": "NexusReader.Domain.Entities.KnowledgeUnitLink",
      "longLabel": "NexusReader.Domain.Entities.KnowledgeUnitLink (entity)",
      "purpose": "Represents directional links between knowledge units",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:a2sfsr:getreaderpagequery",
      "kind": "type",
      "fileId": "file:9lh011:getreaderpagequery-cs",
      "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
      "line": 11,
      "canonicalName": "GetReaderPageQuery",
      "shortLabel": "GetReaderPageQuery",
      "longLabel": "GetReaderPageQuery (query)",
      "purpose": "Represents a request to retrieve a specific chapter (page) of a user's ebook, used in the application's query pipeline.",
      "domainTags": [
        "ebook",
        "reader",
        "chapter",
        "tenant-user"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:aqqzdn:contentblock",
      "kind": "type",
      "fileId": "file:1rikffk:viewmodels-cs",
      "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
      "line": 7,
      "canonicalName": "ContentBlock",
      "shortLabel": "ContentBlock",
      "longLabel": "ContentBlock (model)",
      "purpose": "Abstract base record for polymorphic content blocks carrying an Id.",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "reader"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:awil0x:jsonrepairhelper",
      "kind": "type",
      "fileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "line": 6,
      "canonicalName": "JsonRepairHelper",
      "shortLabel": "JsonRepairHelper",
      "longLabel": "JsonRepairHelper (model)",
      "purpose": "Static helper class that contains JSON repair utilities.",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "boundary": {
        "role": "unknown",
        "layer": "infrastructure",
        "boundaryHints": [
          "unknown",
          "infrastructure",
          "nexusreader-infrastructure",
          "helpers",
          "jsonrepairhelper-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:bldst0:nexususer",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 287,
      "canonicalName": "NexusUser",
      "shortLabel": "NexusUser",
      "longLabel": "NexusUser (entity)",
      "purpose": "Application user entity (extends IdentityUser style) with AI token tracking and subscription reference.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:bqctk6:updatesubscriptionplanisunlimitedtokens",
      "kind": "type",
      "fileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
      "line": 8,
      "canonicalName": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "shortLabel": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "longLabel": "UpdateSubscriptionPlanIsUnlimitedTokens (model)",
      "purpose": "EF Core Migration type that encapsulates schema and seed-data changes to SubscriptionPlans.",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:brf3z8:knowledgeunit",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 209,
      "canonicalName": "KnowledgeUnit",
      "shortLabel": "KnowledgeUnit",
      "longLabel": "KnowledgeUnit (entity)",
      "purpose": "Represents a chunk of semantic content with vector embedding and metadata for tenant/source.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:brf48c:subscriptionplan",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 485,
      "canonicalName": "SubscriptionPlan",
      "shortLabel": "SubscriptionPlan",
      "longLabel": "SubscriptionPlan (entity)",
      "purpose": "Represents subscription tiers and token limits; seeded with default plans.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:bzkzmt:asklibraryquestionquery",
      "kind": "type",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "line": 11,
      "canonicalName": "AskLibraryQuestionQuery",
      "shortLabel": "AskLibraryQuestionQuery",
      "longLabel": "AskLibraryQuestionQuery (query)",
      "purpose": "Represents a request to ask a question against the tenant's library (optionally scoped to an ebook) with a result limit.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:c5amk9:appdbcontext",
      "kind": "type",
      "fileId": "file:1pacvtg:appdbcontext-cs",
      "path": "NexusReader.Data/Persistence/AppDbContext.cs",
      "line": 7,
      "canonicalName": "AppDbContext",
      "shortLabel": "AppDbContext",
      "longLabel": "AppDbContext (model)",
      "purpose": "EF Core DbContext for application persistence, extending IdentityDbContext for user identity and domain entities.",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "appdbcontext-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:clecc9:error-component-backing-model",
      "kind": "type",
      "fileId": "file:1awldsb:error-razor",
      "path": "NexusReader.Web/Components/Error.razor",
      "line": 2,
      "canonicalName": "Error (component backing model)",
      "shortLabel": "Error (component backing model)",
      "longLabel": "Error (component backing model) (model)",
      "purpose": "Generated component class backing the Error.razor file; exposes a Parameter to receive an Exception instance.",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-web",
          "error-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:cn85p2:increasehashlength",
      "kind": "type",
      "fileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
      "line": 9,
      "canonicalName": "IncreaseHashLength",
      "shortLabel": "IncreaseHashLength",
      "longLabel": "IncreaseHashLength (model)",
      "purpose": "EF Core migration class that applies and reverts schema changes related to timestamp types and ContentHash length.",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:d7ymkn:quizresult",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 385,
      "canonicalName": "QuizResult",
      "shortLabel": "QuizResult",
      "longLabel": "QuizResult (entity)",
      "purpose": "Stores quiz completion results for a user and tenant.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:dgxlfz:ingestebookcommand",
      "kind": "type",
      "fileId": "file:1tk8lz4:ingestebookcommand-cs",
      "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
      "line": 15,
      "canonicalName": "IngestEbookCommand",
      "shortLabel": "IngestEbookCommand",
      "longLabel": "IngestEbookCommand (command)",
      "purpose": "Represents the data required to ingest an ebook (metadata + binary payloads) and is dispatched as a command returning a Guid identifier.",
      "domainTags": [
        "ebook",
        "library",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:dj3u3k:iquery-tresponse",
      "kind": "type",
      "fileId": "file:1k4g04u:iquery-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
      "line": 6,
      "canonicalName": "IQuery<TResponse>",
      "shortLabel": "IQuery<TResponse>",
      "longLabel": "IQuery<TResponse> (interface)",
      "purpose": "Marker interface representing a CQRS query that yields a Result-wrapped response handled by MediatR.",
      "domainTags": [
        "query",
        "result-t",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediator",
        "result-wrapping"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:dqp6wm:isyncbroadcaster",
      "kind": "type",
      "fileId": "file:441s21:isyncbroadcaster-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
      "line": 7,
      "canonicalName": "ISyncBroadcaster",
      "shortLabel": "ISyncBroadcaster",
      "longLabel": "ISyncBroadcaster (interface)",
      "purpose": "Application-layer interface abstracting real-time broadcasting behavior (keeps handlers free of SignalR dependency).",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:dvqqtf:ibillingservice",
      "kind": "type",
      "fileId": "file:rfn6bc:ibillingservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
      "line": 6,
      "canonicalName": "IBillingService",
      "shortLabel": "IBillingService",
      "longLabel": "IBillingService (interface)",
      "purpose": "Abstraction exposing billing/subscription lifecycle handlers to be implemented by infrastructure or application services.",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibillingservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:dvy3sa:submitanswercommand",
      "kind": "type",
      "fileId": "file:dskay:submitanswercommand-cs",
      "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
      "line": 5,
      "canonicalName": "SubmitAnswerCommand",
      "shortLabel": "SubmitAnswerCommand",
      "longLabel": "SubmitAnswerCommand (command)",
      "purpose": "Represents a CQRS command carrying the user's selected answer index and the correct answer index for a quiz question.",
      "domainTags": [
        "quiz",
        "answer-submission",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "quiz"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:exuypx:ebook-entity-mapping",
      "kind": "type",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "line": 160,
      "canonicalName": "Ebook (entity mapping)",
      "shortLabel": "Ebook (entity mapping)",
      "longLabel": "Ebook (entity mapping) (entity)",
      "purpose": "Represents e-book metadata persisted in Ebooks table and linked to a NexusUser.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:f4i93d:mauistorageservice",
      "kind": "type",
      "fileId": "file:7ji0h3:mauistorageservice-cs",
      "path": "NexusReader.Maui/Services/MauiStorageService.cs",
      "line": 8,
      "canonicalName": "MauiStorageService",
      "shortLabel": "MauiStorageService",
      "longLabel": "MauiStorageService (model)",
      "purpose": "Service adapter that implements INativeStorageService to provide platform-specific key/value and secure storage operations for the MAUI app.",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-maui",
          "mauistorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:ffgofm:quizresult-entity-mapping",
      "kind": "type",
      "fileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
      "line": 277,
      "canonicalName": "QuizResult (entity mapping)",
      "shortLabel": "QuizResult (entity mapping)",
      "longLabel": "QuizResult (entity mapping) (entity)",
      "purpose": "Represents a completed quiz result persisted in QuizResults and linked to a NexusUser.",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260429080302-addquizresults-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:flcquz:devicecontext",
      "kind": "type",
      "fileId": "file:wb18l0:iplatformservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
      "line": 13,
      "canonicalName": "DeviceContext",
      "shortLabel": "DeviceContext",
      "longLabel": "DeviceContext (dto)",
      "purpose": "Holds device metadata (model, manufacturer, device type, and display orientation).",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iplatformservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:g3vwaj:getinitializationstatusqueryhandler",
      "kind": "type",
      "fileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
      "line": 6,
      "canonicalName": "GetInitializationStatusQueryHandler",
      "shortLabel": "GetInitializationStatusQueryHandler",
      "longLabel": "GetInitializationStatusQueryHandler (model)",
      "purpose": "Query handler that provides a ready/initialized status string for the application.",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "system"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:g75yh:graphdatadto",
      "kind": "type",
      "fileId": "file:1c4q2p1:graphviewmodels-cs",
      "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
      "line": 5,
      "canonicalName": "GraphDataDto",
      "shortLabel": "GraphDataDto",
      "longLabel": "GraphDataDto (dto)",
      "purpose": "Container for an in-memory graph payload: lists of nodes and links prepared for queries or UI rendering.",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:gbavgv:increasehashlength",
      "kind": "type",
      "fileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
      "line": 16,
      "canonicalName": "IncreaseHashLength",
      "shortLabel": "IncreaseHashLength",
      "longLabel": "IncreaseHashLength (model)",
      "purpose": "Partial migration class representing the IncreaseHashLength EF Core migration and holding the generated BuildTargetModel.",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260428185239-increasehashlength-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:gonkkw:registermodel",
      "kind": "type",
      "fileId": "file:1hn70tz:register-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
      "line": 120,
      "canonicalName": "RegisterModel",
      "shortLabel": "RegisterModel",
      "longLabel": "RegisterModel (dto)",
      "purpose": "Model bound to the registration form with validation attributes for email and password fields.",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:gqgg0k:loginmodel",
      "kind": "type",
      "fileId": "file:csf9l7:login-razor",
      "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
      "line": 157,
      "canonicalName": "LoginModel",
      "shortLabel": "LoginModel",
      "longLabel": "LoginModel (dto)",
      "purpose": "Holds credentials and remember-me flag submitted by the login form.",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "boundary": {
        "role": "ui-page",
        "layer": "frontend",
        "boundaryHints": [
          "ui-page",
          "frontend",
          "nexusreader-ui-shared",
          "pages",
          "account"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:gqvtnh:ibookstorageservice",
      "kind": "type",
      "fileId": "file:9fivst:ibookstorageservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
      "line": 6,
      "canonicalName": "IBookStorageService",
      "shortLabel": "IBookStorageService",
      "longLabel": "IBookStorageService (interface)",
      "purpose": "Interface describing methods to persist ebooks and cover images and return their relative paths/URLs.",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "ibookstorageservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:gyab7i:groundednessrequest",
      "kind": "type",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 567,
      "canonicalName": "GroundednessRequest",
      "shortLabel": "GroundednessRequest",
      "longLabel": "GroundednessRequest (dto)",
      "purpose": "DTO for verifying groundedness of an answer against context.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:h0u00k:citationdto",
      "kind": "type",
      "fileId": "file:1bdy8y4:groundedresponsedto-cs",
      "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
      "line": 11,
      "canonicalName": "CitationDto",
      "shortLabel": "CitationDto",
      "longLabel": "CitationDto (dto)",
      "purpose": "Represents a single citation/snippet referencing source material supporting an AI response.",
      "domainTags": [
        "grounded-ai-response",
        "citation",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "poco"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:h4q16i:tokenlimitrequirement",
      "kind": "type",
      "fileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
      "line": 8,
      "canonicalName": "TokenLimitRequirement",
      "shortLabel": "TokenLimitRequirement",
      "longLabel": "TokenLimitRequirement (model)",
      "purpose": "Marker/DTO-style authorization requirement used to represent the 'token limit' policy for a user.",
      "domainTags": [
        "tokenlimit",
        "authorization-policy",
        "nexusreader",
        "identity"
      ],
      "technologyTags": [
        "dotnet",
        "policy-based-authorization",
        "requirement-authorizationrequirement"
      ],
      "boundary": {
        "role": "entity",
        "layer": "unknown",
        "boundaryHints": [
          "entity",
          "unknown",
          "nexusreader-infrastructure",
          "identity",
          "tokenlimitrequirement-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:hegy2r:relevantcontext",
      "kind": "type",
      "fileId": "file:q380me:relevantcontext-cs",
      "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
      "line": 3,
      "canonicalName": "RelevantContext",
      "shortLabel": "RelevantContext",
      "longLabel": "RelevantContext (dto)",
      "purpose": "Represents a piece of relevant textual context with its source identifier and confidence score for AI-related processing.",
      "domainTags": [
        "relevantcontext",
        "ai-context",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "data-transfer-object-dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:hhlqtu:microsoft-aspnetcore-identity-identityrole",
      "kind": "type",
      "fileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
      "line": 30,
      "canonicalName": "Microsoft.AspNetCore.Identity.IdentityRole",
      "shortLabel": "Microsoft.AspNetCore.Identity.IdentityRole",
      "longLabel": "Microsoft.AspNetCore.Identity.IdentityRole (entity)",
      "purpose": "Identity role mapping configured in the EF model for AspNetRoles table",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260503175906-finalnormalizedsubscriptionarchitecture-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:i2x134:semanticsearchrequest",
      "kind": "type",
      "fileId": "file:12rhzck:program-cs",
      "path": "NexusReader.Web/Program.cs",
      "line": 568,
      "canonicalName": "SemanticSearchRequest",
      "shortLabel": "SemanticSearchRequest",
      "longLabel": "SemanticSearchRequest (dto)",
      "purpose": "DTO for semantic search requests.",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "boundary": {
        "role": "program-entry",
        "layer": "application",
        "boundaryHints": [
          "program-entry",
          "application",
          "nexusreader-web",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:je3vog:getknowledgegraphquery",
      "kind": "type",
      "fileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
      "line": 8,
      "canonicalName": "GetKnowledgeGraphQuery",
      "shortLabel": "GetKnowledgeGraphQuery",
      "longLabel": "GetKnowledgeGraphQuery (query)",
      "purpose": "Represents a request to produce a GraphDataDto from input text for a given tenant and optional ebook.",
      "domainTags": [
        "knowledge-graph",
        "tenant",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "queryobject"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "graph"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:k9hk67:throwingdbcontextfactory",
      "kind": "type",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 61,
      "canonicalName": "ThrowingDbContextFactory",
      "shortLabel": "ThrowingDbContextFactory",
      "longLabel": "ThrowingDbContextFactory (model)",
      "purpose": "IDbContextFactory implementation that prevents EF DbContext usage in the WASM client by throwing.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:kzfhbn:ebook",
      "kind": "type",
      "fileId": "file:lcvwj6:ebook-cs",
      "path": "NexusReader.Domain/Entities/Ebook.cs",
      "line": 9,
      "canonicalName": "Ebook",
      "shortLabel": "Ebook",
      "longLabel": "Ebook (entity)",
      "purpose": "Represents an e-book record stored in the domain/data model with metadata, relationships and ingestion/readiness state.",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "ebook-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:l6ns3r:icommand-tresponse",
      "kind": "type",
      "fileId": "file:gg5jm5:icommand-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
      "line": 10,
      "canonicalName": "ICommand<TResponse>",
      "shortLabel": "ICommand<TResponse>",
      "longLabel": "ICommand<TResponse> (interface)",
      "purpose": "Generic marker interface for commands that produce a FluentResults.Result<TResponse> via MediatR.",
      "domainTags": [
        "command",
        "nexusreader",
        "abstractions",
        "messaging"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:l7ofd8:icommandhandler-tcommand",
      "kind": "type",
      "fileId": "file:kgb933:icommandhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
      "line": 6,
      "canonicalName": "ICommandHandler<TCommand>",
      "shortLabel": "ICommandHandler<TCommand>",
      "longLabel": "ICommandHandler<TCommand> (interface)",
      "purpose": "Contract for handling command messages that returns a FluentResults.Result indicating success or failure.",
      "domainTags": [
        "command",
        "result-operation-outcome",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "command-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:lwz5af:updatereadingprogresscommand",
      "kind": "type",
      "fileId": "file:xocicc:updatereadingprogresscommand-cs",
      "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
      "line": 6,
      "canonicalName": "UpdateReadingProgressCommand",
      "shortLabel": "UpdateReadingProgressCommand",
      "longLabel": "UpdateReadingProgressCommand (command)",
      "purpose": "Carries parameters required to update a user's reading progress for an ebook in synchronization workflows.",
      "domainTags": [
        "readingprogress",
        "ebook",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-command"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "commands",
          "sync"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:mcoiln:stripesettings",
      "kind": "type",
      "fileId": "file:faws7u:stripesettings-cs",
      "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
      "line": 3,
      "canonicalName": "StripeSettings",
      "shortLabel": "StripeSettings",
      "longLabel": "StripeSettings (model)",
      "purpose": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
      "domainTags": [
        "stripe",
        "billing",
        "products",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-poco"
      ],
      "boundary": {
        "role": "config",
        "layer": "infrastructure",
        "boundaryHints": [
          "config",
          "infrastructure",
          "nexusreader-infrastructure",
          "configuration",
          "stripesettings-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:mdf15q:ebook",
      "kind": "type",
      "fileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
      "line": 162,
      "canonicalName": "Ebook",
      "shortLabel": "Ebook",
      "longLabel": "Ebook (entity)",
      "purpose": "Represents an uploaded ebook file and metadata belonging to a user/tenant.",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260506184227-updatesubscriptionplanisunlimitedtokens-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:mla8ro:knowledgeunit",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 227,
      "canonicalName": "KnowledgeUnit",
      "shortLabel": "KnowledgeUnit",
      "longLabel": "KnowledgeUnit (entity)",
      "purpose": "Stores extracted semantic units with vector embeddings for similarity search.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:mrafiy:subscriptionplan-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 492,
      "canonicalName": "SubscriptionPlan (model configured)",
      "shortLabel": "SubscriptionPlan (model configured)",
      "longLabel": "SubscriptionPlan (model configured) (entity)",
      "purpose": "Defines available subscription tiers and token limits; seeded with default plans.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:ms3ont:throwingsyncbroadcaster",
      "kind": "type",
      "fileId": "file:1dbwiwx:program-cs",
      "path": "NexusReader.Web.Client/Program.cs",
      "line": 94,
      "canonicalName": "ThrowingSyncBroadcaster",
      "shortLabel": "ThrowingSyncBroadcaster",
      "longLabel": "ThrowingSyncBroadcaster (model)",
      "purpose": "ISyncBroadcaster stub that throws for real-time broadcasting operations in the WASM client.",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "boundary": {
        "role": "startup",
        "layer": "frontend",
        "boundaryHints": [
          "startup",
          "frontend",
          "nexusreader-web-client",
          "program-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:n36vet:quizstateservice",
      "kind": "type",
      "fileId": "file:3xx07l:quizstateservice-cs",
      "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
      "line": 5,
      "canonicalName": "QuizStateService",
      "shortLabel": "QuizStateService",
      "longLabel": "QuizStateService (model)",
      "purpose": "Holds quiz-related UI state and exposes events to notify UI consumers when state changes.",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "quizstateservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:n866i0:quizresult",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 403,
      "canonicalName": "QuizResult",
      "shortLabel": "QuizResult",
      "longLabel": "QuizResult (entity)",
      "purpose": "Stores quiz results per user and tenant.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:nk74zf:semanticknowledgecache",
      "kind": "type",
      "fileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
      "line": 440,
      "canonicalName": "SemanticKnowledgeCache",
      "shortLabel": "SemanticKnowledgeCache",
      "longLabel": "SemanticKnowledgeCache (entity)",
      "purpose": "Caches computed semantic responses and embedding vector for quick retrieval.",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510151022-normalizeauthor-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:oa0wy5:typographyvariant",
      "kind": "type",
      "fileId": "file:184ajmn:nexustypography-razor",
      "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
      "line": 19,
      "canonicalName": "TypographyVariant",
      "shortLabel": "TypographyVariant",
      "longLabel": "TypographyVariant (enum)",
      "purpose": "Enum that represents the typography style variant used to select CSS classes.",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "boundary": {
        "role": "ui-component",
        "layer": "frontend",
        "boundaryHints": [
          "ui-component",
          "frontend",
          "nexusreader-ui-shared",
          "atoms",
          "nexustypography-razor"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:pp4157:knowledgegraphservice",
      "kind": "type",
      "fileId": "file:q6pxzf:knowledgegraphservice-cs",
      "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
      "line": 5,
      "canonicalName": "KnowledgeGraphService",
      "shortLabel": "KnowledgeGraphService",
      "longLabel": "KnowledgeGraphService (model)",
      "purpose": "Service model that holds current graph state, active node id, loading flag and event publishers for UI consumers.",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "knowledgegraphservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:q2ghu0:ebook-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 180,
      "canonicalName": "Ebook (model configured)",
      "shortLabel": "Ebook (model configured)",
      "longLabel": "Ebook (model configured) (entity)",
      "purpose": "Represents an ebook record tracked per user/tenant with reading progress and last chapter metadata.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:s4lsqg:asklibraryquestionqueryhandler",
      "kind": "type",
      "fileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
      "line": 14,
      "canonicalName": "AskLibraryQuestionQueryHandler",
      "shortLabel": "AskLibraryQuestionQueryHandler",
      "longLabel": "AskLibraryQuestionQueryHandler (model)",
      "purpose": "MediatR request handler that orchestrates validation and calls the knowledge service.",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:sahnml:knowledgeunit",
      "kind": "type",
      "fileId": "file:h6a0xu:knowledgeunit-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "line": 7,
      "canonicalName": "KnowledgeUnit",
      "shortLabel": "KnowledgeUnit",
      "longLabel": "KnowledgeUnit (entity)",
      "purpose": "Represents a stored piece of knowledge (content + type + metadata) with tenant scoping and links to other KnowledgeUnits and an optional Ebook.",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunit-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:sv23ol:iebookrepository",
      "kind": "type",
      "fileId": "file:1hlb3r7:iebookrepository-cs",
      "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "line": 9,
      "canonicalName": "IEbookRepository",
      "shortLabel": "IEbookRepository",
      "longLabel": "IEbookRepository (interface)",
      "purpose": "Application-layer abstraction describing persistence operations for Ebook and Author to avoid a direct dependency on EF Core.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "boundary": {
        "role": "repository",
        "layer": "application",
        "boundaryHints": [
          "repository",
          "application",
          "nexusreader-application",
          "abstractions",
          "persistence"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:swoy5w:addebookreadyflag",
      "kind": "type",
      "fileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
      "line": 8,
      "canonicalName": "AddEbookReadyFlag",
      "shortLabel": "AddEbookReadyFlag",
      "longLabel": "AddEbookReadyFlag (model)",
      "purpose": "EF Core migration class that encapsulates schema changes to add/remove the IsReadyForReading flag on Ebooks.",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "persistence",
          "migrations"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:tpv4sn:iqueryhandler",
      "kind": "type",
      "fileId": "file:ayj9r2:iqueryhandler-cs",
      "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
      "line": 6,
      "canonicalName": "IQueryHandler",
      "shortLabel": "IQueryHandler",
      "longLabel": "IQueryHandler (interface)",
      "purpose": "Generic interface representing a query handler that processes a TQuery and returns a Result-wrapped TResponse using MediatR semantics.",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "abstractions",
          "messaging"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:udpmrx:iidentityservice",
      "kind": "type",
      "fileId": "file:1ud0jop:iidentityservice-cs",
      "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
      "line": 6,
      "canonicalName": "IIdentityService",
      "shortLabel": "IIdentityService",
      "longLabel": "IIdentityService (interface)",
      "purpose": "Service contract defining identity/authentication operations and an event for invalidation.",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-application",
          "abstractions",
          "iidentityservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:uf4ds6:wasmepubreader",
      "kind": "type",
      "fileId": "file:hiutf5:wasmepubservice-cs",
      "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
      "line": 8,
      "canonicalName": "WasmEpubReader",
      "shortLabel": "WasmEpubReader",
      "longLabel": "WasmEpubReader (model)",
      "purpose": "Client-side implementation of IEpubReader that fetches EPUB content from a server API using HttpClient.",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "boundary": {
        "role": "service",
        "layer": "infrastructure",
        "boundaryHints": [
          "service",
          "infrastructure",
          "nexusreader-web-client",
          "wasmepubservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:uvv2sw:keyconcept",
      "kind": "type",
      "fileId": "file:hjtala:knowledgepacket-cs",
      "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "line": 5,
      "canonicalName": "KeyConcept",
      "shortLabel": "KeyConcept",
      "longLabel": "KeyConcept (dto)",
      "purpose": "Represents a key concept with a title and description for JSON serialization.",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "ai"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:vznymy:knowledgeunit-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 234,
      "canonicalName": "KnowledgeUnit (model configured)",
      "shortLabel": "KnowledgeUnit (model configured)",
      "longLabel": "KnowledgeUnit (model configured) (entity)",
      "purpose": "Stores text chunks with vector embeddings and tenant/source metadata for semantic search.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:wh8ieq:userprofiledto",
      "kind": "type",
      "fileId": "file:1fs0p2c:userprofiledto-cs",
      "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "line": 5,
      "canonicalName": "UserProfileDto",
      "shortLabel": "UserProfileDto",
      "longLabel": "UserProfileDto (dto)",
      "purpose": "Represents a user's profile information, subscription plan, roles, recent activity and UI-friendly computed properties.",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "boundary": {
        "role": "dto",
        "layer": "application",
        "boundaryHints": [
          "dto",
          "application",
          "nexusreader-application",
          "dtos",
          "user"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:wpqby2:synchub",
      "kind": "type",
      "fileId": "file:47d4sb:synchub-cs",
      "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
      "line": 10,
      "canonicalName": "SyncHub",
      "shortLabel": "SyncHub",
      "longLabel": "SyncHub (model)",
      "purpose": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "boundary": {
        "role": "endpoint",
        "layer": "infrastructure",
        "boundaryHints": [
          "endpoint",
          "infrastructure",
          "nexusreader-infrastructure",
          "realtime",
          "synchub-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:wq74ui:knowledgeunitlink",
      "kind": "type",
      "fileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "line": 6,
      "canonicalName": "KnowledgeUnitLink",
      "shortLabel": "KnowledgeUnitLink",
      "longLabel": "KnowledgeUnitLink (entity)",
      "purpose": "Represents a directed link between two KnowledgeUnit entities with a typed relation for persistence via EF Core.",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "knowledgeunitlink-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:xd8rr7:ireadernavigationservice",
      "kind": "type",
      "fileId": "file:wgkae9:ireadernavigationservice-cs",
      "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "line": 3,
      "canonicalName": "IReaderNavigationService",
      "shortLabel": "IReaderNavigationService",
      "longLabel": "IReaderNavigationService (interface)",
      "purpose": "Contract for reader navigation state and operations shared across UI clients.",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "boundary": {
        "role": "service",
        "layer": "frontend",
        "boundaryHints": [
          "service",
          "frontend",
          "nexusreader-ui-shared",
          "ireadernavigationservice-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:xrqv0u:quizresult-model-configured",
      "kind": "type",
      "fileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
      "line": 410,
      "canonicalName": "QuizResult (model configured)",
      "shortLabel": "QuizResult (model configured)",
      "longLabel": "QuizResult (model configured) (entity)",
      "purpose": "User quiz attempt result tied to tenant and user.",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "boundary": {
        "role": "database-config",
        "layer": "data",
        "boundaryHints": [
          "database-config",
          "data",
          "nexusreader-data",
          "migrations",
          "20260510161155-addebookprogressandchapter-designer-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:y84j0y:getmyebooksquery",
      "kind": "type",
      "fileId": "file:16axv5i:getmyebooksquery-cs",
      "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
      "line": 9,
      "canonicalName": "GetMyEbooksQuery",
      "shortLabel": "GetMyEbooksQuery",
      "longLabel": "GetMyEbooksQuery (query)",
      "purpose": "MediatR request holding the UserId for which ebooks should be fetched.",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "boundary": {
        "role": "handler",
        "layer": "application",
        "boundaryHints": [
          "handler",
          "application",
          "nexusreader-application",
          "queries",
          "library"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:y9wry3:author",
      "kind": "type",
      "fileId": "file:1y56eud:author-cs",
      "path": "NexusReader.Domain/Entities/Author.cs",
      "line": 5,
      "canonicalName": "Author",
      "shortLabel": "Author",
      "longLabel": "Author (entity)",
      "purpose": "Represents an author record for the domain/ORM layer, including primary key, name and related ebooks.",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "boundary": {
        "role": "entity",
        "layer": "domain",
        "boundaryHints": [
          "entity",
          "domain",
          "nexusreader-domain",
          "entities",
          "author-cs"
        ]
      },
      "seedKinds": []
    },
    {
      "id": "type:yxmwa5:isyncservice",
      "kind": "type",
      "fileId": "file:l3weg3:isyncservice-cs",
      "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
      "line": 5,
      "canonicalName": "ISyncService",
      "shortLabel": "ISyncService",
      "longLabel": "ISyncService (interface)",
      "purpose": "Contract for a synchronization service that initializes, reports progress, exposes progress events, and can be disposed asynchronously.",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "boundary": {
        "role": "service",
        "layer": "application",
        "boundaryHints": [
          "service",
          "application",
          "nexusreader-ui-shared",
          "isyncservice-cs"
        ]
      },
      "seedKinds": []
    }
  ],
  "edges": [
    {
      "id": "101sj1e",
      "from": "method:yy3thw:searchlibrarysemanticallyasync",
      "to": "store:1isdduh:where-r-r-payload-trygetvalue-ebookid-out-var-ev",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 479,
          "summary": "persistence-read: .Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "102drc",
      "from": "method:ero6bp:loadchapterasync",
      "to": "store:1jb20f0:var-userid-authstate-user-findfirst-system-secur",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 219,
          "summary": "persistence-read: var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization",
        "data"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "10dkk67",
      "from": "method:1gtjcaz:updategraph",
      "to": "event:1mffawr:implementation-should-trigger-ongraphupdated-aft",
      "kind": "publishes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 15,
          "summary": "event-publish: Implementation should trigger OnGraphUpdated after updating state.",
          "kind": "interaction"
        }
      ],
      "label": "publishes publish Implementation should trigger OnGraphUpdated after updating state.",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "10hrkdb",
      "from": "method:jffhoh:askquestionasync",
      "to": "external:1qeqhit:sends-payload-question-tenantid-ebookid-limit-vi",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 100,
          "summary": "external-call: Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "10qwl9z",
      "from": "method:1bus1hn:handle",
      "to": "store:1363qq7:where-c-c-tenantid-request-tenantid-c-embedding-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 55,
          "summary": "persistence-read: .Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "10spavp",
      "from": "method:1jqlijy:handle",
      "to": "store:15yx1zi:var-ebook-await-context-ebooks-firstordefaultasy",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 40,
          "summary": "persistence-read: var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "reads var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "11eop8s",
      "from": "method:9ujebp:fetchandstreamasync",
      "to": "external:ohsa3m:await-coordinator-requestsummaryandquizasync-con",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 101,
          "summary": "external-call: await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
          "kind": "interaction"
        }
      ],
      "label": "requests await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "11i6x3v",
      "from": "class:1ybxixo:knowledgeservice",
      "to": "class:utixgx:iknowledgeservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "KnowledgeService implements IKnowledgeService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IKnowledgeService",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "ebook",
        "groundedness",
        "knowledge",
        "knowledgeunit",
        "knowledgeunitlink",
        "qa-answering",
        "semantic-search",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "cache-semanticknowledgecache",
        "dotnet",
        "dto",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "service-interface",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "11jo0pu",
      "from": "method:191bta3:getsecurestring",
      "to": "external:1eysk1b:await-securestorage-default-getasync-key",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 90,
          "summary": "external-call: await SecureStorage.Default.GetAsync(key)",
          "kind": "interaction"
        }
      ],
      "label": "requests await SecureStorage.Default.GetAsync(key)",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "121c1xh",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:3aiz9x:context-response-redirect-context-redirecturi",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 135,
          "summary": "persistence-read: context.Response.Redirect(context.RedirectUri);",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Response.Redirect(context.RedirectUri);",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "12n7rp",
      "from": "method:13af2s9:getprofileasync",
      "to": "method:16gxcfa:handle",
      "kind": "dispatches",
      "status": "inferred",
      "confidence": 0.8,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "summary": "MediatR dispatch: GetUserProfileQuery → Handle()",
          "kind": "interaction"
        }
      ],
      "label": "dispatches GetUserProfileQuery",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "ebook-lastreadbook",
        "nexusreader",
        "quizresult",
        "subscriptionplan",
        "tenant",
        "user"
      ],
      "technologyTags": [
        "mediatr",
        "cqrs-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "12ydbyj",
      "from": "method:3dd3av:callknowledgeapiasync",
      "to": "external:14uue03:httpclient-postasjsonasync-endpoint-new-text-ebo",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 120,
          "summary": "external-call: HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
          "kind": "interaction"
        }
      ],
      "label": "requests HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "13amr5o",
      "from": "method:bamm0e:getepubcontentasync",
      "to": "store:eanb5r:var-chaptertitle-findtitleinnavigation-navigatio",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 77,
          "summary": "persistence-read: var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
          "kind": "interaction"
        }
      ],
      "label": "reads var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "13hhnwv",
      "from": "method:17924up:removeasync",
      "to": "external:17paedz:jsruntime-invokevoidasync-localstorage-removeite",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 62,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1458hlr",
      "from": "method:yif4p8:processknowledgeunitsasync",
      "to": "store:sbfxjz:dbcontext-knowledgeunits-add-unit",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 248,
          "summary": "persistence-write: dbContext.KnowledgeUnits.Add(unit);",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.KnowledgeUnits.Add(unit);",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "14fn70d",
      "from": "method:115yp5z:broadcastprogressasync",
      "to": "external:1ska3ce:sendasync-progressupdated-pageid-timestamp-cance",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 34,
          "summary": "external-call: .SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 44,
          "summary": "external-call: .SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "requests .SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "14os46b",
      "from": "method:nb75z9:refreshtokenasync",
      "to": "external:ktxxmr:calls-httpclient-postasjsonasync-to-identity-ref",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 211,
          "summary": "external-call: Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "14zcicl",
      "from": "method:n19kbi:seedasync",
      "to": "store:1c53sg7:dbcontext-ebooks-add-new-ebook",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 94,
          "summary": "persistence-write: dbContext.Ebooks.Add(new Ebook",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.Ebooks.Add(new Ebook",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1508qaa",
      "from": "method:kf6qfg:registerasync",
      "to": "external:118idk7:calls-httpclient-postasjsonasync-to-identity-reg",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 37,
          "summary": "external-call: Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "167pkv2",
      "from": "method:1rgphlw:getstringasync",
      "to": "external:1m03hfh:jsruntime-invokeasync-string-localstorage-getite",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 33,
          "summary": "external-call: _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "16g8s47",
      "from": "method:1gkzz9r:updateprogress",
      "to": "store:1oe6439:var-userid-context-user-findfirst-claimtypes-nam",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 21,
          "summary": "persistence-read: var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "17aewge",
      "from": "method:ulf8of:addauthor",
      "to": "store:w36z93:public-task-author-findauthorbynameasync-string-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 88,
          "summary": "persistence-read: public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
          "kind": "interaction"
        }
      ],
      "label": "reads public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "17lbode",
      "from": "method:v3kul8:addebook",
      "to": "store:w36z93:public-task-author-findauthorbynameasync-string-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 88,
          "summary": "persistence-read: public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
          "kind": "interaction"
        }
      ],
      "label": "reads public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "186umep",
      "from": "method:1w7mi8p:updateprogressasync",
      "to": "external:bsebv9:calls-hubconnection-sendasync-updateprogress-pag",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 89,
          "summary": "external-call: Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "18apsqq",
      "from": "method:mj67eu:handleregister",
      "to": "external:127k1fk:await-identityservice-loginasync-email-password",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 94,
          "summary": "external-call: await IdentityService.LoginAsync(email, password)",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.LoginAsync(email, password)",
      "sourceFileId": "file:1hn70tz:register-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "18bsoxw",
      "from": "method:b9ya71:navigatetolibrary-inline-lambda",
      "to": "external:7eyxni:navigationmanager-navigateto-library-framework-c",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 62,
          "summary": "external-call: NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
          "kind": "interaction"
        }
      ],
      "label": "requests NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "18gfabo",
      "from": "method:p6r8md:setactivenode",
      "to": "event:jny8e8:implementation-should-trigger-onactivenodechange",
      "kind": "publishes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 16,
          "summary": "event-publish: Implementation should trigger OnActiveNodeChanged with nodeId after change.",
          "kind": "interaction"
        }
      ],
      "label": "publishes publish Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "18jlm7e",
      "from": "class:1ehqpz0:themeservice",
      "to": "class:1a23wve:ithemeservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "summary": "ThemeService implements IThemeService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IThemeService",
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "ithemeservice",
        "light-dark-mode",
        "nexusreader-ui",
        "theme",
        "ui-notification"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "observer-event",
        "service",
        "simple-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "18k3rj",
      "from": "method:cgrv35:selectoptionasync",
      "to": "method:1lfokb3:vibrateasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 73,
          "summary": "external-call: await PlatformService.VibrateAsync(40)",
          "kind": "interaction"
        }
      ],
      "label": "requests await PlatformService.VibrateAsync(40)",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "19m6kkv",
      "from": "method:t1zuul:handlenodeselected",
      "to": "external:1hk4diz:calls-interaction-service-to-scroll-and-highligh",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 71,
          "summary": "external-call: calls interaction service to scroll and highlight target block",
          "kind": "interaction"
        }
      ],
      "label": "requests calls interaction service to scroll and highlight target block",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "19yb4dq",
      "from": "method:pslukv:computehash",
      "to": "external:qhop5j:var-hashbytes-sha256-hashdata-inputbytes-framewo",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 19,
          "summary": "external-call: var hashBytes = SHA256.HashData(inputBytes) (framework API)",
          "kind": "interaction"
        }
      ],
      "label": "requests var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1ajpdn2",
      "from": "method:nguekt:getboolasync",
      "to": "external:5u0rla:var-value-await-jsruntime-invokeasync-string-loc",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 53,
          "summary": "external-call: var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1b679fd",
      "from": "method:tz9mq3:buildtargetmodel",
      "to": "external:1qodnyy:npgsqlmodelbuilderextensions-useidentitybydefaul",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 28,
          "summary": "external-call: NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
          "kind": "interaction"
        }
      ],
      "label": "requests NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1bs56lj",
      "from": "method:1ekb3x6:registerasync",
      "to": "external:4c7127:usermanager-createasync-user-password-framework-",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 90,
          "summary": "external-call: _userManager.CreateAsync(user, password) -- framework identity external call",
          "kind": "interaction"
        }
      ],
      "label": "requests _userManager.CreateAsync(user, password) -- framework identity external call",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1ecuox5",
      "from": "method:1f4bu99:oninitializedasync",
      "to": "external:13bu9hm:await-http-getfromjsonasync-list-lastreadbookdto",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 392,
          "summary": "external-call: await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
          "kind": "interaction"
        }
      ],
      "label": "requests await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1et69kh",
      "from": "method:pkbr0t:down",
      "to": "external:19mu7c5:migrationbuilder-altercolumn-string-name-content",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 61,
          "summary": "external-call: migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1evfpat",
      "from": "method:t1zuul:handlenodeselected",
      "to": "store:wn8shr:var-connectedlinks-graph-links-where-l-l-source-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 55,
          "summary": "persistence-read: var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
          "kind": "interaction"
        }
      ],
      "label": "reads var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1eyrs7l",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:frwewv:list-qdrant-client-grpc-scoredpoint-searchresult",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 354,
          "summary": "external-call: List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
          "kind": "interaction"
        }
      ],
      "label": "requests List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1fwnaqf",
      "from": "method:1pi9wuc:loginasync",
      "to": "store:1dobere:var-user-await-usermanager-findbyemailasync-emai",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 43,
          "summary": "persistence-read: var user = await _userManager.FindByEmailAsync(email);",
          "kind": "interaction"
        }
      ],
      "label": "reads var user = await _userManager.FindByEmailAsync(email);",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1g0k9rt",
      "from": "method:s3i4fd:findauthorbynameasync",
      "to": "store:w36z93:public-task-author-findauthorbynameasync-string-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 88,
          "summary": "persistence-read: public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
          "kind": "interaction"
        }
      ],
      "label": "reads public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1g88u99",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:menq3u:relatedcontexts-add-related-context-relation-to-",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 673,
          "summary": "persistence-write: relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
          "kind": "interaction"
        }
      ],
      "label": "writes relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1gaa62j",
      "from": "method:174nry:handlesubscriptiondeletedasync",
      "to": "store:2amwm9:return-result-fail-result-errors-select-e-e-desc",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 110,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
          "kind": "interaction"
        }
      ],
      "label": "reads return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1gdc1ew",
      "from": "class:1jwtkwo:syncservice",
      "to": "class:1xcfdo4:isyncservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "summary": "SyncService implements ISyncService",
          "kind": "file-summary"
        }
      ],
      "label": "implements ISyncService",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "ebook",
        "nexusreader-ui",
        "page",
        "progress",
        "readingprogress",
        "sync"
      ],
      "technologyTags": [
        "debounce-trailing-edge",
        "dotnet",
        "event-forwarding",
        "event-observer",
        "service-interface",
        "signalr-hub-client"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1gt8h8k",
      "from": "method:17fop7p:sendasync",
      "to": "external:qzx7e4:delegates-to-base-sendasync-to-perform-network-c",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 55,
          "summary": "external-call: Delegates to base.SendAsync to perform network call",
          "kind": "interaction"
        }
      ],
      "label": "requests Delegates to base.SendAsync to perform network call",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1h00kky",
      "from": "method:xt4lks:runcheck",
      "to": "external:185qn5h:await-mediator-send-new-verifygroundednesscomman",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 71,
          "summary": "external-call: await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
          "kind": "interaction"
        }
      ],
      "label": "requests await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1h3n4rw",
      "from": "method:6z33me:navigatetobook",
      "to": "external:7dkzyp:navigationmanager-navigateto-reader-bookid-frame",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 62,
          "summary": "external-call: _navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
          "kind": "interaction"
        }
      ],
      "label": "requests _navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1hlf89a",
      "from": "method:1pi9wuc:loginasync",
      "to": "external:8y88en:usermanager-findbyemailasync-email-framework-ide",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 43,
          "summary": "external-call: _userManager.FindByEmailAsync(email) -- framework identity external call",
          "kind": "interaction"
        }
      ],
      "label": "requests _userManager.FindByEmailAsync(email) -- framework identity external call",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1hpn3pk",
      "from": "method:1ekb3x6:registerasync",
      "to": "store:6ew30w:return-result-fail-result-errors-select-e-e-desc",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 98,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
          "kind": "interaction"
        }
      ],
      "label": "reads return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1hvho4l",
      "from": "method:1pi9wuc:loginasync",
      "to": "external:x1chuk:usermanager-islockedoutasync-user-framework-iden",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 47,
          "summary": "external-call: _userManager.IsLockedOutAsync(user) -- framework identity external call",
          "kind": "interaction"
        }
      ],
      "label": "requests _userManager.IsLockedOutAsync(user) -- framework identity external call",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1i7s6wx",
      "from": "method:676x78:loadbooksasync",
      "to": "external:1jnm5wj:await-http-getfromjsonasync-list-lastreadbookdto",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 526,
          "summary": "external-call: await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
          "kind": "interaction"
        }
      ],
      "label": "requests await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1irewlr",
      "from": "method:1jy35qw:ondisconnectedasync",
      "to": "store:13o96bq:var-userid-context-useridentifier",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 40,
          "summary": "persistence-read: var userId = Context.UserIdentifier;",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = Context.UserIdentifier;",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1iy83ij",
      "from": "method:tgg1x1:handle",
      "to": "method:1fgpnj9:getgraphdataasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 21,
          "summary": "external-call: await _knowledgeService.GetGraphDataAsync(...)",
          "kind": "interaction"
        }
      ],
      "label": "requests await _knowledgeService.GetGraphDataAsync(...)",
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1iz22r8",
      "from": "method:10bpn0:getepubcontentasync",
      "to": "external:1dpac9t:response-content-readfromjsonasync-readerpagevie",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 28,
          "summary": "external-call: response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1jewl8h",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:7of1lr:field-new-qdrant-client-grpc-fieldcondition",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 339,
          "summary": "external-call: Field = new Qdrant.Client.Grpc.FieldCondition",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 347,
          "summary": "external-call: Field = new Qdrant.Client.Grpc.FieldCondition",
          "kind": "interaction"
        }
      ],
      "label": "requests Field = new Qdrant.Client.Grpc.FieldCondition",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1jgzxgs",
      "from": "class:7rymm7:signalrsyncbroadcaster",
      "to": "class:1kfpdx9:isyncbroadcaster",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "summary": "SignalRSyncBroadcaster implements ISyncBroadcaster",
          "kind": "file-summary"
        }
      ],
      "label": "implements ISyncBroadcaster",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:441s21:isyncbroadcaster-cs",
      "domainTags": [
        "ingestion-progress",
        "nexusreader",
        "reading-progress",
        "real-time-sync",
        "sync-progress",
        "user-sessions-connected-devices"
      ],
      "technologyTags": [
        "adapter",
        "adapter-abstraction",
        "dotnet",
        "pub-sub-broadcast",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1kc90yr",
      "from": "class:veazt0:wasmepubreader",
      "to": "class:euc6fx:iepubreader",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "WasmEpubReader implements IEpubReader",
          "kind": "file-summary"
        }
      ],
      "label": "implements IEpubReader",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:1mo9e25:iepubreader-cs",
      "domainTags": [
        "chapter",
        "ebook",
        "ebook-metadata",
        "epub",
        "nexusreader-web",
        "readerpage"
      ],
      "technologyTags": [
        "adapter-interface-implementation",
        "async-api",
        "dotnet",
        "service-implementation",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1kku92m",
      "from": "method:1epuq0y:handle",
      "to": "store:uy6h6e:where-e-e-userid-request-userid",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 25,
          "summary": "persistence-read: .Where(e => e.UserId == request.UserId)",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(e => e.UserId == request.UserId)",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1kv1p5w",
      "from": "method:1jxczws:handlelogout",
      "to": "external:3nfm1g:await-identityservice-logoutasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 135,
          "summary": "external-call: await IdentityService.LogoutAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.LogoutAsync()",
      "sourceFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1l3yuc1",
      "from": "class:11gdjq4:billingservice",
      "to": "class:qlxnhj:ibillingservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "BillingService implements IBillingService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IBillingService",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "targetFileId": "file:rfn6bc:ibillingservice-cs",
      "domainTags": [
        "ai-token-limits",
        "billing",
        "customer-email",
        "nexususer",
        "stripe-product-id-mapping",
        "stripeproduct",
        "subscription",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dependency-injection-abstraction",
        "dotnet",
        "identity-user-management",
        "repository-dbcontext-access",
        "service",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1lrqm6h",
      "from": "method:w4053o:initializeselectionlistenerasync",
      "to": "external:1on12az:js-invokeasync-import-content-selectionhandler-j",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 121,
          "summary": "external-call: JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
          "kind": "interaction"
        }
      ],
      "label": "requests JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1lwgq3e",
      "from": "class:1baxnes:readernavigationservice",
      "to": "class:9gxpik:ireadernavigationservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "summary": "ReaderNavigationService implements IReaderNavigationService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IReaderNavigationService",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "chapter",
        "ebook",
        "nexusreader-ui",
        "reader",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event",
        "pub-sub-event-notification",
        "state-holder-ui-state"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1mc0w3v",
      "from": "method:17fop7p:sendasync",
      "to": "external:ygdnd4:return-await-base-sendasync-newrequest-cancellat",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 95,
          "summary": "external-call: return await base.SendAsync(newRequest, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "requests return await base.SendAsync(newRequest, cancellationToken);",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1mjmcw4",
      "from": "method:n19kbi:seedasync",
      "to": "store:ytmheg:dbcontext-roles-add-new-identityrole-name-rolena",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 45,
          "summary": "persistence-write: dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1mjzcxf",
      "from": "method:upe53r:oninitialized",
      "to": "external:awqbiu:navigationmanager-navigateto-account-login",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 9,
          "summary": "external-call: NavigationManager.NavigateTo(\"/account/login\")",
          "kind": "interaction"
        }
      ],
      "label": "requests NavigationManager.NavigateTo(\"/account/login\")",
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1n6hz0e",
      "from": "method:10bpn0:getepubcontentasync",
      "to": "external:1squ6eg:response-content-readasstringasync-cancellationt",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 32,
          "summary": "external-call: response.Content.ReadAsStringAsync(cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests response.Content.ReadAsStringAsync(cancellationToken)",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1ncap2x",
      "from": "class:1n4pq65:asklibraryquestionqueryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "AskLibraryQuestionQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "groundedresponse",
        "knowledgeservice",
        "library-question",
        "nexusreader",
        "query",
        "result"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dotnet",
        "mediator",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1no3fe6",
      "from": "method:8fzkrx:account-login-form-post-account-login-form",
      "to": "external:1v4nt3v:await-passwordsigninasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 528,
          "summary": "external-call: Await PasswordSignInAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests Await PasswordSignInAsync",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1nz98uw",
      "from": "method:h3fyyz:savesecurestring",
      "to": "external:5qcn7g:await-securestorage-default-setasync-key-value",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 77,
          "summary": "external-call: await SecureStorage.Default.SetAsync(key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests await SecureStorage.Default.SetAsync(key, value)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1oagq1z",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:16h1nc:var-tenantid-user-findfirstvalue-tenantid-global",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 267,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 275,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 283,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 291,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 299,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 307,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        }
      ],
      "label": "reads var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1p5xhhc",
      "from": "method:17fop7p:sendasync",
      "to": "external:js2dky:identityservice-logoutasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 87,
          "summary": "external-call: identityService.LogoutAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests identityService.LogoutAsync()",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1pk19rt",
      "from": "method:17pqj2a:savesecurestring",
      "to": "external:5qcn7g:await-securestorage-default-setasync-key-value",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 77,
          "summary": "external-call: await SecureStorage.Default.SetAsync(key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests await SecureStorage.Default.SetAsync(key, value)",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1poe2fb",
      "from": "method:10uf4tt:savetolibrary",
      "to": "external:1mzov5:http-postasjsonasync-api-library-ingest-request",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 216,
          "summary": "external-call: Http.PostAsJsonAsync(\"api/library/ingest\", request)",
          "kind": "interaction"
        }
      ],
      "label": "requests Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1puy0ui",
      "from": "method:64smty:handlelogout",
      "to": "external:15l11s1:navigationmanager-navigateto-account-logout-form",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 110,
          "summary": "external-call: NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
          "kind": "interaction"
        }
      ],
      "label": "requests NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1pydzk7",
      "from": "method:1whrhth:onconnectedasync",
      "to": "store:1dhrx8l:await-groups-addtogroupasync-context-connectioni",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 33,
          "summary": "persistence-read: await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
          "kind": "interaction"
        }
      ],
      "label": "reads await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1q1agcy",
      "from": "method:11o3hgs:oninitialized",
      "to": "store:1i3rrjs:ismobile-context-value-devicetype-switch",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 81,
          "summary": "persistence-read: _isMobile = context.Value.DeviceType switch",
          "kind": "interaction"
        }
      ],
      "label": "reads _isMobile = context.Value.DeviceType switch",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout",
        "data"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1q7l510",
      "from": "method:z1n8tn:oninitializedasync",
      "to": "external:1b864m5:await-identityservice-getprofileasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 113,
          "summary": "external-call: await IdentityService.GetProfileAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.GetProfileAsync()",
      "sourceFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1q9jkea",
      "from": "method:upe53r:oninitialized",
      "to": "external:uqijcq:navigationmanager-navigateto-account-login-retur",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 13,
          "summary": "external-call: NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
          "kind": "interaction"
        }
      ],
      "label": "requests NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1ql5tqs",
      "from": "method:n19kbi:seedasync",
      "to": "external:119l0ln:await-dbcontextfactory-createdbcontextasync-obta",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 19,
          "summary": "external-call: await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
          "kind": "interaction"
        }
      ],
      "label": "requests await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1qy1rp",
      "from": "method:1bkauax:generatefullquiz",
      "to": "external:1bnau6o:awaits-coordinator-requestsummaryandquizasync-fu",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 91,
          "summary": "external-call: Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
          "kind": "interaction"
        }
      ],
      "label": "requests Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1rbtvql",
      "from": "method:16m1d8f:savestringasync",
      "to": "external:v8qnpo:jsruntime-invokevoidasync-localstorage-setitem-k",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 20,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1rd7g30",
      "from": "class:oyj9xs:focusmodeservice",
      "to": "class:18bavme:ifocusmodeservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "summary": "FocusModeService implements IFocusModeService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IFocusModeService",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "focusmodeservice",
        "ifocusmodeservice",
        "localstorage-persistence",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "observer-event-notification",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1rg7dcn",
      "from": "method:101vezb:findauthorbynameasync",
      "to": "store:ogoitz:public-async-task-author-findauthorbynameasync-s",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 22,
          "summary": "persistence-read: public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
          "kind": "interaction"
        }
      ],
      "label": "reads public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1rlnq88",
      "from": "method:tz9mq3:buildtargetmodel",
      "to": "external:l8d4ov:npgsqlmodelbuilderextensions-haspostgresextensio",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 27,
          "summary": "external-call: NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
          "kind": "interaction"
        }
      ],
      "label": "requests NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1s18k3l",
      "from": "method:1pecu6b:closeasync",
      "to": "method:15ros9m:notifytextselected",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 99,
          "summary": "external-call: Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
          "kind": "interaction"
        }
      ],
      "label": "requests Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1s2f2vz",
      "from": "method:1oq28g8:requestsummary",
      "to": "external:19ulowf:awaits-coordinator-requestsummaryandquizasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 83,
          "summary": "external-call: Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
          "kind": "interaction"
        }
      ],
      "label": "requests Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1se1jrz",
      "from": "method:gy7qh:handle",
      "to": "store:1hquuu6:calls-addebook-and-savechangesasync-to-persist-t",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 72,
          "summary": "persistence-write: Calls AddEbook and SaveChangesAsync to persist the new entity",
          "kind": "interaction"
        }
      ],
      "label": "writes Calls AddEbook and SaveChangesAsync to persist the new entity",
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1sflk1j",
      "from": "method:1jqlijy:handle",
      "to": "store:lobpp9:var-user-await-context-users-firstordefaultasync",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 30,
          "summary": "persistence-read: var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "reads var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1sn8msa",
      "from": "method:kv7eey:removesecureasync",
      "to": "external:1uts2z1:securestorage-default-remove-key",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 102,
          "summary": "external-call: SecureStorage.Default.Remove(key)",
          "kind": "interaction"
        }
      ],
      "label": "requests SecureStorage.Default.Remove(key)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1td81g6",
      "from": "method:1gkzz9r:updateprogress",
      "to": "store:1q4ufx0:await-mediator-send-new-updatereadingprogresscom",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 24,
          "summary": "persistence-read: await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
          "kind": "interaction"
        }
      ],
      "label": "reads await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tf0hii",
      "from": "method:1ctlycb:handlesubscriptionupdatedasync",
      "to": "store:1rd4l51:return-result-fail-result-errors-select-e-e-desc",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 74,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
          "kind": "interaction"
        }
      ],
      "label": "reads return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tfy618",
      "from": "method:1dyzngl:handleclearcache",
      "to": "method:10r1sy2:clearcacheasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 57,
          "summary": "external-call: await KnowledgeService.ClearCacheAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await KnowledgeService.ClearCacheAsync()",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tl3xs8",
      "from": "method:1lfokb3:vibrateasync",
      "to": "external:19sggfb:jsruntime-invokevoidasync-navigator-vibrate-mill",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 23,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
          "kind": "interaction"
        }
      ],
      "label": "requests _jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tmec77",
      "from": "method:en9pi8:getboolasync",
      "to": "external:1m03hfh:jsruntime-invokeasync-string-localstorage-getite",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 48,
          "summary": "external-call: _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tr6tbq",
      "from": "method:1do3jf2:extractmetadataasync",
      "to": "external:1v0r4q2:bookref-readcoverasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 52,
          "summary": "external-call: bookRef.ReadCoverAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests bookRef.ReadCoverAsync()",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1tu6as6",
      "from": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "SearchLibrarySemanticallyQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "embedding-float-vector",
        "nexusreader",
        "query",
        "result",
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "semanticsearchresultdto-result-dto"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dotnet",
        "mediator",
        "repository-dbcontext-read",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1u3wbdo",
      "from": "method:1w7mi8p:updateprogressasync",
      "to": "external:2haj5s:await-hubconnection-sendasync-updateprogress-pag",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 89,
          "summary": "external-call: await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
          "kind": "interaction"
        }
      ],
      "label": "requests await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1u5bi5d",
      "from": "method:174nry:handlesubscriptiondeletedasync",
      "to": "store:1net1ay:var-user-await-usermanager-findbyemailasync-cust",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 90,
          "summary": "persistence-read: var user = await _userManager.FindByEmailAsync(customerEmail);",
          "kind": "interaction"
        }
      ],
      "label": "reads var user = await _userManager.FindByEmailAsync(customerEmail);",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1ui3zyq",
      "from": "method:1r68c5i:onafterrenderasync",
      "to": "external:2ibuu9:await-js-invokeasync-ijsobjectreference-import-c",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 99,
          "summary": "external-call: await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
          "kind": "interaction"
        }
      ],
      "label": "requests await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1umw8en",
      "from": "method:1x7fw9j:up",
      "to": "external:5altas:migrationbuilder-altercolumn-datetime-name-added",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 41,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1uvdvqf",
      "from": "method:2y4xzb:requestsummaryandquizasync",
      "to": "external:1poaz6x:await-knowledgeservice-getsummaryandquizasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 118,
          "summary": "external-call: await knowledgeService.GetSummaryAndQuizAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests await knowledgeService.GetSummaryAndQuizAsync",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1vj23af",
      "from": "method:1egheyd:executeairequestandcacheasync",
      "to": "store:63pl8h:if-cached-null-dbcontext-semanticknowledgecache-",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 193,
          "summary": "persistence-write: if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
          "kind": "interaction"
        }
      ],
      "label": "writes if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1vla2fv",
      "from": "class:158ohhh:getuserprofilequeryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "GetUserProfileQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "ebook-lastreadbook",
        "nexusreader",
        "query",
        "quizresult",
        "result",
        "subscriptionplan",
        "user"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dotnet",
        "mediator",
        "projection-dto-mapping",
        "repository-ef-core-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1vxhzc1",
      "from": "method:1wohrks:buildtargetmodel",
      "to": "external:17wgm45:npgsqlmodelbuilderextensions-useidentitybydefaul",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "line": 26,
          "summary": "external-call: NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
          "kind": "interaction"
        }
      ],
      "label": "requests NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1wfioef",
      "from": "class:1oxys0a:epubmetadataextractor",
      "to": "class:18sfucp:iepubmetadataextractor",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "summary": "EpubMetadataExtractor implements IEpubMetadataExtractor",
          "kind": "file-summary"
        }
      ],
      "label": "implements IEpubMetadataExtractor",
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "targetFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "domainTags": [
        "abstractions",
        "cover-image",
        "epub",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "adapter-library-wrapper",
        "dependency-inversion",
        "dotnet",
        "extractor",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1wjkiuf",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:8tfcv3:var-filter-new-qdrant-client-grpc-filter",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 336,
          "summary": "external-call: var filter = new Qdrant.Client.Grpc.Filter();",
          "kind": "interaction"
        }
      ],
      "label": "requests var filter = new Qdrant.Client.Grpc.Filter();",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1wm4xz6",
      "from": "method:1pi9wuc:loginasync",
      "to": "external:1ikl6m:usermanager-checkpasswordasync-user-password-fra",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 50,
          "summary": "external-call: _userManager.CheckPasswordAsync(user, password) -- framework identity external call",
          "kind": "interaction"
        }
      ],
      "label": "requests _userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1xjvui",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:1to6fdn:context-request-headers-accept-tostring-contains",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 127,
          "summary": "persistence-read: context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1xo532i",
      "from": "method:13af2s9:getprofileasync",
      "to": "external:m9vtft:mediator-send-new-getuserprofilequery-userid-del",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 116,
          "summary": "external-call: _mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
          "kind": "interaction"
        }
      ],
      "label": "requests _mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1xrdh3f",
      "from": "method:n19kbi:seedasync",
      "to": "store:7z4hx4:dbcontext-userroles-add-new-identityuserrole-str",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 77,
          "summary": "persistence-write: dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1xtk6nk",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:1g7mdv3:searchresult-new-list-qdrant-client-grpc-scoredp",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 368,
          "summary": "external-call: searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
          "kind": "interaction"
        }
      ],
      "label": "requests searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1xtvh3g",
      "from": "method:17fop7p:sendasync",
      "to": "external:279tn7:protected-override-async-task-httpresponsemessag",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 27,
          "summary": "external-call: protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1y7pn3c",
      "from": "method:xt4lks:runcheck",
      "to": "store:1xun3da:var-tenantid-authstate-user-findfirst-tenantid-v",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 69,
          "summary": "persistence-read: var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
          "kind": "interaction"
        }
      ],
      "label": "reads var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules",
        "data"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1yanacd",
      "from": "class:p0no6:getknowledgegraphqueryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "summary": "GetKnowledgeGraphQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "graphdata",
        "knowledgegraph",
        "nexusreader",
        "queries",
        "query",
        "result"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dependency-injection",
        "dotnet",
        "mediator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1yee99z",
      "from": "method:16gxcfa:handle",
      "to": "store:13kwuip:firstordefault",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 52,
          "summary": "persistence-read: }).FirstOrDefault(),",
          "kind": "interaction"
        }
      ],
      "label": "reads }).FirstOrDefault(),",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1yl1j69",
      "from": "method:yy00ql:handlecontinuereading",
      "to": "external:qnnwij:navigationmanager-navigateto-reader-book-id-chap",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 76,
          "summary": "external-call: NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
          "kind": "interaction"
        }
      ],
      "label": "requests NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "1yl35fe",
      "from": "method:rzym3m:getboolasync",
      "to": "external:wbs69t:preferences-default-get-key-defaultvalue",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 52,
          "summary": "external-call: Preferences.Default.Get(key, defaultValue)",
          "kind": "interaction"
        }
      ],
      "label": "requests Preferences.Default.Get(key, defaultValue)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "2pyqcj",
      "from": "method:13af2s9:getprofileasync",
      "to": "store:66nke4:var-userid-user-findfirstvalue-claimtypes-nameid",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 113,
          "summary": "persistence-read: var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "2u95b3",
      "from": "method:xt4lks:runcheck",
      "to": "external:f0wx1j:await-authprovider-getauthenticationstateasync-r",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 68,
          "summary": "external-call: await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
          "kind": "interaction"
        }
      ],
      "label": "requests await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "34ghlc",
      "from": "method:1ptxaoh:handlefileselected",
      "to": "method:1do3jf2:extractmetadataasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 174,
          "summary": "external-call: MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
          "kind": "interaction"
        }
      ],
      "label": "requests MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "4ipfck",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:lv7lmn:answer-i-cannot-answer-this-based-on-the-provide",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 624,
          "summary": "persistence-read: Answer = \"I cannot answer this based on the provided book context.\",",
          "kind": "interaction"
        }
      ],
      "label": "reads Answer = \"I cannot answer this based on the provided book context.\",",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "4m27zr",
      "from": "method:1jy35qw:ondisconnectedasync",
      "to": "external:1y1d0hp:await-base-ondisconnectedasync-exception",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 45,
          "summary": "external-call: await base.OnDisconnectedAsync(exception)",
          "kind": "interaction"
        }
      ],
      "label": "requests await base.OnDisconnectedAsync(exception)",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "53l3nl",
      "from": "method:68za1u:handlelogout",
      "to": "external:3nfm1g:await-identityservice-logoutasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 66,
          "summary": "external-call: await IdentityService.LogoutAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.LogoutAsync()",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "57vmsq",
      "from": "method:1wz04qu:clearcacheasync",
      "to": "external:1402omz:httpclient-deleteasync-api-knowledge",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 141,
          "summary": "external-call: HttpClient.DeleteAsync(\"/api/knowledge\")",
          "kind": "interaction"
        }
      ],
      "label": "requests HttpClient.DeleteAsync(\"/api/knowledge\")",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "5cipsd",
      "from": "method:1uy10ke:clear",
      "to": "event:tkjlxe:implementation-should-raise-ongraphupdated-onact",
      "kind": "publishes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 18,
          "summary": "event-publish: Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
          "kind": "interaction"
        }
      ],
      "label": "publishes publish Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "5qgc83",
      "from": "method:1jqlijy:handle",
      "to": "store:1kadcg7:await-context-savechangesasync-cancellationtoken",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 49,
          "summary": "persistence-read: await context.SaveChangesAsync(cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "reads await context.SaveChangesAsync(cancellationToken);",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "5rjgo0",
      "from": "method:1w0f8ik:removeasync",
      "to": "external:j7khg5:preferences-default-remove-key",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 64,
          "summary": "external-call: Preferences.Default.Remove(key)",
          "kind": "interaction"
        }
      ],
      "label": "requests Preferences.Default.Remove(key)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "61fd1s",
      "from": "method:vkortc:addebook",
      "to": "store:oqk8ve:context-ebooks-add-ebook",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 46,
          "summary": "persistence-write: _context.Ebooks.Add(ebook);",
          "kind": "interaction"
        }
      ],
      "label": "writes _context.Ebooks.Add(ebook);",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "65xfpa",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:17v7uel:var-isapirequest-context-request-path-startswith",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 125,
          "summary": "persistence-read: var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
          "kind": "interaction"
        }
      ],
      "label": "reads var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "66pg7v",
      "from": "method:1jqlijy:handle",
      "to": "method:115yp5z:broadcastprogressasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 52,
          "summary": "external-call: await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "requests await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "6xzf19",
      "from": "method:xt4lks:runcheck",
      "to": "method:1fl6nt2:handle",
      "kind": "dispatches",
      "status": "inferred",
      "confidence": 0.8,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "MediatR dispatch: VerifyGroundednessCommand → Handle()",
          "kind": "interaction"
        }
      ],
      "label": "dispatches VerifyGroundednessCommand",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:2eckht:verifygroundednesscommand-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "molecules",
        "nexusreader",
        "nexusreader-ui",
        "tenant",
        "tenant-scoped-verification"
      ],
      "technologyTags": [
        "mediatr",
        "cqrs-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "6zdrvi",
      "from": "method:1s8oq59:broadcastingestionprogressasync",
      "to": "external:1l8c67j:await-hubcontext-clients-user-userid-sendasync-i",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 59,
          "summary": "external-call: Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "71cnx6",
      "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "to": "method:10bpn0:getepubcontentasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 253,
          "summary": "external-call: await epubService.GetEpubContentAsync(...)",
          "kind": "interaction"
        }
      ],
      "label": "requests await epubService.GetEpubContentAsync(...)",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "77vr1d",
      "from": "method:1ol1cx2:verifygroundednessasync",
      "to": "external:9rnla4:sends-payload-answer-context-tenantid-via-httpcl",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 60,
          "summary": "external-call: Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "78lip6",
      "from": "class:fhmi44:webplatformservice",
      "to": "class:1gyz12d:iplatformservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "WebPlatformService implements IPlatformService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IPlatformService",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader",
        "nexusreader-web",
        "vibration"
      ],
      "technologyTags": [
        "abstraction-adapter",
        "adapter-js-interop-adapter",
        "dotnet",
        "platform-abstraction",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "7m30f0",
      "from": "method:115yp5z:broadcastprogressasync",
      "to": "external:1hffg2k:await-hubcontext-clients-user-userid-sendasync-p",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 34,
          "summary": "external-call: Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 44,
          "summary": "external-call: Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "7o0tpg",
      "from": "method:14hjndb:addmapsterconfiguration",
      "to": "external:rkjokw:var-config-typeadapterconfig-globalsettings-maps",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "line": 13,
          "summary": "external-call: var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
          "kind": "interaction"
        }
      ],
      "label": "requests var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "8tfeh9",
      "from": "method:1whrhth:onconnectedasync",
      "to": "store:13o96bq:var-userid-context-useridentifier",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 30,
          "summary": "persistence-read: var userId = Context.UserIdentifier;",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = Context.UserIdentifier;",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "9nhk0n",
      "from": "method:13yeu7e:getauthenticationstateasync",
      "to": "external:1onccro:await-storageservice-getsecurestring-for-userema",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 43,
          "summary": "external-call: await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 59,
          "summary": "external-call: await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
          "kind": "interaction"
        }
      ],
      "label": "requests await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "9oedcd",
      "from": "method:13vwa6r:handlerequirementasync",
      "to": "store:gcvc8x:var-userid-context-user-findfirstvalue-claimtype",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 28,
          "summary": "persistence-read: var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "9tkd9k",
      "from": "method:16gxcfa:handle",
      "to": "store:1hgnorv:where-u-u-id-request-userid",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 22,
          "summary": "persistence-read: .Where(u => u.Id == request.UserId)",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(u => u.Id == request.UserId)",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "9uudmm",
      "from": "class:rcx5lg:wasmknowledgeservice",
      "to": "class:utixgx:iknowledgeservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "summary": "WasmKnowledgeService implements IKnowledgeService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IKnowledgeService",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "groundedness",
        "groundedness-verification",
        "knowledge",
        "knowledge-knowledgepacket",
        "qa-answering",
        "relevantcontext",
        "semantic-search"
      ],
      "technologyTags": [
        "adapter",
        "dotnet",
        "dto",
        "facade-thin-orchestration-to-a-generic-caller",
        "http-api-client",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "9vr71",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:1ozgz5e:context-request-path-startswithsegments-identity",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 126,
          "summary": "persistence-read: context.Request.Path.StartsWithSegments(\"/identity\") ||",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "c96dr6",
      "from": "class:1t69b7g:quizstateservice",
      "to": "class:36xxdc:iquizstateservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "summary": "QuizStateService implements IQuizStateService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQuizStateService",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "iquizstateservice",
        "nexusreader-ui",
        "quiz",
        "quizblock",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-events-for-pub-sub",
        "publish-subscribe-events",
        "state-holder-ui-state-service",
        "state-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "caxjwh",
      "from": "method:1x7fw9j:up",
      "to": "external:pru781:migrationbuilder-altercolumn-string-name-content",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 22,
          "summary": "external-call: migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "cb27rf",
      "from": "method:1l7jj8x:initializeobserverasync",
      "to": "external:1x98bku:js-invokeasync-import-content-readerobserver-js",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 134,
          "summary": "external-call: JS.InvokeAsync('import', './_content/.../readerObserver.js')",
          "kind": "interaction"
        }
      ],
      "label": "requests JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "cl5ebw",
      "from": "method:uwsk5z:handlelogin",
      "to": "store:1yqfykk:errormessage-result-errors-firstordefault-messag",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 141,
          "summary": "persistence-read: _errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
          "kind": "interaction"
        }
      ],
      "label": "reads _errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "sourceFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "cuud9f",
      "from": "method:1x7fw9j:up",
      "to": "external:ehhqto:migrationbuilder-altercolumn-datetime-name-creat",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 14,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "cy2chv",
      "from": "method:p4hxqo:oninitializedasync",
      "to": "external:op79n5:await-authstateprovider-getauthenticationstateas",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 98,
          "summary": "external-call: await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
          "kind": "interaction"
        }
      ],
      "label": "requests await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "d1kgm5",
      "from": "method:wsqlg8:getstringasync",
      "to": "external:5u0rla:var-value-await-jsruntime-invokeasync-string-loc",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 38,
          "summary": "external-call: var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "d6x4du",
      "from": "method:17jlxw0:handle",
      "to": "method:io0xiq:askquestionasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 30,
          "summary": "external-call: Returns result of _knowledgeService.AskQuestionAsync(...)",
          "kind": "interaction"
        }
      ],
      "label": "requests Returns result of _knowledgeService.AskQuestionAsync(...)",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "df2w7l",
      "from": "method:1ptxaoh:handlefileselected",
      "to": "store:a5nsx:errormessage-result-errors-firstordefault-messag",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 183,
          "summary": "persistence-read: ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
          "kind": "interaction"
        }
      ],
      "label": "reads ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library",
        "data"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "dg4g2y",
      "from": "method:bamm0e:getepubcontentasync",
      "to": "store:1igfwg6:var-ebook-await-context-ebooks",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 41,
          "summary": "persistence-read: var ebook = await context.Ebooks",
          "kind": "interaction"
        }
      ],
      "label": "reads var ebook = await context.Ebooks",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "dngxdw",
      "from": "method:n19kbi:seedasync",
      "to": "store:1jozrsm:dbcontext-users-add-adminuser",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 73,
          "summary": "persistence-write: dbContext.Users.Add(adminUser);",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.Users.Add(adminUser);",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "dw9yjk",
      "from": "method:965937:getknowledgeinternalasync",
      "to": "external:ftjxs1:awaits-lazy-value-which-invokes-executeairequest",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 118,
          "summary": "external-call: awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "e4njro",
      "from": "method:mj67eu:handleregister",
      "to": "external:1kc2xou:await-identityservice-registerasync-email-passwo",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 91,
          "summary": "external-call: await IdentityService.RegisterAsync(email, password)",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.RegisterAsync(email, password)",
      "sourceFileId": "file:1hn70tz:register-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "e5on0g",
      "from": "method:1sn20bf:searchlibrarysemanticallyasync",
      "to": "external:1mhlqnn:sends-payload-querytext-tenantid-limit-via-httpc",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 80,
          "summary": "external-call: Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:100wr5c:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:1v6tqnu:semanticknowledgecache-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 20,
          "summary": "Method SemanticKnowledgeCache (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:107d987:contains",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "method:1pww9i7:savecoverasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 28,
          "summary": "Method SaveCoverAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:107pf8f:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:1nedo1:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 51,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:108e66:contains",
      "from": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "to": "class:4p0c5r:addebookreadyflag",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "summary": "File contains class AddEbookReadyFlag.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "targetFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10f1fv4:contains",
      "from": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "to": "method:115yp5z:broadcastprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 21,
          "summary": "Method BroadcastProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10h5o3w:contains",
      "from": "file:vjfxh7:getuserprofilequery-cs",
      "to": "class:1opd2vh:getuserprofilequery",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
          "summary": "File contains class GetUserProfileQuery.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vjfxh7:getuserprofilequery-cs",
      "targetFileId": "file:vjfxh7:getuserprofilequery-cs",
      "domainTags": [
        "user",
        "userprofile",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-request-message"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10ndl3q:contains",
      "from": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "to": "class:588td0:updatesubscriptionplanisunlimitedtokens",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "summary": "File contains class UpdateSubscriptionPlanIsUnlimitedTokens.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10o41l3:defines-type",
      "from": "file:q8opk3:nexusicon-razor",
      "to": "type:1wz8rxq:nexusicon-component-parameters",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "line": 96,
          "summary": "Type NexusIcon (component parameters) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:q8opk3:nexusicon-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10ophsf:contains",
      "from": "file:184ajmn:nexustypography-razor",
      "to": "method:1vxob4r:variantcssclass",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 11,
          "summary": "Method VariantCssClass is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "targetFileId": "file:184ajmn:nexustypography-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10sj2v9:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "class:wtyati:appdbcontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "summary": "File contains class AppDbContext.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10xns72:defines-type",
      "from": "file:1h2hpbe:appdbcontextfactory-cs",
      "to": "type:1tyno9s:appdbcontextfactory",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "line": 8,
          "summary": "Type AppDbContextFactory is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "targetFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:10xu9qw:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:1uy10ke:clear",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 18,
          "summary": "Method Clear is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:114r7y0:contains",
      "from": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "to": "method:tgg1x1:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 16,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "targetFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:116vhku:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:88y0cc:ongraphupdated",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 11,
          "summary": "Method OnGraphUpdated is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1183byl:defines-type",
      "from": "file:1b03oou:subscriptionplan-cs",
      "to": "type:1cvgax3:subscriptionplan",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
          "line": 5,
          "summary": "Type SubscriptionPlan is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1b03oou:subscriptionplan-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "subscriptionplan",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "dataannotations-ef-core"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:119un08:contains",
      "from": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "to": "class:1eb2dy:addebookreadyflag",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "summary": "File contains class AddEbookReadyFlag.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "targetFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11abbl0:contains",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "method:1kuci8n:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 253,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11bqq35:contains",
      "from": "file:1hyu1ez:prouserhandler-cs",
      "to": "method:14jdxkg:handlerequirementasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 20,
          "summary": "Method HandleRequirementAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "targetFileId": "file:1hyu1ez:prouserhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11hi8r7:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:mhcg2e:onnodeselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 5,
          "summary": "Method OnNodeSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11polel:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "class:tx0x5k:mauiplatformservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "summary": "File contains class MauiPlatformService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11uyngo:contains",
      "from": "file:1wkle85:reconnectmodal-razor-js",
      "to": "method:1n08b99:handlereconnectstatechanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 11,
          "summary": "Method handleReconnectStateChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "targetFileId": "file:1wkle85:reconnectmodal-razor-js",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:11vfamq:contains",
      "from": "file:1sm6kjd:routes-razor",
      "to": "class:19wn0m3:routes",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "summary": "File contains class Routes.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1sm6kjd:routes-razor",
      "targetFileId": "file:1sm6kjd:routes-razor",
      "domainTags": [
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:120c5js:contains",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "method:10zr37d:wasmepubreader",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 12,
          "summary": "Method WasmEpubReader is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:123cneq:contains",
      "from": "file:9775p0:subscriptionplandto-cs",
      "to": "class:1r9yuyl:subscriptionplandto",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
          "summary": "File contains class SubscriptionPlanDto.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9775p0:subscriptionplandto-cs",
      "targetFileId": "file:9775p0:subscriptionplandto-cs",
      "domainTags": [
        "subscriptionplan",
        "billing",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record-c-9"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:128z9p7:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:1rgip6d:removesecureasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 98,
          "summary": "Method RemoveSecureAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:129n5m6:contains",
      "from": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "to": "method:1mtzd71:signalrsyncbroadcaster",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 15,
          "summary": "Method SignalRSyncBroadcaster is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12c1zbm:imports",
      "from": "file:h6mj95:home-razor",
      "to": "file:wgkae9:ireadernavigationservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12cn55w:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12f3akz:defines-type",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "type:1fj6zpl:addebooklastchapterindex",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "line": 17,
          "summary": "Type AddEbookLastChapterIndex is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12fazya:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:jhc678:maporientation",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 79,
          "summary": "Method MapOrientation is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12k08cb:imports",
      "from": "file:1y56eud:author-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Author.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:1y56eud:author-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12mxn65:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:1dimc2e:getblockclass",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 94,
          "summary": "Method GetBlockClass is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12n0wxf:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:14hlcms:handlegraphupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 49,
          "summary": "Method HandleGraphUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12qjyih:imports",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports Author",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "entity",
        "ef-core-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12r6g3s:contains",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "method:7atrx1:addinfrastructure",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 31,
          "summary": "Method AddInfrastructure is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12t21pk:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12u2hsm:contains",
      "from": "file:13u663i:20260510151022-normalizeauthor-cs",
      "to": "method:5tn4c6:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "line": 12,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "targetFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:12zcu4z:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1wlwqp0:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 151,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1396bk5:contains",
      "from": "file:mm1vnb:readerlayout-razor",
      "to": "method:1r68c5i:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 93,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "targetFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13e2esp:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13fnfmc:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports NexusReader.Domain/Entities/Author.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13jfz8e:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:1u6514u:getprofileasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 130,
          "summary": "Method GetProfileAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13tr0dx:contains",
      "from": "file:q8opk3:nexusicon-razor",
      "to": "method:viikop:render-razor-template-component-render",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "line": 1,
          "summary": "Method Render (Razor template / component render) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q8opk3:nexusicon-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13x20ij:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:1pa87x9:onquizupdated",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 13,
          "summary": "Method OnQuizUpdated is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13x385k:contains",
      "from": "file:igeyi7:nexussearchbox-razor",
      "to": "method:1p9w1qk:isactive-getter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 25,
          "summary": "Method IsActive (getter) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "targetFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13y87kg:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "class:1l2fmrv:serveridentityservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "summary": "File contains class ServerIdentityService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13z4b5y:contains",
      "from": "file:1h2hpbe:appdbcontextfactory-cs",
      "to": "method:nwogow:createdbcontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "line": 10,
          "summary": "Method CreateDbContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "targetFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:13zpegg:contains",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "method:13h9yo2:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:143bbck:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:d7ymkn:quizresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 385,
          "summary": "Type QuizResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:143e8yn:contains",
      "from": "file:qieb5i:dependencyinjection-cs",
      "to": "class:5jkcay:dependencyinjection",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "summary": "File contains class DependencyInjection.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qieb5i:dependencyinjection-cs",
      "targetFileId": "file:qieb5i:dependencyinjection-cs",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:145mas3:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:1rgphlw:getstringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 29,
          "summary": "Method GetStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:146kszc:defines-type",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "type:1rne00x:knowledgelinkdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "line": 17,
          "summary": "Type KnowledgeLinkDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1492i5l:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 250,
          "summary": "Method GetEpubContent (GET /api/epub/{ebookId}/{index}) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14b9rhg:contains",
      "from": "file:1jnstne:readerinteractionservice-cs",
      "to": "method:qegcuf:notifynodeselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 10,
          "summary": "Method NotifyNodeSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14bhdjr:contains",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "class:tfj298:adddescriptiontoebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File contains class AddDescriptionToEbook.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14cfdwo:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:h3fyyz:savesecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 73,
          "summary": "Method SaveSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14cs6cp:contains",
      "from": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "to": "class:kshwxo:addebookprogressandchapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "summary": "File contains class AddEbookProgressAndChapter.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "targetFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14e4m6t:defines-type",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "type:yxmwa5:isyncservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 5,
          "summary": "Type ISyncService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14f58zl:defines-type",
      "from": "file:1dbwiwx:program-cs",
      "to": "type:1dhn7tl:throwingebookrepository",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Type ThrowingEbookRepository is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14fnzxu:contains",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "class:veazt0:wasmepubreader",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "File contains class WasmEpubReader.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14jr8s8:defines-type",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "type:1agxbak:semanticknowledgecache-entity-mapping",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 307,
          "summary": "Type SemanticKnowledgeCache (entity mapping) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14pgh7d:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:mes1h8:onparameterssetasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 43,
          "summary": "Method OnParametersSetAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14q2paq:contains",
      "from": "file:qieb5i:dependencyinjection-cs",
      "to": "method:lhrad4:assembly-property-getter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "line": 16,
          "summary": "Method Assembly (property getter) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qieb5i:dependencyinjection-cs",
      "targetFileId": "file:qieb5i:dependencyinjection-cs",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14tk16w:contains",
      "from": "file:10kr3oo:getknowledgegraphquery-cs",
      "to": "class:1qgqpgy:getknowledgegraphquery",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
          "summary": "File contains class GetKnowledgeGraphQuery.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "targetFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "domainTags": [
        "knowledge-graph",
        "tenant",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "queryobject"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14tseux:contains",
      "from": "file:hc4koi:submitanswercommandhandler-cs",
      "to": "method:e8akyb:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "line": 16,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "targetFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14wfhip:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:16wzuux:nexususer",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 305,
          "summary": "Type NexusUser is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14wrnma:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1sfi79b:logrequestingsummary",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 163,
          "summary": "Method LogRequestingSummary is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14xakaf:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14ycp3j:contains",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "class:1l7wkbd:normalizeauthor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "summary": "File contains class NormalizeAuthor.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:14zkymf:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1anyvp0:getknowledgemapasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 76,
          "summary": "Method GetKnowledgeMapAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:150mlno:defines-type",
      "from": "file:17v8pus:authenticationheaderhandler-cs",
      "to": "type:19q79ms:authenticationheaderhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 14,
          "summary": "Type AuthenticationHeaderHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "targetFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:151gejr:imports",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports NexusReader.Domain/Entities/Author.cs",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:153bs6e:imports",
      "from": "file:1hn70tz:register-razor",
      "to": "file:q8opk3:nexusicon-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "label": "imports NexusIcon",
      "sourceFileId": "file:1hn70tz:register-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui",
        "icon",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui",
        "ui-component",
        "switch-based-renderer"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:155kpaz:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:xt4lks:runcheck",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 63,
          "summary": "Method RunCheck is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:157034w:defines-type",
      "from": "file:wxheam:appjsoncontext-cs",
      "to": "type:1si295l:appjsoncontext",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Common/AppJsonContext.cs",
          "line": 12,
          "summary": "Type AppJsonContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:wxheam:appjsoncontext-cs",
      "targetFileId": "file:wxheam:appjsoncontext-cs",
      "domainTags": [
        "graph",
        "graphnode",
        "graphlink",
        "graphdata"
      ],
      "technologyTags": [
        "dotnet",
        "source-generator",
        "serialization-context"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15bddot:contains",
      "from": "file:1wyr0y8:quizresult-cs",
      "to": "method:ml3mse:percentage-getter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "line": 31,
          "summary": "Method Percentage (getter) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15g04ng:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:1pecu6b:closeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 96,
          "summary": "Method CloseAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15gk9hy:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:pd4yo:sethydrating",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 17,
          "summary": "Method SetHydrating is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15h36o:contains",
      "from": "file:q380me:relevantcontext-cs",
      "to": "class:1wekmss:relevantcontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
          "summary": "File contains class RelevantContext.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q380me:relevantcontext-cs",
      "targetFileId": "file:q380me:relevantcontext-cs",
      "domainTags": [
        "relevantcontext",
        "ai-context",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "data-transfer-object-dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15hv87e:contains",
      "from": "file:p5ean4:error-razor",
      "to": "method:1jr0xbp:requestid-backing-state",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 31,
          "summary": "Method RequestId (backing state) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15tjru5:contains",
      "from": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "to": "class:14xe27n:increasehashlength",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "summary": "File contains class IncreaseHashLength.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "targetFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15vlvl2:contains",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "method:8psub5:requestquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 15,
          "summary": "Method RequestQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15xk5c9:contains",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "class:1gem37m:makeknowledgeunitebookidnullable",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File contains class MakeKnowledgeUnitEbookIdNullable.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:15yxgig:contains",
      "from": "file:1wkle85:reconnectmodal-razor-js",
      "to": "method:mdoq3y:retry",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 23,
          "summary": "Method retry is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "targetFileId": "file:1wkle85:reconnectmodal-razor-js",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:167p383:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1ejbaxq:handlescrollrequested",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 187,
          "summary": "Method HandleScrollRequested is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:167u4ik:defines-type",
      "from": "file:lcvwj6:ebook-cs",
      "to": "type:kzfhbn:ebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Ebook.cs",
          "line": 9,
          "summary": "Type Ebook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:168joun:defines-type",
      "from": "file:16axv5i:getmyebooksquery-cs",
      "to": "type:y84j0y:getmyebooksquery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 9,
          "summary": "Type GetMyEbooksQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "targetFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:16aonon:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "class:vyfiaz:nativestorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "summary": "File contains class NativeStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:16br1av:contains",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "method:13pj2z1:markquizasseen",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 36,
          "summary": "Method MarkQuizAsSeen is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:16u46ds:contains",
      "from": "file:p5ean4:error-razor",
      "to": "class:1jtdq7s:error",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "summary": "File contains class Error.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:16vtk6g:contains",
      "from": "file:xxwh7p:asklibraryquestionquery-cs",
      "to": "class:1n4pq65:asklibraryquestionqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "File contains class AskLibraryQuestionQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:16ydfqe:contains",
      "from": "file:13kvr59:contenthasher-cs",
      "to": "method:1e84qm4:normalize",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 24,
          "summary": "Method Normalize is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "targetFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:171e1nj:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:13yeu7e:getauthenticationstateasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 31,
          "summary": "Method GetAuthenticationStateAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:173dxji:contains",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "method:10bpn0:getepubcontentasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 17,
          "summary": "Method GetEpubContentAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:173ycit:contains",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "method:4nawp0:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "line": 19,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:175jh6o:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "class:scmh0y:readercanvas",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "File contains class ReaderCanvas.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:175u6l4:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:vznymy:knowledgeunit-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 234,
          "summary": "Type KnowledgeUnit (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:179l9t8:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:26njdb:clearcacheasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 16,
          "summary": "Method ClearCacheAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17abq47:defines-type",
      "from": "file:1dyqnkg:jsonrepairhelper-cs",
      "to": "type:awil0x:jsonrepairhelper",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "line": 6,
          "summary": "Type JsonRepairHelper is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "targetFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17chvmx:defines-type",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "type:5mx9m5:wasmepubmetadataextractor",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 43,
          "summary": "Type WasmEpubMetadataExtractor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17dvmxv:defines-type",
      "from": "file:12rhzck:program-cs",
      "to": "type:14omw7a:knowledgerequest",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 566,
          "summary": "Type KnowledgeRequest is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17dxqnm:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:jffhoh:askquestionasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 96,
          "summary": "Method AskQuestionAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17e14fi:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:1r4sskm:authors-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 26,
          "summary": "Method Authors (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17e3wjt:contains",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "method:1febov1:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17g40tf:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:1oclqd:verifygroundednessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 13,
          "summary": "Method VerifyGroundednessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17i8na3:contains",
      "from": "file:43kjze:class1-cs",
      "to": "class:1133tob:class1",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Class1.cs",
          "summary": "File contains class Class1.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:43kjze:class1-cs",
      "targetFileId": "file:43kjze:class1-cs",
      "domainTags": [
        "nexusreader-infrastructure",
        "class1"
      ],
      "technologyTags": [
        "dotnet"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17ikg96:defines-type",
      "from": "file:1bp3my2:nexusbutton-razor",
      "to": "type:120koss:nexusbutton-parameters-component-props",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "line": 5,
          "summary": "Type NexusButton parameters (component props) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1bp3my2:nexusbutton-razor",
      "targetFileId": "file:1bp3my2:nexusbutton-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexusbutton"
      ],
      "technologyTags": [
        "component",
        "eventcallback",
        "attribute-forwarding",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17kj0kt:contains",
      "from": "file:9lh011:getreaderpagequery-cs",
      "to": "class:z6s0dl:getreaderpagequery",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
          "summary": "File contains class GetReaderPageQuery.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9lh011:getreaderpagequery-cs",
      "targetFileId": "file:9lh011:getreaderpagequery-cs",
      "domainTags": [
        "ebook",
        "reader",
        "chapter",
        "tenant-user"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17lyn7z:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:18zc3my:ontextselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 8,
          "summary": "Method OnTextSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17lzxfx:contains",
      "from": "file:csf9l7:login-razor",
      "to": "method:uwsk5z:handlelogin",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 126,
          "summary": "Method HandleLogin is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17mpa7y:contains",
      "from": "file:igeyi7:nexussearchbox-razor",
      "to": "method:1sx9yhe:clearsearch",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 35,
          "summary": "Method ClearSearch is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "targetFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17o1lvk:imports",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17q1d94:contains",
      "from": "file:faws7u:stripesettings-cs",
      "to": "class:1mqu7tw:stripesettings",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "summary": "File contains class StripeSettings.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:faws7u:stripesettings-cs",
      "targetFileId": "file:faws7u:stripesettings-cs",
      "domainTags": [
        "stripe",
        "billing",
        "products",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17r7j78:contains",
      "from": "file:1wkle85:reconnectmodal-razor-js",
      "to": "method:1js2qbs:retrywhendocumentbecomesvisible",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 59,
          "summary": "Method retryWhenDocumentBecomesVisible is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "targetFileId": "file:1wkle85:reconnectmodal-razor-js",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17s8inh:calls",
      "from": "method:1pecu6b:closeasync",
      "to": "method:p2mw02:notifytextselected",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 99,
          "summary": "Method CloseAsync calls NotifyTextSelected in NexusReader.UI.Shared/Services/IReaderInteractionService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "label": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:17v7uos:contains",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "method:3jcuy:findauthorbynameasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 14,
          "summary": "Method FindAuthorByNameAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17wnyta:defines-type",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "type:1qhatfu:displayorientation",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 28,
          "summary": "Type DisplayOrientation is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:17wpbxd:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:16kjevr:handleactivenodechange",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 65,
          "summary": "Method HandleActiveNodeChange is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:181pqf6:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:1w0f8ik:removeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 60,
          "summary": "Method RemoveAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:182fzqp:contains",
      "from": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "to": "method:1ste7vn:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "line": 44,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "targetFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:182kzns:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:6xl8d4:nexusreader-domain-entities-quizresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 385,
          "summary": "Type NexusReader.Domain.Entities.QuizResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1852eu3:contains",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "class:ir9z2o:iebookrepository",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "summary": "File contains class IEbookRepository.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:185sha4:contains",
      "from": "file:xxwh7p:asklibraryquestionquery-cs",
      "to": "method:r0ndyk:asklibraryquestionqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 18,
          "summary": "Method AskLibraryQuestionQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:185w3up:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:1lb2q26:requesthighlightblock",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 12,
          "summary": "Method RequestHighlightBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:188f7d2:defines-type",
      "from": "file:1tk8lz4:ingestebookcommand-cs",
      "to": "type:dgxlfz:ingestebookcommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
          "line": 15,
          "summary": "Type IngestEbookCommand is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "targetFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "domainTags": [
        "ebook",
        "library",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18bsvko:contains",
      "from": "file:h6mj95:home-razor",
      "to": "class:jfh85m:home",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "File contains class Home.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18cneie:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1l8ubet:zoomout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 97,
          "summary": "Method ZoomOut is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18fob91:contains",
      "from": "file:1ain1yo:mainhublayout-razor",
      "to": "method:p4hxqo:oninitializedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 94,
          "summary": "Method OnInitializedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "targetFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18kw19r:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:wcjzgl:getgraphdataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 22,
          "summary": "Method GetGraphDataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18pgqdj:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:1bfedhw:getsecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 86,
          "summary": "Method GetSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18pjjc8:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:tx9z61:updatemetadataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 45,
          "summary": "Method UpdateMetadataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18po1jc:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:rb5d4b:notifynavigationchangedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 71,
          "summary": "Method NotifyNavigationChangedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18q0ngj:contains",
      "from": "file:62lucr:app-xaml-cs",
      "to": "method:1b26w2r:app",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "line": 5,
          "summary": "Method App is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:62lucr:app-xaml-cs",
      "targetFileId": "file:62lucr:app-xaml-cs",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18rlhba:contains",
      "from": "file:csf9l7:login-razor",
      "to": "method:ulfoov:handlegooglelogin",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 154,
          "summary": "Method HandleGoogleLogin is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18s0f8u:defines-type",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "type:1jksru0:devicetype",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 20,
          "summary": "Type DeviceType is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18xowy5:contains",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "method:pqi00v:onprogressreceived",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 9,
          "summary": "Method OnProgressReceived is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:18ya7x4:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:965937:getknowledgeinternalasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 81,
          "summary": "Method GetKnowledgeInternalAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1911xgi:imports",
      "from": "file:11crtur:profile-razor",
      "to": "file:q8opk3:nexusicon-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "label": "imports NexusIcon",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui",
        "icon",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui",
        "ui-component",
        "switch-based-renderer"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:196nui5:defines-type",
      "from": "file:12rhzck:program-cs",
      "to": "type:gyab7i:groundednessrequest",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 567,
          "summary": "Type GroundednessRequest is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:196s3p1:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "class:1yjf0sw:nexusauthenticationstateprovider",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "summary": "File contains class NexusAuthenticationStateProvider.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:197f409:contains",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "class:zj074q:finalnormalizedsubscriptionarchitecture",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File contains class FinalNormalizedSubscriptionArchitecture.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:198h7px:imports",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "file:hjtala:knowledgepacket-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "summary": "File imports dependency NexusReader.Application/DTOs/AI/KnowledgePacket.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
      "label": "imports KnowledgePacket",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui",
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui",
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:198opq8:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:1q9e63q:getoptionclass",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 100,
          "summary": "Method GetOptionClass is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19bg6b6:contains",
      "from": "file:1fs0p2c:userprofiledto-cs",
      "to": "class:vgmc9n:userprofiledto",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "summary": "File contains class UserProfileDto.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1fs0p2c:userprofiledto-cs",
      "targetFileId": "file:1fs0p2c:userprofiledto-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19di87d:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19gapon:contains",
      "from": "file:38gozs:tokenlimithandler-cs",
      "to": "method:13vwa6r:handlerequirementasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 24,
          "summary": "Method HandleRequirementAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "targetFileId": "file:38gozs:tokenlimithandler-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19jf63i:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:10q1pr:isloading",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 9,
          "summary": "Method IsLoading is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19lxwq6:imports",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19m3d7l:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:n5kc06:currentgraphdata",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 7,
          "summary": "Method CurrentGraphData is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19rm007:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:tuoc3y:requestquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 15,
          "summary": "Method RequestQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19wwi94:defines-type",
      "from": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:bqctk6:updatesubscriptionplanisunlimitedtokens",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "line": 8,
          "summary": "Type UpdateSubscriptionPlanIsUnlimitedTokens is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19xpc6x:contains",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "method:90e1ug:setloading",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 30,
          "summary": "Method SetLoading is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19y8y58:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:4hij31:updatemetadataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 15,
          "summary": "Method UpdateMetadataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:19yjgt1:imports",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1a49sym:contains",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "method:llsrxk:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 271,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1a57gs4:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:1ww1s1:loginasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 10,
          "summary": "Method LoginAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1a9y6fi:imports",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1agryv:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:d54w6c:reset",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 135,
          "summary": "Method Reset is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ahqwsz:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1k0kfjg:onnavigationchanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 88,
          "summary": "Method OnNavigationChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1aienqd:defines-type",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "type:1p7g8wz:ingestresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 244,
          "summary": "Type IngestResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1akxgmx:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:16ct380:createstate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 84,
          "summary": "Method CreateState is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1aogrvy:contains",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "class:1t4ptj6:dbinitializer",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File contains class DbInitializer.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1aqr3r1:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:1wrq6fu:savestringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 7,
          "summary": "Method SaveStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1atl2hp:contains",
      "from": "file:csf9l7:login-razor",
      "to": "method:1v0viho:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 110,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1aui54t:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:1oq28g8:requestsummary",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 76,
          "summary": "Method RequestSummary is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ay4jsc:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:1p6mlsn:nexususer-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 312,
          "summary": "Type NexusUser (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1az4u78:defines-type",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "type:exuypx:ebook-entity-mapping",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 160,
          "summary": "Type Ebook (entity mapping) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1azilkn:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "class:gamvik:bookstorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "summary": "File contains class BookStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1azusl3:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "method:1dyzngl:handleclearcache",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 53,
          "summary": "Method HandleClearCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1b4mu7:contains",
      "from": "file:ua9rra:mainpage-xaml-cs",
      "to": "method:6gridz:mainpage",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "line": 5,
          "summary": "Method MainPage is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:ua9rra:mainpage-xaml-cs",
      "targetFileId": "file:ua9rra:mainpage-xaml-cs",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bdd1gi:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1rioxzo:handleselectioncleared",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 179,
          "summary": "Method HandleSelectionCleared is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bgnw1r:contains",
      "from": "file:1wyr0y8:quizresult-cs",
      "to": "class:xbp5rm:quizresult",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "summary": "File contains class QuizResult.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1blyw1w:defines-type",
      "from": "file:1bdy8y4:groundedresponsedto-cs",
      "to": "type:58td3x:groundedresponsedto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
          "line": 5,
          "summary": "Type GroundedResponseDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1bdy8y4:groundedresponsedto-cs",
      "targetFileId": "file:1bdy8y4:groundedresponsedto-cs",
      "domainTags": [
        "grounded-ai-response",
        "citation",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1boltdp:imports",
      "from": "file:h6a0xu:knowledgeunit-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports Ebook",
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bos46a:contains",
      "from": "file:1jnstne:readerinteractionservice-cs",
      "to": "class:18r7noo:readerinteractionservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "summary": "File contains class ReaderInteractionService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bpjciz:contains",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "method:dzihxd:onfocusmodechanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 6,
          "summary": "Method OnFocusModeChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1buglx6:contains",
      "from": "file:1awldsb:error-razor",
      "to": "method:u5zr3n:render-component-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "line": 11,
          "summary": "Method Render (component markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1awldsb:error-razor",
      "targetFileId": "file:1awldsb:error-razor",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bw43v4:defines-type",
      "from": "file:g197tx:storagekeys-cs",
      "to": "type:7t3l5d:storagekeys",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Constants/StorageKeys.cs",
          "line": 3,
          "summary": "Type StorageKeys is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:g197tx:storagekeys-cs",
      "targetFileId": "file:g197tx:storagekeys-cs",
      "domainTags": [
        "authentication",
        "user",
        "nexusreader",
        "constants"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1bze0q:contains",
      "from": "file:q6hq0x:20260429080302-addquizresults-cs",
      "to": "method:1sa6em1:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 12,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "targetFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c0h94:contains",
      "from": "file:1kjntt:intelligence-razor",
      "to": "method:1f4bu99:oninitializedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 388,
          "summary": "Method OnInitializedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "targetFileId": "file:1kjntt:intelligence-razor",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c0nf0k:contains",
      "from": "file:47d4sb:synchub-cs",
      "to": "method:vlrx66:synchub",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 14,
          "summary": "Method SyncHub is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c0tqvw:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c3e4w4:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:1b8lqka:handleupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 61,
          "summary": "Method HandleUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c4bp84:contains",
      "from": "file:igeyi7:nexussearchbox-razor",
      "to": "class:c49vab:nexussearchbox",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "summary": "File contains class NexusSearchBox.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "targetFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c5pmz8:contains",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "method:yy00ql:handlecontinuereading",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 72,
          "summary": "Method HandleContinueReading is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1c9r670:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:en9pi8:getboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 44,
          "summary": "Method GetBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ca076e:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:1csperg:notifyuserauthentication",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 106,
          "summary": "Method NotifyUserAuthentication is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cb9e17:contains",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "method:n19kbi:seedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 14,
          "summary": "Method SeedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cekx6s:contains",
      "from": "file:ayj9r2:iqueryhandler-cs",
      "to": "class:daunpv:iqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "summary": "File contains class IQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:ayj9r2:iqueryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cgqc48:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:l33fvs:totalchapters",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 7,
          "summary": "Method TotalChapters is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1chhsq1:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:zxocvw:savesecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 13,
          "summary": "Method SaveSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cnovga:contains",
      "from": "file:qt46oq:webplatformservice-cs",
      "to": "method:1lfokb3:vibrateasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 19,
          "summary": "Method VibrateAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cpdvei:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:gfuk2l:onparametersset",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 33,
          "summary": "Method OnParametersSet is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1cugv4s:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:191bta3:getsecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 86,
          "summary": "Method GetSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1d0gr08:contains",
      "from": "file:xcxh5w:nexususer-cs",
      "to": "class:q7xqjm:nexususer",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "summary": "File contains class NexusUser.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xcxh5w:nexususer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "user",
        "tenant",
        "subscriptionplan",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1d4n840:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:k4xtk2:saveebookasync-stream",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Method SaveEbookAsync (Stream) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1dbwi2o:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:15ow7t1:nexusreader-domain-entities-nexususer",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 287,
          "summary": "Type NexusReader.Domain.Entities.NexusUser is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1dk0eu6:contains",
      "from": "file:2eckht:verifygroundednesscommand-cs",
      "to": "method:10jkor8:verifygroundednesscommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 13,
          "summary": "Method VerifyGroundednessCommandHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "targetFileId": "file:2eckht:verifygroundednesscommand-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1dk4e8k:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1dw194i:defines-type",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "type:14gvkuy:loginresponse",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 252,
          "summary": "Type LoginResponse is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1e0fzx8:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:1odjeej:searchlibrarysemanticallyasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 14,
          "summary": "Method SearchLibrarySemanticallyAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1e14hgg:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:veuxa3:ebookrepository-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Persistence/EbookRepository.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "label": "imports NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1e26frq:defines-type",
      "from": "file:47d4sb:synchub-cs",
      "to": "type:wpqby2:synchub",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 10,
          "summary": "Type SyncHub is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1e8fo7r:contains",
      "from": "file:1niza9w:globalintelligencepanel-razor",
      "to": "method:h9z30t:handlesearch",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 56,
          "summary": "Method HandleSearch is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "targetFileId": "file:1niza9w:globalintelligencepanel-razor",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1e8gn9i:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1jw3y39:getknowledgeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 17,
          "summary": "Method GetKnowledgeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1eaw4on:calls",
      "from": "method:1r63qu7:onafterrenderasync",
      "to": "method:fpl7t6:initializeasync",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 67,
          "summary": "Method OnAfterRenderAsync calls InitializeAsync in NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "label": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:1ecsyjd:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:orf66k:gotochapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 12,
          "summary": "Method GoToChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1eeqh2n:contains",
      "from": "file:1m26se1:getinitializationstatusquery-cs",
      "to": "class:904yf3:getinitializationstatusquery",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
          "summary": "File contains class GetInitializationStatusQuery.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "targetFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "domainTags": [
        "initializationstatus",
        "nexusreader",
        "queries",
        "system"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "query-object"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ef37in:contains",
      "from": "file:441s21:isyncbroadcaster-cs",
      "to": "method:3uewqk:broadcastprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "line": 18,
          "summary": "Method BroadcastProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "targetFileId": "file:441s21:isyncbroadcaster-cs",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1eg3glm:defines-type",
      "from": "file:i1pwrm:themeservice-cs",
      "to": "type:1mmobgz:themeservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "line": 3,
          "summary": "Type ThemeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "targetFileId": "file:i1pwrm:themeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1eh6e33:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:zopugm:geticon",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 89,
          "summary": "Method GetIcon is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ejbvbt:defines-type",
      "from": "file:xxwh7p:asklibraryquestionquery-cs",
      "to": "type:bzkzmt:asklibraryquestionquery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 11,
          "summary": "Type AskLibraryQuestionQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ejojfu:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:dz8xj4:currentquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 8,
          "summary": "Method CurrentQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ekqw4:contains",
      "from": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "to": "method:1bus1hn:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 41,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1el8pj3:contains",
      "from": "file:vdwqp9:iepubmetadataextractor-cs",
      "to": "method:hwn6lg:extractmetadataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "line": 9,
          "summary": "Method ExtractMetadataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "targetFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "domainTags": [
        "epub",
        "metadata",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-inversion"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1en5hh1:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:16xot65:handletextselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 169,
          "summary": "Method HandleTextSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1er8sbj:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1eu7euf:defines-type",
      "from": "file:d3gg9l:epubmetadataextractor-cs",
      "to": "type:1oku42b:epubmetadataextractor",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "line": 12,
          "summary": "Type EpubMetadataExtractor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "targetFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1evf6my:defines-type",
      "from": "file:igeyi7:nexussearchbox-razor",
      "to": "type:1tp07fo:nexussearchbox-component",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 1,
          "summary": "Type NexusSearchBox (component) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "targetFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ewbw6c:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1f24efn:defines-type",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:11syh06:subscriptionplans-table",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 156,
          "summary": "Type SubscriptionPlans (table) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1f482mv:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:ero6bp:loadchapterasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 212,
          "summary": "Method LoadChapterAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fp22hn:imports",
      "from": "file:1sm6kjd:routes-razor",
      "to": "file:13jb3vh:notfound-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Pages/NotFound.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Pages/NotFound.razor",
      "label": "imports NotFound",
      "sourceFileId": "file:1sm6kjd:routes-razor",
      "targetFileId": "file:13jb3vh:notfound-razor",
      "domainTags": [
        "nexusreader-ui",
        "routes",
        "navigation",
        "notfound-fallback-ui",
        "pages"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui",
        "blazor-page",
        "component-composition"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fr54xr:imports",
      "from": "file:1h2hpbe:appdbcontextfactory-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader",
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fr76m0:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "method:8ug383:getstatusclass",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 81,
          "summary": "Method GetStatusClass is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fs0ulc:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:1la3caq:navigatetobook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 20,
          "summary": "Method NavigateToBook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fsud4x:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:zj5uq4:knowledgeunits-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 21,
          "summary": "Method KnowledgeUnits (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fxcjoo:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:ilkln5:onparametersset",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 62,
          "summary": "Method OnParametersSet is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1fze3yr:imports",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1g6hmoh:defines-type",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "type:1y9p8ya:iinfrastructuremarker",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 140,
          "summary": "Type IInfrastructureMarker is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1g89jwt:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1i9kqly:getfullpagecontent",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 204,
          "summary": "Method GetFullPageContent is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1g8g007:contains",
      "from": "file:11mkiaz:aisettings-cs",
      "to": "class:1e23oyo:aisettings",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "summary": "File contains class AiSettings.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11mkiaz:aisettings-cs",
      "targetFileId": "file:11mkiaz:aisettings-cs",
      "domainTags": [
        "ai",
        "model-selection",
        "embedding",
        "rate-retry-and-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gan3qn:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:12nj2l:registerasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 9,
          "summary": "Method RegisterAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gb5sdh:contains",
      "from": "file:1vi6r42:prouserrequirement-cs",
      "to": "class:42ukrv:prouserrequirement",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
          "summary": "File contains class ProUserRequirement.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1vi6r42:prouserrequirement-cs",
      "targetFileId": "file:1vi6r42:prouserrequirement-cs",
      "domainTags": [
        "pro-subscription",
        "ai-tokens",
        "authorization-requirement",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-policy"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gbta8y:contains",
      "from": "file:mm1vnb:readerlayout-razor",
      "to": "class:15qe4r2:readerlayout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "summary": "File contains class ReaderLayout.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "targetFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gc88x1:imports",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gd24k:contains",
      "from": "file:1hyu1ez:prouserhandler-cs",
      "to": "method:1va0nah:prouserhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 15,
          "summary": "Method ProUserHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "targetFileId": "file:1hyu1ez:prouserhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gjdlw6:contains",
      "from": "file:d3gg9l:epubmetadataextractor-cs",
      "to": "class:1oxys0a:epubmetadataextractor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "summary": "File contains class EpubMetadataExtractor.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "targetFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1glgh2b:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gp4jq2:contains",
      "from": "file:vbuljf:ithemeservice-cs",
      "to": "method:1xxkfgr:islightmode",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 5,
          "summary": "Method IsLightMode is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gr2qlm:contains",
      "from": "file:qt46oq:webplatformservice-cs",
      "to": "method:ev8hjj:vibratesuccessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 16,
          "summary": "Method VibrateSuccessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gtp8x:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:1ib6h4r:handlequizrequestedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 92,
          "summary": "Method HandleQuizRequestedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gvby75:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:1lg6b3p:getstringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 23,
          "summary": "Method GetStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gvfpkv:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:mrafiy:subscriptionplan-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 492,
          "summary": "Type SubscriptionPlan (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1gzeci4:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:1a1t07w:logoutasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 72,
          "summary": "Method LogoutAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h0d1mt:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "class:9gxpik:ireadernavigationservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "summary": "File contains class IReaderNavigationService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h2m1au:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:15b2jq7:nexusauthenticationstateprovider",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 18,
          "summary": "Method NexusAuthenticationStateProvider is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h5m35b:contains",
      "from": "file:ha7eft:promptregistry-cs",
      "to": "class:1x9y5vk:promptregistry",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "summary": "File contains class PromptRegistry.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:ha7eft:promptregistry-cs",
      "targetFileId": "file:ha7eft:promptregistry-cs",
      "domainTags": [
        "knowledge-extraction",
        "knowledge-graph",
        "quiz-generation",
        "knowledge-unit-segmentation"
      ],
      "technologyTags": [
        "dotnet",
        "registry",
        "constants"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h5te:contains",
      "from": "file:17v8pus:authenticationheaderhandler-cs",
      "to": "method:oosx7v:clonehttprequestmessageasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 112,
          "summary": "Method CloneHttpRequestMessageAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "targetFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h5xbd0:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:1gbqw83:refreshtokenasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 13,
          "summary": "Method RefreshTokenAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1h6agiu:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:1dvbk1u:gotonextchapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 13,
          "summary": "Method GoToNextChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hfe5gg:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:cuqhj0:getknowledgemapasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 10,
          "summary": "Method GetKnowledgeMapAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hhe4wu:contains",
      "from": "file:qqutlm:planconstants-cs",
      "to": "class:59bgj0:planconstants",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Constants/PlanConstants.cs",
          "summary": "File contains class PlanConstants.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qqutlm:planconstants-cs",
      "targetFileId": "file:qqutlm:planconstants-cs",
      "domainTags": [
        "plan",
        "tokenlimit",
        "activitylabel",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hluc4s:contains",
      "from": "file:1953stk:focusmodeservice-cs",
      "to": "method:1094u9:initializeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 16,
          "summary": "Method InitializeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:1953stk:focusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hqo7rz:contains",
      "from": "file:1awldsb:error-razor",
      "to": "class:1v3riqz:error",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "summary": "File contains class Error.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1awldsb:error-razor",
      "targetFileId": "file:1awldsb:error-razor",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hsr0cs:contains",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "method:10p42fw:initializeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 7,
          "summary": "Method InitializeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hvbte4:contains",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "class:18bavme:ifocusmodeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "summary": "File contains class IFocusModeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1hy4wte:contains",
      "from": "file:h6a0xu:knowledgeunit-cs",
      "to": "class:fvtez6:knowledgeunit",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
          "summary": "File contains class KnowledgeUnit.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1i0qm3a:imports",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1i2d4fc:contains",
      "from": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "to": "method:e05nak:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "line": 11,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "targetFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1i39y7k:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "class:nsawvo:intelligencetoolbar",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "summary": "File contains class IntelligenceToolbar.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1i5zihe:contains",
      "from": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "to": "method:1x7fw9j:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 12,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "targetFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ia5b0c:imports",
      "from": "file:lcvwj6:ebook-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Ebook.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iaykt4:imports",
      "from": "file:qvoxmq:app-razor",
      "to": "file:1sm6kjd:routes-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Routes.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Routes.razor",
      "label": "imports Routes",
      "sourceFileId": "file:qvoxmq:app-razor",
      "targetFileId": "file:1sm6kjd:routes-razor",
      "domainTags": [
        "nexusreader",
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui",
        "routing",
        "error-boundary",
        "authorization-gate"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ie2txi:defines-type",
      "from": "file:12rhzck:program-cs",
      "to": "type:i2x134:semanticsearchrequest",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 568,
          "summary": "Type SemanticSearchRequest is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ig5j90:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1ca58m3:getrelevantcontextasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 37,
          "summary": "Method GetRelevantContextAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ih92p5:contains",
      "from": "file:1hyu1ez:prouserhandler-cs",
      "to": "class:1hxasb:prouserhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "summary": "File contains class ProUserHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "targetFileId": "file:1hyu1ez:prouserhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ijy75t:contains",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "class:9ftatg:addquizresults",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File contains class AddQuizResults.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iktrwm:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:1o0t990:savecoverasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 50,
          "summary": "Method SaveCoverAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iog1i4:contains",
      "from": "file:qvoxmq:app-razor",
      "to": "method:boip8u:render-razor-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 1,
          "summary": "Method Render (razor markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qvoxmq:app-razor",
      "targetFileId": "file:qvoxmq:app-razor",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iopmcs:contains",
      "from": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "to": "class:p0no6:getknowledgegraphqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "summary": "File contains class GetKnowledgeGraphQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "targetFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iqejdi:contains",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "class:tkzvf7:finalnormalizedsubscriptionarchitecture",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "summary": "File contains class FinalNormalizedSubscriptionArchitecture.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1irpljt:contains",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "method:1b2dxzu:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 16,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iuhazb:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1fgpnj9:getgraphdataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 66,
          "summary": "Method GetGraphDataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ive7vt:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:19botw9:readernavigationservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 9,
          "summary": "Method ReaderNavigationService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iwrese:contains",
      "from": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "to": "method:98t2qk:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "line": 21,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "targetFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1iybo8l:defines-type",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "type:96fzwh:ebooks",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 179,
          "summary": "Type Ebooks is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1izn6u:contains",
      "from": "file:47d4sb:synchub-cs",
      "to": "method:1gkzz9r:updateprogress",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 19,
          "summary": "Method UpdateProgress is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j1agjt:contains",
      "from": "file:1ain1yo:mainhublayout-razor",
      "to": "method:64smty:handlelogout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 107,
          "summary": "Method HandleLogout is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "targetFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j3a6h3:defines-type",
      "from": "file:1246987:mainactivity-cs",
      "to": "type:4pccjy:mainactivity",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "line": 9,
          "summary": "Type MainActivity is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1246987:mainactivity-cs",
      "targetFileId": "file:1246987:mainactivity-cs",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j6er6l:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "class:1baxnes:readernavigationservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "summary": "File contains class ReaderNavigationService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j7rgr8:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:1s6rrbj:onquizrequested",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 12,
          "summary": "Method OnQuizRequested is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j8t615:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:brf3z8:knowledgeunit",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 209,
          "summary": "Type KnowledgeUnit is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1j9xc8c:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "method:150wzsg:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 50,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jdfydi:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:iyd7fv:requestscrolltoblock",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 11,
          "summary": "Method RequestScrollToBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jgj5og:contains",
      "from": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "method:1xywi1n:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "line": 24,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jj7rjg:defines-type",
      "from": "file:1c4q2p1:graphviewmodels-cs",
      "to": "type:5sl01j:graphnodedto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
          "line": 3,
          "summary": "Type GraphNodeDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1c4q2p1:graphviewmodels-cs",
      "targetFileId": "file:1c4q2p1:graphviewmodels-cs",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jjvxr3:contains",
      "from": "file:13phiik:billingservice-cs",
      "to": "method:1ctlycb:handlesubscriptionupdatedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 32,
          "summary": "Method HandleSubscriptionUpdatedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "targetFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jm7xps:defines-type",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "type:xd8rr7:ireadernavigationservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 3,
          "summary": "Type IReaderNavigationService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1joe0ao:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1egheyd:executeairequestandcacheasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 140,
          "summary": "Method ExecuteAiRequestAndCacheAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1joi207:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:1djp2cc:subscriptionplan",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 467,
          "summary": "Type SubscriptionPlan is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jpzxvw:contains",
      "from": "file:rfn6bc:ibillingservice-cs",
      "to": "method:16n7wyr:handlesubscriptiondeletedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "line": 9,
          "summary": "Method HandleSubscriptionDeletedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "targetFileId": "file:rfn6bc:ibillingservice-cs",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jqamsh:defines-type",
      "from": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "to": "type:1l23zuf:addebookreadyflag",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "line": 17,
          "summary": "Type AddEbookReadyFlag is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "targetFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jucc6f:defines-type",
      "from": "file:ha7eft:promptregistry-cs",
      "to": "type:16wdv5z:promptregistry",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "line": 3,
          "summary": "Type PromptRegistry is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:ha7eft:promptregistry-cs",
      "targetFileId": "file:ha7eft:promptregistry-cs",
      "domainTags": [
        "knowledge-extraction",
        "knowledge-graph",
        "quiz-generation",
        "knowledge-unit-segmentation"
      ],
      "technologyTags": [
        "dotnet",
        "registry",
        "constants"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1jvkjn6:defines-type",
      "from": "file:13u663i:20260510151022-normalizeauthor-cs",
      "to": "type:1p2z625:normalizeauthor",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "line": 9,
          "summary": "Type NormalizeAuthor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "targetFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1k3uk9t:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "class:utixgx:iknowledgeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "summary": "File contains class IKnowledgeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1k52jgx:contains",
      "from": "file:2eckht:verifygroundednesscommand-cs",
      "to": "method:1fl6nt2:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 18,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "targetFileId": "file:2eckht:verifygroundednesscommand-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1k5oiky:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:w4053o:initializeselectionlistenerasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 117,
          "summary": "Method InitializeSelectionListenerAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1k6nbzc:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:1nn41cx:knowledgeunitlink",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 273,
          "summary": "Type KnowledgeUnitLink is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1kavofr:defines-type",
      "from": "file:9775p0:subscriptionplandto-cs",
      "to": "type:2f6m0y:subscriptionplandto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs",
          "line": 3,
          "summary": "Type SubscriptionPlanDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:9775p0:subscriptionplandto-cs",
      "targetFileId": "file:9775p0:subscriptionplandto-cs",
      "domainTags": [
        "subscriptionplan",
        "billing",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record-c-9"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1kkknnf:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:13emvrm:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 56,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1kl586f:contains",
      "from": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "to": "method:3zfaqn:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "line": 50,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ky0v9h:contains",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "method:w31hua:getdevicecontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 10,
          "summary": "Method GetDeviceContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ky1fgb:contains",
      "from": "file:13kvr59:contenthasher-cs",
      "to": "class:lvxelt:contenthasher",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "summary": "File contains class ContentHasher.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "targetFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l0arfb:defines-type",
      "from": "file:1m26se1:getinitializationstatusquery-cs",
      "to": "type:18ezfq6:getinitializationstatusquery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
          "line": 5,
          "summary": "Type GetInitializationStatusQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "targetFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "domainTags": [
        "initializationstatus",
        "nexusreader",
        "queries",
        "system"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "query-object"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l0ffwj:contains",
      "from": "file:y077jr:getreaderpagequeryhandler-cs",
      "to": "class:1lgm7qp:getreaderpagequeryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "summary": "File contains class GetReaderPageQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "targetFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l2xrar:defines-type",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "type:uvv2sw:keyconcept",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "line": 5,
          "summary": "Type KeyConcept is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l4dise:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:urpd77:logoutasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 11,
          "summary": "Method LogoutAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l4y8bt:contains",
      "from": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "to": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 29,
          "summary": "Method SearchLibrarySemanticallyQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1l4zsba:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:o7fqko:handlesyncprogressreceived",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 161,
          "summary": "Method HandleSyncProgressReceived is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lecew8:imports",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lml82p:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:1yypduz:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 30,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lo6fcn:contains",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "method:1do3jf2:extractmetadataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 45,
          "summary": "Method ExtractMetadataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lqm2bl:defines-type",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "type:sv23ol:iebookrepository",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 9,
          "summary": "Type IEbookRepository is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ls3sw:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1ol1cx2:verifygroundednessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 56,
          "summary": "Method VerifyGroundednessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lu6lit:contains",
      "from": "file:1wkle85:reconnectmodal-razor-js",
      "to": "method:12nt8as:resume",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 48,
          "summary": "Method resume is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "targetFileId": "file:1wkle85:reconnectmodal-razor-js",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lulg81:defines-type",
      "from": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "to": "type:1lq0yf5:signalrsyncbroadcaster",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 11,
          "summary": "Type SignalRSyncBroadcaster is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lxk53m:contains",
      "from": "file:1d4ycw2:semanticknowledgecache-cs",
      "to": "class:e0216a:semanticknowledgecache",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
          "summary": "File contains class SemanticKnowledgeCache.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "semanticknowledgecache",
        "embedding",
        "modelid",
        "promptversion"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-mapped-model-ef-core-style-with-data-annotations",
        "embedding-cache"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1lzxeku:defines-type",
      "from": "file:1awldsb:error-razor",
      "to": "type:clecc9:error-component-backing-model",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "line": 2,
          "summary": "Type Error (component backing model) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1awldsb:error-razor",
      "targetFileId": "file:1awldsb:error-razor",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1m1q2za:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "method:1w7mi8p:updateprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 70,
          "summary": "Method UpdateProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1m22o6y:defines-type",
      "from": "file:xcxh5w:nexususer-cs",
      "to": "type:1fmha7h:nexususer",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "line": 7,
          "summary": "Type NexusUser is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:xcxh5w:nexususer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "user",
        "tenant",
        "subscriptionplan",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1m4aw1m:contains",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "method:ptkxhj:vibratesuccessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 7,
          "summary": "Method VibrateSuccessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mec1vt:contains",
      "from": "file:lqr4h8:ingestebookcommandhandler-cs",
      "to": "method:jlw375:ingestebookcommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 15,
          "summary": "Method IngestEbookCommandHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "targetFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mil6be:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:1gtjcaz:updategraph",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 15,
          "summary": "Method UpdateGraph is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mimdx3:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:1oljw52:getboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 10,
          "summary": "Method GetBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mjnk0m:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:yif4p8:processknowledgeunitsasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 225,
          "summary": "Method ProcessKnowledgeUnitsAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mkh24g:contains",
      "from": "file:qvoxmq:app-razor",
      "to": "method:kjs6w7:iife-bootstrap-preloader-handlers",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 25,
          "summary": "Method IIFE — bootstrap preloader handlers is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qvoxmq:app-razor",
      "targetFileId": "file:qvoxmq:app-razor",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mnuu22:contains",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "class:1a6v1w9:initialpostgres",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "summary": "File contains class InitialPostgres.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1msi60q:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:10uf4tt:savetolibrary",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 198,
          "summary": "Method SaveToLibrary is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1mw769y:defines-type",
      "from": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "to": "type:165f8vd:searchlibrarysemanticallyqueryhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 22,
          "summary": "Type SearchLibrarySemanticallyQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1n0uznk:defines-type",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "type:1dtv9c0:nexususer-entity-mapping",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 200,
          "summary": "Type NexusUser (entity mapping) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1n3gg6h:contains",
      "from": "file:11crtur:profile-razor",
      "to": "method:k7fbfq:calculateprogress",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 121,
          "summary": "Method CalculateProgress is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nc3lov:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:1i33wis:logoutasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 104,
          "summary": "Method LogoutAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nfmhoj:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:je6l0s:ensuredirectoryexists",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 66,
          "summary": "Method EnsureDirectoryExists is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nkukg2:contains",
      "from": "file:1y56eud:author-cs",
      "to": "class:1nsniny:author",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Author.cs",
          "summary": "File contains class Author.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1y56eud:author-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nrnj8b:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "class:5wh0z0:selectionaipanel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "summary": "File contains class SelectionAiPanel.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ntl7pc:defines-type",
      "from": "file:62lucr:app-xaml-cs",
      "to": "type:1cq4i8l:app",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "line": 3,
          "summary": "Type App is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:62lucr:app-xaml-cs",
      "targetFileId": "file:62lucr:app-xaml-cs",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nw52fi:contains",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "method:1lzfzn4:book-component-parameter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 70,
          "summary": "Method Book (component parameter) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ny31jj:contains",
      "from": "file:16axv5i:getmyebooksquery-cs",
      "to": "class:1far2m1:getmyebooksqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "File contains class GetMyEbooksQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "targetFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nyh8xr:contains",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "class:1ojuflh:addebooklastchapterindex",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File contains class AddEbookLastChapterIndex.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nzoum9:defines-type",
      "from": "file:1c4q2p1:graphviewmodels-cs",
      "to": "type:4tuqh6:graphlinkdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
          "line": 4,
          "summary": "Type GraphLinkDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1c4q2p1:graphviewmodels-cs",
      "targetFileId": "file:1c4q2p1:graphviewmodels-cs",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nztjk1:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "class:1y1hevk:iknowledgegraphservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "summary": "File contains class IKnowledgeGraphService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1nzuqgz:contains",
      "from": "file:1kjntt:intelligence-razor",
      "to": "method:91tjy5:handlekeyup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 400,
          "summary": "Method HandleKeyUp is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "targetFileId": "file:1kjntt:intelligence-razor",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1o2cvci:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:xv5ikh:currentchapterindex",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 6,
          "summary": "Method CurrentChapterIndex is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1o2jeha:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1nzct8x:loggrapherror",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 160,
          "summary": "Method LogGraphError is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1o63yjx:defines-type",
      "from": "file:csf9l7:login-razor",
      "to": "type:gqgg0k:loginmodel",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 157,
          "summary": "Type LoginModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1o896n2:contains",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "method:b9ya71:navigatetolibrary-inline-lambda",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 62,
          "summary": "Method NavigateToLibrary (inline lambda) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1oazj2m:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:1d5hut9:author-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 162,
          "summary": "Type Author (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1odgrks:contains",
      "from": "file:1953stk:focusmodeservice-cs",
      "to": "method:wn38ys:focusmodeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 11,
          "summary": "Method FocusModeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:1953stk:focusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ogkagv:imports",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "label": "imports NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1oliq7k:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:axmshz:bookstorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 14,
          "summary": "Method BookStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1omui87:contains",
      "from": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "to": "method:y8prsw:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "line": 22,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "targetFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1owfaja:defines-type",
      "from": "file:10kr3oo:getknowledgegraphquery-cs",
      "to": "type:je3vog:getknowledgegraphquery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
          "line": 8,
          "summary": "Type GetKnowledgeGraphQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "targetFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "domainTags": [
        "knowledge-graph",
        "tenant",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "queryobject"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1oy3wln:contains",
      "from": "file:w6cklc:mappingconfig-cs",
      "to": "class:1lmiwem:mappingconfig",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "summary": "File contains class MappingConfig.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "targetFileId": "file:w6cklc:mappingconfig-cs",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1oye5w3:defines-type",
      "from": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "type:1e3plwu:makeknowledgeunitebookidnullable",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "line": 9,
          "summary": "Type MakeKnowledgeUnitEbookIdNullable is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1p0s12h:contains",
      "from": "file:csf9l7:login-razor",
      "to": "class:1qurvhs:login",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "summary": "File contains class Login.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1p21jey:contains",
      "from": "file:ayj9r2:iqueryhandler-cs",
      "to": "method:7ldigq:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "line": 6,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:ayj9r2:iqueryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1p8sufq:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:66cucs:onnodeclicked",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 101,
          "summary": "Method OnNodeClicked is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1p9than:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "class:vgua1e:identityservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "File contains class IdentityService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pcnt3s:contains",
      "from": "file:1jnstne:readerinteractionservice-cs",
      "to": "method:15ros9m:notifytextselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 25,
          "summary": "Method NotifyTextSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pdnj1f:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:d3gg9l:epubmetadataextractor-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "label": "imports NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1piw5e5:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1plh853:contains",
      "from": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "to": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "summary": "File contains class UpdateReadingProgressCommandHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "targetFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1po1y60:defines-type",
      "from": "file:1fs0p2c:userprofiledto-cs",
      "to": "type:wh8ieq:userprofiledto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "line": 5,
          "summary": "Type UserProfileDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1fs0p2c:userprofiledto-cs",
      "targetFileId": "file:1fs0p2c:userprofiledto-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1potyn0:defines-type",
      "from": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "to": "type:1sj29na:fixknowledgeunitebookid",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "line": 17,
          "summary": "Type FixKnowledgeUnitEbookId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "targetFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pp0nfe:contains",
      "from": "file:1uhcs2l:library-razor",
      "to": "method:bktx49:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 511,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "targetFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ppnfgc:defines-type",
      "from": "file:1dbwiwx:program-cs",
      "to": "type:k9hk67:throwingdbcontextfactory",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 61,
          "summary": "Type ThrowingDbContextFactory is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pxbaui:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:18ccdu4:mapdevicetype",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 71,
          "summary": "Method MapDeviceType is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pxtow:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:1r63qu7:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 63,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1pz0shw:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qbvhs7:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qcis6g:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:p6r8md:setactivenode",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 16,
          "summary": "Method SetActiveNode is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qd8jqp:contains",
      "from": "file:rfn6bc:ibillingservice-cs",
      "to": "method:1px2su2:handlesubscriptionupdatedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "line": 8,
          "summary": "Method HandleSubscriptionUpdatedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "targetFileId": "file:rfn6bc:ibillingservice-cs",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qef0yc:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1wyr0y8:quizresult-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/QuizResult.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/QuizResult.cs",
      "label": "imports NexusReader.Domain/Entities/QuizResult.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qf5aba:contains",
      "from": "file:1mo9e25:iepubreader-cs",
      "to": "class:euc6fx:iepubreader",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "summary": "File contains class IEpubReader.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1mo9e25:iepubreader-cs",
      "targetFileId": "file:1mo9e25:iepubreader-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qfbaim:defines-type",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "type:1juajpg:makeknowledgeunitebookidnullable",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 17,
          "summary": "Type MakeKnowledgeUnitEbookIdNullable is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qgos9b:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:1ouv7tw:savecoverasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 43,
          "summary": "Method SaveCoverAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qhzusk:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1wyr0y8:quizresult-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/QuizResult.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/QuizResult.cs",
      "label": "imports NexusReader.Domain/Entities/QuizResult.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qii4k4:contains",
      "from": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "to": "method:cdxwj:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "line": 12,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "targetFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qkdofp:calls",
      "from": "method:whfss9:onfocuskeypressed",
      "to": "method:17j6y8x:toggleasync",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 80,
          "summary": "Method OnFocusKeypressed calls ToggleAsync in NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "label": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:1qn1fhr:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:6vyv4w:handlenodeselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 84,
          "summary": "Method HandleNodeSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qrzpcm:imports",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1qzyc8s:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:16m1d8f:savestringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 16,
          "summary": "Method SaveStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1r436op:contains",
      "from": "file:1uhcs2l:library-razor",
      "to": "method:676x78:loadbooksasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 519,
          "summary": "Method LoadBooksAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "targetFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1r564uq:contains",
      "from": "file:qt46oq:webplatformservice-cs",
      "to": "method:eown21:vibrateerrorasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 17,
          "summary": "Method VibrateErrorAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1r56siw:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "method:1ak3em3:calculateprogress",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 44,
          "summary": "Method CalculateProgress is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1rbflws:contains",
      "from": "file:w6cklc:mappingconfig-cs",
      "to": "method:14hjndb:addmapsterconfiguration",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "line": 11,
          "summary": "Method AddMapsterConfiguration is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "targetFileId": "file:w6cklc:mappingconfig-cs",
      "domainTags": [
        "nexususer",
        "ebook",
        "userprofiledto",
        "lastreadbookdto"
      ],
      "technologyTags": [
        "dotnet",
        "mapping-adapter",
        "service-registration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1riv2a8:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:15b21oe:onhighlightblockrequested",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 7,
          "summary": "Method OnHighlightBlockRequested is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1rmkjaw:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:1g73g8y:positionbelow",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 60,
          "summary": "Method PositionBelow is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1rmox1b:contains",
      "from": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "to": "class:19ihp67:getinitializationstatusqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "summary": "File contains class GetInitializationStatusQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "targetFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1rn3k7o:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:10perg:savesecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 76,
          "summary": "Method SaveSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s07cjf:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1025f5z:getsummaryandquizasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 71,
          "summary": "Method GetSummaryAndQuizAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s0a1tl:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "label": "imports NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s3vi62:defines-type",
      "from": "file:1vi6r42:prouserrequirement-cs",
      "to": "type:11vxpr5:prouserrequirement",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs",
          "line": 8,
          "summary": "Type ProUserRequirement is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1vi6r42:prouserrequirement-cs",
      "targetFileId": "file:1vi6r42:prouserrequirement-cs",
      "domainTags": [
        "pro-subscription",
        "ai-tokens",
        "authorization-requirement",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-policy"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s5zgvv:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:1jwlkph:knowledgeunitlinks-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 22,
          "summary": "Method KnowledgeUnitLinks (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s8e1us:contains",
      "from": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "to": "class:1ca124f:adddescriptiontoebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "summary": "File contains class AddDescriptionToEbook.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "targetFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1s9vj3z:contains",
      "from": "file:mm1vnb:readerlayout-razor",
      "to": "method:zb4rdj:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 111,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "targetFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1sad923:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:18714ak:saveboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 35,
          "summary": "Method SaveBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1seq0l5:calls",
      "from": "method:1oq28g8:requestsummary",
      "to": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 83,
          "summary": "Method RequestSummary calls RequestSummaryAndQuizAsync in NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "label": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:1skw2dz:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1oz3km6:getsummaryandquizasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 32,
          "summary": "Method GetSummaryAndQuizAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1slpcda:contains",
      "from": "file:1wvs02p:tokenlimitrequirement-cs",
      "to": "class:9rdcag:tokenlimitrequirement",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
          "summary": "File contains class TokenLimitRequirement.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "targetFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "domainTags": [
        "tokenlimit",
        "authorization-policy",
        "nexusreader",
        "identity"
      ],
      "technologyTags": [
        "dotnet",
        "policy-based-authorization",
        "requirement-authorizationrequirement"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1smdrhp:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:8ggznb:identityservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 23,
          "summary": "Method IdentityService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1sn9c64:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "class:1cca8vk:knowledgecoordinator",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "summary": "File contains class KnowledgeCoordinator.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1soy39o:defines-type",
      "from": "file:1k69za4:semanticsearchresultdto-cs",
      "to": "type:1qfkwqz:semanticsearchresultdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
          "line": 3,
          "summary": "Type SemanticSearchResultDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "targetFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "domainTags": [
        "semanticsearch",
        "ai",
        "searchresult",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1sr6rga:contains",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "method:ij0vl0:addebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 24,
          "summary": "Method AddEbook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1stkkyx:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:icuddu:serveridentityservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 25,
          "summary": "Method ServerIdentityService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1t4qmxc:contains",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "class:1xhm2de:initialpostgres",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "summary": "File contains class InitialPostgres.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1t73syc:contains",
      "from": "file:p5ean4:error-razor",
      "to": "method:1oj8i7o:render-conditional-requestid-block",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 9,
          "summary": "Method Render: conditional RequestId block is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tavqt4:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:kv7eey:removesecureasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 98,
          "summary": "Method RemoveSecureAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tf13xc:contains",
      "from": "file:4pj82p:getuserprofilequeryhandler-cs",
      "to": "method:1t48k4l:getuserprofilequeryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 13,
          "summary": "Method GetUserProfileQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "targetFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tiex1a:contains",
      "from": "file:82rsqa:redirecttologin-razor",
      "to": "method:upe53r:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 4,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "targetFileId": "file:82rsqa:redirecttologin-razor",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tjemll:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:1y3guy7:epubreaderservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 21,
          "summary": "Method EpubReaderService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1to34ds:imports",
      "from": "file:1m6x5qy:knowledgeunitlink-cs",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports KnowledgeUnit",
      "sourceFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader",
        "ebook",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tpz4wc:defines-type",
      "from": "file:1dbwiwx:program-cs",
      "to": "type:1mye80d:throwingbookstorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Type ThrowingBookStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1trms7q:contains",
      "from": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "to": "method:8mq94d:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "line": 11,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "targetFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tyje9b:contains",
      "from": "file:1k4g04u:iquery-cs",
      "to": "class:4nrp60:iquery-tresponse",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
          "summary": "File contains class IQuery<TResponse>.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1k4g04u:iquery-cs",
      "targetFileId": "file:1k4g04u:iquery-cs",
      "domainTags": [
        "query",
        "result-t",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediator",
        "result-wrapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1tykdb4:imports",
      "from": "file:38gozs:tokenlimithandler-cs",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports SubscriptionPlan",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check",
        "entity",
        "dataannotations-ef-core"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1u6v6eg:defines-type",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "type:ffgofm:quizresult-entity-mapping",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 277,
          "summary": "Type QuizResult (entity mapping) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ubtec4:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:7u4uld:get-user-profile-get-identity-profile",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 548,
          "summary": "Method Get User Profile (GET /identity/profile) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1uhf1iq:defines-type",
      "from": "file:h6a0xu:knowledgeunit-cs",
      "to": "type:sahnml:knowledgeunit",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
          "line": 7,
          "summary": "Type KnowledgeUnit is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ukwnaq:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1l7jj8x:initializeobserverasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 130,
          "summary": "Method InitializeObserverAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1umgxbv:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "class:1jwtkwo:syncservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "summary": "File contains class SyncService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1us3qds:contains",
      "from": "file:4pj82p:getuserprofilequeryhandler-cs",
      "to": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "File contains class GetUserProfileQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "targetFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v04y0k:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:1mthy2:sanitizeparagraph",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 166,
          "summary": "Method SanitizeParagraph is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v06y1:contains",
      "from": "file:1246987:mainactivity-cs",
      "to": "class:1ay0je3:mainactivity",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "summary": "File contains class MainActivity.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1246987:mainactivity-cs",
      "targetFileId": "file:1246987:mainactivity-cs",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v0yrec:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1ari3ha:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 41,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v1frjy:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v1swn6:contains",
      "from": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "to": "method:rci0sa:getknowledgegraphqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 11,
          "summary": "Method GetKnowledgeGraphQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "targetFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "domainTags": [
        "knowledgegraph",
        "graphdata",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v3ypfa:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports NexusReader.Domain/Entities/Author.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v53ui3:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:cusclc:subscriptionplans-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 25,
          "summary": "Method SubscriptionPlans (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1v8awq6:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vc3f6c:contains",
      "from": "file:ua9rra:mainpage-xaml-cs",
      "to": "class:8viv8y:mainpage",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "summary": "File contains class MainPage.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:ua9rra:mainpage-xaml-cs",
      "targetFileId": "file:ua9rra:mainpage-xaml-cs",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vdacrc:contains",
      "from": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "method:jenau5:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "line": 12,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vfgd5w:defines-type",
      "from": "file:1fs0p2c:userprofiledto-cs",
      "to": "type:1g1re12:lastreadbookdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "line": 31,
          "summary": "Type LastReadBookDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1fs0p2c:userprofiledto-cs",
      "targetFileId": "file:1fs0p2c:userprofiledto-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "book",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vhbbao:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:5hhpkw:setquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 16,
          "summary": "Method SetQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vhsfe0:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "method:68za1u:handlelogout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 64,
          "summary": "Method HandleLogout is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vjdoja:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vmgocd:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:161c21f:savecoverasync-byte",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Method SaveCoverAsync (byte[]) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vqe202:contains",
      "from": "file:47d4sb:synchub-cs",
      "to": "method:1jy35qw:ondisconnectedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 38,
          "summary": "Method OnDisconnectedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vs271m:defines-type",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "type:16mxgid:ifocusmodeservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 3,
          "summary": "Type IFocusModeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vt1btd:contains",
      "from": "file:184ajmn:nexustypography-razor",
      "to": "class:vspg7j:nexustypography",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "summary": "File contains class NexusTypography.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "targetFileId": "file:184ajmn:nexustypography-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vv7sb8:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1vyx8hh:defines-type",
      "from": "file:e05hy9:authordto-cs",
      "to": "type:1m6ptus:authordto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/AuthorDto.cs",
          "line": 3,
          "summary": "Type AuthorDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:e05hy9:authordto-cs",
      "targetFileId": "file:e05hy9:authordto-cs",
      "domainTags": [
        "author",
        "user",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "immutable-record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1w0t4xq:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:f76by4:askquestionasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 15,
          "summary": "Method AskQuestionAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1w23tap:defines-type",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "type:pp4157:knowledgegraphservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 5,
          "summary": "Type KnowledgeGraphService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1w84j65:contains",
      "from": "file:13u663i:20260510151022-normalizeauthor-cs",
      "to": "class:1j6dl20:normalizeauthor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "summary": "File contains class NormalizeAuthor.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "targetFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wfy0q9:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:lftqc:savestringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 10,
          "summary": "Method SaveStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wgf4g6:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:mpmpcx:saveebookasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 25,
          "summary": "Method SaveEbookAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wgp01g:imports",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "file:wgkae9:ireadernavigationservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wmtwxl:contains",
      "from": "file:p5ean4:error-razor",
      "to": "method:7gn3l8:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 34,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wpec84:defines-type",
      "from": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "to": "type:cn85p2:increasehashlength",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 9,
          "summary": "Type IncreaseHashLength is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "targetFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wrvkdy:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wtql67:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:8m5lws:panelstyle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 69,
          "summary": "Method PanelStyle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1wx4t3z:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1x0rrup:imports",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1x3v9h9:defines-type",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "type:11qfbw:knowledgepacket",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "line": 19,
          "summary": "Type KnowledgePacket is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1x7agk5:defines-type",
      "from": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "to": "type:g3vwaj:getinitializationstatusqueryhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "line": 6,
          "summary": "Type GetInitializationStatusQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "targetFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1x7np6m:imports",
      "from": "file:38gozs:tokenlimithandler-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusUser",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader",
        "user",
        "tenant",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check",
        "entity",
        "ef-core-navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xee3fu:imports",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xfiq3g:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 261,
          "summary": "Method Knowledge API group mappings is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xidtv1:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:17924up:removeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 58,
          "summary": "Method RemoveAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xk8air:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:3dd3av:callknowledgeapiasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 116,
          "summary": "Method CallKnowledgeApiAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xl02f9:contains",
      "from": "file:vbuljf:ithemeservice-cs",
      "to": "method:1fw96o1:onthemechanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 6,
          "summary": "Method OnThemeChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xlk9is:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:60f4ut:getdevicecontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 51,
          "summary": "Method GetDeviceContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xm9vl0:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports NexusReader.Domain/Entities/Author.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xn6zhi:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:8fzkrx:account-login-form-post-account-login-form",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 520,
          "summary": "Method Account Login Form (POST /account/login-form) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xrahib:contains",
      "from": "file:1ain1yo:mainhublayout-razor",
      "to": "class:vf4020:mainhublayout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "summary": "File contains class MainHubLayout.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "targetFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xrr3j4:contains",
      "from": "file:mm1vnb:readerlayout-razor",
      "to": "method:1m8qyhe:handleupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 109,
          "summary": "Method HandleUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "targetFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xuj0xh:contains",
      "from": "file:xxwh7p:asklibraryquestionquery-cs",
      "to": "method:17jlxw0:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 23,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xvqlrf:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:1g8j6qo:getgraphdataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 9,
          "summary": "Method GetGraphDataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1xx8xh8:contains",
      "from": "file:y077jr:getreaderpagequeryhandler-cs",
      "to": "method:1al0hre:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 16,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "targetFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1y85tka:imports",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "file:1fs0p2c:userprofiledto-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "summary": "File imports dependency NexusReader.Application/DTOs/User/UserProfileDto.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "label": "imports NexusReader.Application/DTOs/User/UserProfileDto.cs",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1fs0p2c:userprofiledto-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1y8nhy:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:1bkauax:generatefullquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 88,
          "summary": "Method GenerateFullQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1y9tycm:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:7pcmld:getsummaryandquizasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 11,
          "summary": "Method GetSummaryAndQuizAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ye4okz:contains",
      "from": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "to": "method:16i3kbl:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "targetFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ye5wax:contains",
      "from": "file:16axv5i:getmyebooksquery-cs",
      "to": "method:527vme:getmyebooksqueryhandler-ctor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 15,
          "summary": "Method GetMyEbooksQueryHandler (ctor) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "targetFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ylmptv:contains",
      "from": "file:1jnstne:readerinteractionservice-cs",
      "to": "method:nvgthi:requestscrolltoblock",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 15,
          "summary": "Method RequestScrollToBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1yo5apc:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "method:14llm2d:disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 103,
          "summary": "Method DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1yqfoi8:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:1l4808t:handleupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 98,
          "summary": "Method HandleUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1ysdbsj:defines-type",
      "from": "file:184ajmn:nexustypography-razor",
      "to": "type:oa0wy5:typographyvariant",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 19,
          "summary": "Type TypographyVariant is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "targetFileId": "file:184ajmn:nexustypography-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:1yw7bnu:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 112,
          "summary": "Method RequestSummaryAndQuizAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:20al0p:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:1lzew1d:gotopreviouschapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 37,
          "summary": "Method GoToPreviousChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:20x62s:defines-type",
      "from": "file:11mkiaz:aisettings-cs",
      "to": "type:7ek9gn:aisettings",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "line": 3,
          "summary": "Type AiSettings is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:11mkiaz:aisettings-cs",
      "targetFileId": "file:11mkiaz:aisettings-cs",
      "domainTags": [
        "ai",
        "model-selection",
        "embedding",
        "rate-retry-and-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:21fl02:defines-type",
      "from": "file:1bdy8y4:groundedresponsedto-cs",
      "to": "type:h0u00k:citationdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs",
          "line": 11,
          "summary": "Type CitationDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1bdy8y4:groundedresponsedto-cs",
      "targetFileId": "file:1bdy8y4:groundedresponsedto-cs",
      "domainTags": [
        "grounded-ai-response",
        "citation",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2375ey:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:1qc1jbv:onloadingchanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 13,
          "summary": "Method OnLoadingChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:24scnm:imports",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "file:1wyr0y8:quizresult-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/QuizResult.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/QuizResult.cs",
      "label": "imports NexusReader.Domain/Entities/QuizResult.cs",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:27e76l:defines-type",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "type:1vae1rw:inativestorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 5,
          "summary": "Type INativeStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:28otp6:imports",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2cxtao:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:nyrl9z:getprofileinternalasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 150,
          "summary": "Method GetProfileInternalAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2dz2lk:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:1r1tcl2:notifynodeselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 10,
          "summary": "Method NotifyNodeSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2g6one:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:yo2gbi:broadcastingestionprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 94,
          "summary": "Method BroadcastIngestionProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2jjsq8:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:t1zuul:handlenodeselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 44,
          "summary": "Method HandleNodeSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2ngx29:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:6z33me:navigatetobook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 58,
          "summary": "Method NavigateToBook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2on7zu:contains",
      "from": "file:16axv5i:getmyebooksquery-cs",
      "to": "method:1epuq0y:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 20,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "targetFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2qpw2o:defines-type",
      "from": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "to": "type:1a7gg4i:fixknowledgeunitebookid",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "line": 9,
          "summary": "Type FixKnowledgeUnitEbookId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "targetFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2qv41m:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:6gn0zk:verifygroundednessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 290,
          "summary": "Method VerifyGroundednessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2thftq:contains",
      "from": "file:vdwqp9:iepubmetadataextractor-cs",
      "to": "class:18sfucp:iepubmetadataextractor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "summary": "File contains class IEpubMetadataExtractor.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "targetFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "domainTags": [
        "epub",
        "metadata",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-inversion"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2ymsf2:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:2yz849:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:31z7u7:contains",
      "from": "file:1b5rrku:dashboard-razor",
      "to": "method:lqrlha:oninitializedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "line": 90,
          "summary": "Method OnInitializedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "targetFileId": "file:1b5rrku:dashboard-razor",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:34b6yb:contains",
      "from": "file:108l4jq:groundednessbadge-razor",
      "to": "class:3ugxc0:groundednessbadge",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "File contains class GroundednessBadge.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "targetFileId": "file:108l4jq:groundednessbadge-razor",
      "domainTags": [
        "groundedness",
        "tenant-scoped-verification",
        "nexusreader-ui",
        "molecules"
      ],
      "technologyTags": [
        "blazor-component",
        "mediator-command-request-dispatched-to-application-handler",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:38ivdg:contains",
      "from": "file:wxheam:appjsoncontext-cs",
      "to": "class:potzj8:appjsoncontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Common/AppJsonContext.cs",
          "summary": "File contains class AppJsonContext.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wxheam:appjsoncontext-cs",
      "targetFileId": "file:wxheam:appjsoncontext-cs",
      "domainTags": [
        "graph",
        "graphnode",
        "graphlink",
        "graphdata"
      ],
      "technologyTags": [
        "dotnet",
        "source-generator",
        "serialization-context"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:38ivg9:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:13af2s9:getprofileasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 108,
          "summary": "Method GetProfileAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3b6z5t:defines-type",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "type:f4i93d:mauistorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 8,
          "summary": "Type MauiStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3cmc04:defines-type",
      "from": "file:faws7u:stripesettings-cs",
      "to": "type:mcoiln:stripesettings",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "line": 3,
          "summary": "Type StripeSettings is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:faws7u:stripesettings-cs",
      "targetFileId": "file:faws7u:stripesettings-cs",
      "domainTags": [
        "stripe",
        "billing",
        "products",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "options-pattern",
        "configuration-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3fbd42:contains",
      "from": "file:1uay25w:mauiprogram-cs",
      "to": "method:hh1uha:createmauiapp",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "line": 12,
          "summary": "Method CreateMauiApp is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uay25w:mauiprogram-cs",
      "targetFileId": "file:1uay25w:mauiprogram-cs",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3ikbcb:imports",
      "from": "file:lcvwj6:ebook-cs",
      "to": "file:1y56eud:author-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Ebook.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Author.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "label": "imports Author",
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations",
        "ef-core-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3jfgqr:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:9q9eda:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 63,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3ln97r:contains",
      "from": "file:11crtur:profile-razor",
      "to": "method:hkgxib:render-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 1,
          "summary": "Method Render (markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3oa6q3:defines-type",
      "from": "file:1wvs02p:tokenlimitrequirement-cs",
      "to": "type:h4q16i:tokenlimitrequirement",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
          "line": 8,
          "summary": "Type TokenLimitRequirement is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "targetFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "domainTags": [
        "tokenlimit",
        "authorization-policy",
        "nexusreader",
        "identity"
      ],
      "technologyTags": [
        "dotnet",
        "policy-based-authorization",
        "requirement-authorizationrequirement"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3ozpeb:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:19fc1gq:ebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 180,
          "summary": "Type Ebook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3p4np:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1wz04qu:clearcacheasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 136,
          "summary": "Method ClearCacheAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3rhfz1:contains",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "method:sdo0jm:vibrateasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 9,
          "summary": "Method VibrateAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3wonpz:contains",
      "from": "file:1kjntt:intelligence-razor",
      "to": "method:c84ulg:askquestionasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 408,
          "summary": "Method AskQuestionAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "targetFileId": "file:1kjntt:intelligence-razor",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:3xuium:defines-type",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:19jp6ev:knowledgeunits-table",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 137,
          "summary": "Type KnowledgeUnits (table) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:495v03:contains",
      "from": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "to": "method:1ed5bhs:updatereadingprogresscommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 18,
          "summary": "Method UpdateReadingProgressCommandHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "targetFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4d0v5x:defines-type",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "type:gbavgv:increasehashlength",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "line": 16,
          "summary": "Type IncreaseHashLength is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4f91a7:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:nk74zf:semanticknowledgecache",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 440,
          "summary": "Type SemanticKnowledgeCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4flg94:contains",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "method:qdnq0x:vibrateerrorasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 8,
          "summary": "Method VibrateErrorAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4foovb:imports",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4g7mud:contains",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "method:17j6y8x:toggleasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 8,
          "summary": "Method ToggleAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4gab34:defines-type",
      "from": "file:uhcd4x:quizviewmodels-cs",
      "to": "type:5b8im:quizquestiondto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
          "line": 3,
          "summary": "Type QuizQuestionDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:uhcd4x:quizviewmodels-cs",
      "targetFileId": "file:uhcd4x:quizviewmodels-cs",
      "domainTags": [
        "quiz",
        "quizquestion",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4gblae:defines-type",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "type:1nbofxi:mauistorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 8,
          "summary": "Type MauiStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4kd6td:defines-type",
      "from": "file:1rikffk:viewmodels-cs",
      "to": "type:15iy4fl:textsegmentblock",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
          "line": 8,
          "summary": "Type TextSegmentBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1rikffk:viewmodels-cs",
      "targetFileId": "file:1rikffk:viewmodels-cs",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4lytfx:contains",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "method:1bjnsl7:saveebookasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 16,
          "summary": "Method SaveEbookAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4myluh:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:1ptxaoh:handlefileselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 149,
          "summary": "Method HandleFileSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4o2ew4:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:1of3kqt:onmodelcreating",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 28,
          "summary": "Method OnModelCreating is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4pfuxc:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1p3f1im:handleblockreached",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 143,
          "summary": "Method HandleBlockReached is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4qy61n:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 385,
          "summary": "Method SearchLibrarySemanticallyAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4v16me:contains",
      "from": "file:1niza9w:globalintelligencepanel-razor",
      "to": "method:cylg7j:render-component-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 5,
          "summary": "Method Render (component markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "targetFileId": "file:1niza9w:globalintelligencepanel-razor",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4vhkgp:contains",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "class:mi743e:increasehashlength",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "summary": "File contains class IncreaseHashLength.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4viqzw:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:1u9mlsa:ondragenter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 146,
          "summary": "Method OnDragEnter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4vqwxr:defines-type",
      "from": "file:441s21:isyncbroadcaster-cs",
      "to": "type:dqp6wm:isyncbroadcaster",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "line": 7,
          "summary": "Type ISyncBroadcaster is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "targetFileId": "file:441s21:isyncbroadcaster-cs",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:4yis3k:imports",
      "from": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-entity-configuration",
        "data-seeding",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:52hhz5:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "class:rcx5lg:wasmknowledgeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "summary": "File contains class WasmKnowledgeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:54yc68:defines-type",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "type:1rcw5yd:nexusauthenticationstateprovider",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 9,
          "summary": "Type NexusAuthenticationStateProvider is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:55xfki:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "class:11lr4zo:knowledgegraph",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "summary": "File contains class KnowledgeGraph.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:571sz0:contains",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "method:gisz9i:sethydrating",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 30,
          "summary": "Method SetHydrating is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5aozur:contains",
      "from": "file:hc4koi:submitanswercommandhandler-cs",
      "to": "class:andjgd:submitanswercommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "summary": "File contains class SubmitAnswerCommandHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "targetFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5jx0nw:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:ecn87d:onscrolltoblockrequested",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 6,
          "summary": "Method OnScrollToBlockRequested is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5l82wi:defines-type",
      "from": "file:1953stk:focusmodeservice-cs",
      "to": "type:1af3t0x:focusmodeservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 5,
          "summary": "Type FocusModeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:1953stk:focusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5lmkok:imports",
      "from": "file:h6a0xu:knowledgeunit-cs",
      "to": "file:17um7nh:knowledgeunittype-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
          "summary": "File imports dependency NexusReader.Domain/Enums/KnowledgeUnitType.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "label": "imports NexusReader.Domain/Enums/KnowledgeUnitType.cs",
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "targetFileId": "file:17um7nh:knowledgeunittype-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5mlzgq:defines-type",
      "from": "file:hiutf5:wasmepubservice-cs",
      "to": "type:uf4ds6:wasmepubreader",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 8,
          "summary": "Type WasmEpubReader is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5pmkam:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1pp2oro:oninitializedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 71,
          "summary": "Method OnInitializedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5qu4ey:contains",
      "from": "file:p5ean4:error-razor",
      "to": "method:76zo3r:httpcontext-cascadingparameter-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 28,
          "summary": "Method HttpContext (CascadingParameter property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5tul6i:contains",
      "from": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "to": "method:1jqlijy:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 26,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "targetFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:5us77t:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1sn20bf:searchlibrarysemanticallyasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 76,
          "summary": "Method SearchLibrarySemanticallyAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:635mjm:imports",
      "from": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan",
        "semanticknowledgecache",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:63b7xv:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1ip44st:loggeneratinggraph",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 157,
          "summary": "Method LogGeneratingGraph is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:666x0k:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "class:1ybxixo:knowledgeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "File contains class KnowledgeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6a1hl3:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:arton1:logsummarywarning",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 166,
          "summary": "Method LogSummaryWarning is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6eb85:contains",
      "from": "file:qvoxmq:app-razor",
      "to": "method:x1z3b8:hidepreloader",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 26,
          "summary": "Method hidePreloader is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qvoxmq:app-razor",
      "targetFileId": "file:qvoxmq:app-razor",
      "domainTags": [
        "nexusreader"
      ],
      "technologyTags": [
        "spa-shell",
        "preloader-client-bootstrap",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6nb06i:defines-type",
      "from": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "to": "type:8wi1r9:adddescriptiontoebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "line": 8,
          "summary": "Type AddDescriptionToEbook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "targetFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6ogitb:contains",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "method:1ii06co:setactivenode",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 23,
          "summary": "Method SetActiveNode is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6tjdu9:defines-type",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "type:10b7z70:semanticknowledgecache",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 58,
          "summary": "Type SemanticKnowledgeCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6ueuwa:defines-type",
      "from": "file:h6mj95:home-razor",
      "to": "type:1t001js:bookid",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 21,
          "summary": "Type BookId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:6wttt2:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:1070aok:getsecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 14,
          "summary": "Method GetSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:73mdjz:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "class:gqmtg:readerfooter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "summary": "File contains class ReaderFooter.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:76m28i:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1b2nffa:knowledgecoordinator",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 26,
          "summary": "Method KnowledgeCoordinator is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:77wkwv:defines-type",
      "from": "file:1k4g04u:iquery-cs",
      "to": "type:dj3u3k:iquery-tresponse",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs",
          "line": 6,
          "summary": "Type IQuery<TResponse> is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1k4g04u:iquery-cs",
      "targetFileId": "file:1k4g04u:iquery-cs",
      "domainTags": [
        "query",
        "result-t",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediator",
        "result-wrapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:78cnd3:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:5xf7z1:knowledgeunitlink",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 255,
          "summary": "Type KnowledgeUnitLink is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7cqfgs:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:1ekb3x6:registerasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 79,
          "summary": "Method RegisterAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7gzyj8:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1cayj92:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 76,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7iv8q9:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:1r8a5jx:clearcache",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 23,
          "summary": "Method ClearCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7j2n0q:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:1d0xirt:onnavigationchanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 10,
          "summary": "Method OnNavigationChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7kr0o:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:19tpzwe:getstringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 8,
          "summary": "Method GetStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7nuw18:contains",
      "from": "file:47d4sb:synchub-cs",
      "to": "method:1whrhth:onconnectedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 28,
          "summary": "Method OnConnectedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7qhcxn:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:s95smj:savestringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 10,
          "summary": "Method SaveStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7s5wl6:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:17pqj2a:savesecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 73,
          "summary": "Method SaveSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7sz99m:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:27eki7:knowledgeservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "label": "imports NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7t8aps:contains",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "method:1kikefa:isvisible",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 57,
          "summary": "Method IsVisible is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1ez5kuw:selectionaipanel-razor",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7v48jk:contains",
      "from": "file:qt46oq:webplatformservice-cs",
      "to": "method:fmgrt8:getdevicecontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 32,
          "summary": "Method GetDeviceContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:7wj8mz:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:ujsh2c:closemodal",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 128,
          "summary": "Method CloseModal is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:840cjl:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:yzr6ph:getprofileasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 12,
          "summary": "Method GetProfileAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:894po:contains",
      "from": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "to": "method:xctw2t:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "line": 29,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "targetFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8aewyz:defines-type",
      "from": "file:1mo9e25:iepubreader-cs",
      "to": "type:1yqx104:iepubreader",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "line": 9,
          "summary": "Type IEpubReader is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1mo9e25:iepubreader-cs",
      "targetFileId": "file:1mo9e25:iepubreader-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8dbl3a:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:99k8q7:disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 100,
          "summary": "Method DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8fo6ar:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:1iqnx8z:ishydrating",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 9,
          "summary": "Method IsHydrating is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8m9rj4:defines-type",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "type:9todq3:bookstorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 10,
          "summary": "Type BookStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8nds5d:defines-type",
      "from": "file:1c4q2p1:graphviewmodels-cs",
      "to": "type:g75yh:graphdatadto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs",
          "line": 5,
          "summary": "Type GraphDataDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1c4q2p1:graphviewmodels-cs",
      "targetFileId": "file:1c4q2p1:graphviewmodels-cs",
      "domainTags": [
        "graph",
        "node",
        "link",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "viewmodel"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8otx2t:contains",
      "from": "file:13u663i:20260510151022-normalizeauthor-cs",
      "to": "method:wcoxzi:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "line": 53,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "targetFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8x4x1l:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:jkfjp3:getboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 48,
          "summary": "Method GetBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8xbjr1:defines-type",
      "from": "file:1rikffk:viewmodels-cs",
      "to": "type:aqqzdn:contentblock",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
          "line": 7,
          "summary": "Type ContentBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1rikffk:viewmodels-cs",
      "targetFileId": "file:1rikffk:viewmodels-cs",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:8yspy6:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:ulf8of:addauthor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Method AddAuthor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:91xzly:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:mdf15q:ebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 162,
          "summary": "Type Ebook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:92gzn7:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1z06px6:logsummaryerror",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 169,
          "summary": "Method LogSummaryError is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:93e8vb:defines-type",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "type:1sbj28q:syncservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 8,
          "summary": "Type SyncService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:956iib:defines-type",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "type:1iyorzj:aspnetusers",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 29,
          "summary": "Type AspNetUsers is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:98zn6n:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:4o1nar:semanticknowledgecache",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 422,
          "summary": "Type SemanticKnowledgeCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:99h0ks:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9fpxyu:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:vdmrat:currentquizblockid",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 7,
          "summary": "Method CurrentQuizBlockId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9g03lh:defines-type",
      "from": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:1pi9458:knowledgeunitlinks-table",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 172,
          "summary": "Type KnowledgeUnitLinks (table) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "knowledgeunit",
        "tenant",
        "vector-embeddings"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "seed-data"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9k4mw:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:1w5eq5k:semanticknowledgecache-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 447,
          "summary": "Type SemanticKnowledgeCache (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9nvz8b:contains",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "class:k4fx0v:dependencyinjection",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File contains class DependencyInjection.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9qaecc:defines-type",
      "from": "file:12rhzck:program-cs",
      "to": "type:1jb5rcg:askquestionrequest",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 569,
          "summary": "Type AskQuestionRequest is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9ruwcx:contains",
      "from": "file:184ajmn:nexustypography-razor",
      "to": "method:10aseyf:componentrender",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 1,
          "summary": "Method ComponentRender is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "targetFileId": "file:184ajmn:nexustypography-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexustypography"
      ],
      "technologyTags": [
        "blazor-component",
        "presentational-ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9scrm0:contains",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "method:eacfb6:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 19,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9uy2od:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "method:101vezb:findauthorbynameasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 22,
          "summary": "Method FindAuthorByNameAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:9xqprv:contains",
      "from": "file:11crtur:profile-razor",
      "to": "method:z1n8tn:oninitializedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 111,
          "summary": "Method OnInitializedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:a55b4k:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:30kk08:nexusreader-domain-entities-semanticknowledgecac",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 422,
          "summary": "Type NexusReader.Domain.Entities.SemanticKnowledgeCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:a79eod:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:vlhvyc:currentebookid",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 5,
          "summary": "Method CurrentEbookId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:a8k9gu:contains",
      "from": "file:g197tx:storagekeys-cs",
      "to": "class:1mgndci:storagekeys",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Constants/StorageKeys.cs",
          "summary": "File contains class StorageKeys.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:g197tx:storagekeys-cs",
      "targetFileId": "file:g197tx:storagekeys-cs",
      "domainTags": [
        "authentication",
        "user",
        "nexusreader",
        "constants"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ab83n2:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:whfss9:onfocuskeypressed",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 77,
          "summary": "Method OnFocusKeypressed is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:abb4rz:contains",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "method:o6n51:setquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 21,
          "summary": "Method SetQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:acvo4j:contains",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "method:tz9mq3:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:adzcwg:contains",
      "from": "file:1dyqnkg:jsonrepairhelper-cs",
      "to": "method:1diht7t:repair",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "line": 8,
          "summary": "Method Repair is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "targetFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:aftqhz:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:bamm0e:getepubcontentasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 30,
          "summary": "Method GetEpubContentAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:agqt3k:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:6i8lek:getstringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 23,
          "summary": "Method GetStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:agznx3:contains",
      "from": "file:p180ke:mainapplication-cs",
      "to": "method:197aset:createmauiapp",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 20,
          "summary": "Method CreateMauiApp is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "targetFileId": "file:p180ke:mainapplication-cs",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ai2bnv:contains",
      "from": "file:1sm6kjd:routes-razor",
      "to": "method:1bnazn2:render-component-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 1,
          "summary": "Method Render (component markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1sm6kjd:routes-razor",
      "targetFileId": "file:1sm6kjd:routes-razor",
      "domainTags": [
        "nexusreader-ui",
        "routes"
      ],
      "technologyTags": [
        "routing",
        "error-boundary",
        "authorization-gate",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ai7614:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:1d2tbk0:onactivenodechanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 12,
          "summary": "Method OnActiveNodeChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ajhzln:contains",
      "from": "file:1bp3my2:nexusbutton-razor",
      "to": "method:4skxop:render-component-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "line": 1,
          "summary": "Method Render (component markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1bp3my2:nexusbutton-razor",
      "targetFileId": "file:1bp3my2:nexusbutton-razor",
      "domainTags": [
        "nexusreader-ui",
        "atoms",
        "nexusbutton"
      ],
      "technologyTags": [
        "component",
        "eventcallback",
        "attribute-forwarding",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ajnc4s:contains",
      "from": "file:441s21:isyncbroadcaster-cs",
      "to": "method:uqgfbl:broadcastingestionprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "line": 33,
          "summary": "Method BroadcastIngestionProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "targetFileId": "file:441s21:isyncbroadcaster-cs",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ajpsuj:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ak0p08:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "method:tmysty:render-razor-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 5,
          "summary": "Method Render (Razor markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:akweym:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1xjbcak:handleloadingchange",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 71,
          "summary": "Method HandleLoadingChange is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:aptkzk:contains",
      "from": "file:1jnstne:readerinteractionservice-cs",
      "to": "method:1om56u0:requesthighlightblock",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 20,
          "summary": "Method RequestHighlightBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1jnstne:readerinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "ui-interaction-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:arfu2y:contains",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "method:lwiyp5:render-razor-markup",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 5,
          "summary": "Method Render (Razor markup) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:asogfl:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:swctk:getservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 71,
          "summary": "Method GetService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:avkq1l:imports",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports Ebook",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ay3xyl:contains",
      "from": "file:441s21:isyncbroadcaster-cs",
      "to": "class:1kfpdx9:isyncbroadcaster",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "summary": "File contains class ISyncBroadcaster.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "targetFileId": "file:441s21:isyncbroadcaster-cs",
      "domainTags": [
        "real-time-sync",
        "reading-progress",
        "ingestion-progress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-abstraction",
        "pub-sub-broadcast"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ay62b2:contains",
      "from": "file:1953stk:focusmodeservice-cs",
      "to": "method:439s8m:toggleasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 33,
          "summary": "Method ToggleAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:1953stk:focusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bb8wwq:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1muyu85:zoomin",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 96,
          "summary": "Method ZoomIn is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bdshbl:defines-type",
      "from": "file:1wyr0y8:quizresult-cs",
      "to": "type:1j77tf7:quizresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "line": 9,
          "summary": "Type QuizResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bgmglf:contains",
      "from": "file:p180ke:mainapplication-cs",
      "to": "method:1281z7w:mainapplication",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 14,
          "summary": "Method MainApplication is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "targetFileId": "file:p180ke:mainapplication-cs",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bocv7w:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:nguekt:getboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 49,
          "summary": "Method GetBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bp175w:contains",
      "from": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "to": "method:1cxxeft:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "line": 11,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "targetFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "domainTags": [
        "ebook",
        "progress",
        "chapter",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:btbuxh:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "class:1ynrixc:epubreaderservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "summary": "File contains class EpubReaderService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bthe37:defines-type",
      "from": "file:1dbwiwx:program-cs",
      "to": "type:1b5mqrj:throwingembeddinggenerator",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 66,
          "summary": "Type ThrowingEmbeddingGenerator is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bzjnpc:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:n866i0:quizresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 403,
          "summary": "Type QuizResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:bzob7m:contains",
      "from": "file:lcvwj6:ebook-cs",
      "to": "class:1k2zgaa:ebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Ebook.cs",
          "summary": "File contains class Ebook.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "tenancy"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-entityframework-core-mapping-via-dataannotations"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:c52hh9:contains",
      "from": "file:mm1vnb:readerlayout-razor",
      "to": "method:11o3hgs:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 73,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "targetFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:c5s619:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:xrqv0u:quizresult-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 410,
          "summary": "Type QuizResult (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:c6d9q3:imports",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "file:q8opk3:nexusicon-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "label": "imports NexusIcon",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter",
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "ui",
        "switch-based-renderer"
      ],
      "crossesDomain": true,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:c8xtto:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1qikoos:handleupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 264,
          "summary": "Method HandleUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:c9int5:contains",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "class:1v2rkom:appdbcontextmodelsnapshot",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File contains class AppDbContextModelSnapshot.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cbh12c:contains",
      "from": "file:17v8pus:authenticationheaderhandler-cs",
      "to": "class:jvil15:authenticationheaderhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "summary": "File contains class AuthenticationHeaderHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "targetFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cc67ou:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "method:13rxvog:ebookrepository",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 16,
          "summary": "Method EbookRepository is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cdlqec:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:1yhcrn6:getrelevantcontextasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 12,
          "summary": "Method GetRelevantContextAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cidfx5:contains",
      "from": "file:1mo9e25:iepubreader-cs",
      "to": "method:121clyd:getepubcontentasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "line": 18,
          "summary": "Method GetEpubContentAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1mo9e25:iepubreader-cs",
      "targetFileId": "file:1mo9e25:iepubreader-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "epub",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "async-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cin3ck:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:11t39ko:broadcastprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 94,
          "summary": "Method BroadcastProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cqvfrn:contains",
      "from": "file:1h2hpbe:appdbcontextfactory-cs",
      "to": "class:1g09xpu:appdbcontextfactory",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "summary": "File contains class AppDbContextFactory.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "targetFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "domainTags": [
        "database",
        "configuration",
        "migrations",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "factory",
        "design-time-ef-core-dbcontext-factory"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ct4zzs:defines-type",
      "from": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "to": "type:17161bt:searchlibrarysemanticallyquery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 19,
          "summary": "Type SearchLibrarySemanticallyQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cts8a3:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:va46s8:vibrateasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 38,
          "summary": "Method VibrateAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cugol4:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:1wp2z4z:savechangesasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Method SaveChangesAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:cwyvzn:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:ef0iff:saveboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 35,
          "summary": "Method SaveBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:d0bjqk:defines-type",
      "from": "file:1dbwiwx:program-cs",
      "to": "type:ms3ont:throwingsyncbroadcaster",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 94,
          "summary": "Type ThrowingSyncBroadcaster is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:d30as7:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:1trrs3x:author",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 162,
          "summary": "Type Author is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:d50k6a:defines-type",
      "from": "file:ua9rra:mainpage-xaml-cs",
      "to": "type:5wsb01:mainpage",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "line": 3,
          "summary": "Type MainPage is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:ua9rra:mainpage-xaml-cs",
      "targetFileId": "file:ua9rra:mainpage-xaml-cs",
      "domainTags": [
        "ui",
        "page",
        "nexusreader",
        "mainpage-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "xaml-backed-page",
        "mvvm-view-implied",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:d709n0:contains",
      "from": "file:e05hy9:authordto-cs",
      "to": "class:z1d2u7:authordto",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/AuthorDto.cs",
          "summary": "File contains class AuthorDto.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:e05hy9:authordto-cs",
      "targetFileId": "file:e05hy9:authordto-cs",
      "domainTags": [
        "author",
        "user",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "immutable-record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:d7k9nz:contains",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "method:ekp9ov:clear",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 36,
          "summary": "Method Clear is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:de2p8i:contains",
      "from": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "to": "method:16euo54:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "targetFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:dip5fz:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "method:1se6qsi:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 34,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:dlkeqw:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:6bf66s:ondragleave",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 147,
          "summary": "Method OnDragLeave is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:dpjn6k:defines-type",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "type:1yhkunt:aspnetroleclaims-aspnetuserclaims-aspnetuserlogi",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 73,
          "summary": "Type AspNetRoleClaims / AspNetUserClaims / AspNetUserLogins / AspNetUserRoles / AspNetUserTokens is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:e1p4z8:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:e5lupm:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:1to2smv:initializegraphasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 89,
          "summary": "Method InitializeGraphAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:e5p0ps:defines-type",
      "from": "file:q6hq0x:20260429080302-addquizresults-cs",
      "to": "type:1f6rpfs:addquizresults",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 9,
          "summary": "Type AddQuizResults is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "targetFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:eaybqa:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:1pu32eo:hasnewquiz",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 10,
          "summary": "Method HasNewQuiz is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ed0u2r:contains",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "class:1eh84ev:addebookprogressandchapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "summary": "File contains class AddEbookProgressAndChapter.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:er2f7e:contains",
      "from": "file:11crtur:profile-razor",
      "to": "method:12nkjhc:handleupgrade",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 128,
          "summary": "Method HandleUpgrade is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:essff4:contains",
      "from": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "to": "method:pkbr0t:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 51,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "targetFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ewcy2p:defines-type",
      "from": "file:y077jr:getreaderpagequeryhandler-cs",
      "to": "type:4pvcwi:getreaderpagequeryhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 7,
          "summary": "Type GetReaderPageQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "targetFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ewkmy9:calls",
      "from": "method:p5ejmn:onparameterssetasync",
      "to": "method:4o7htd:setbook",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 49,
          "summary": "Method OnParametersSetAsync calls SetBook in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        },
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 58,
          "summary": "Method OnParametersSetAsync calls SetBook in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "label": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:exq3oa:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:v3kul8:addebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Method AddEbook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:f0qlj:imports",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "file:1dyqnkg:jsonrepairhelper-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "label": "imports JsonRepairHelper",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "utility",
        "stack-based-parser"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:f5z7uy:contains",
      "from": "file:1k69za4:semanticsearchresultdto-cs",
      "to": "class:1lzvao4:semanticsearchresultdto",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs",
          "summary": "File contains class SemanticSearchResultDto.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "targetFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "domainTags": [
        "semanticsearch",
        "ai",
        "searchresult",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:f9drkz:defines-type",
      "from": "file:p180ke:mainapplication-cs",
      "to": "type:1143kg0:mainapplication",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 10,
          "summary": "Type MainApplication is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "targetFileId": "file:p180ke:mainapplication-cs",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:falbtl:contains",
      "from": "file:1awldsb:error-razor",
      "to": "method:fu1sr5:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "line": 5,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1awldsb:error-razor",
      "targetFileId": "file:1awldsb:error-razor",
      "domainTags": [
        "nexusreader",
        "error"
      ],
      "technologyTags": [
        "blazor-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fgcsst:defines-type",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "type:18g2en:aspnetroles",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 15,
          "summary": "Type AspNetRoles is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fh661o:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:eni3nx:identity-login-get-identity-login-google",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 453,
          "summary": "Method Identity Login (GET /identity/login/google) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fhh2kq:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:14w07kf:nexusreader-domain-entities-subscriptionplan",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 467,
          "summary": "Type NexusReader.Domain.Entities.SubscriptionPlan is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fjkri0:defines-type",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "type:1a84if1:groundednessresult",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 19,
          "summary": "Type GroundednessResult is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fskvx0:defines-type",
      "from": "file:rfn6bc:ibillingservice-cs",
      "to": "type:dvqqtf:ibillingservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "line": 6,
          "summary": "Type IBillingService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "targetFileId": "file:rfn6bc:ibillingservice-cs",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fso927:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:129w46l:zoomreset",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 98,
          "summary": "Method ZoomReset is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fuxqwk:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 463,
          "summary": "Method Identity Callback (GET /identity/callback/google) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fvq6ww:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:kf6qfg:registerasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 33,
          "summary": "Method RegisterAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fvrbcs:contains",
      "from": "file:q8opk3:nexusicon-razor",
      "to": "class:rzlm6n:nexusicon",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "summary": "File contains class NexusIcon.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q8opk3:nexusicon-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "icon",
        "nexusreader-ui",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "ui-component",
        "switch-based-renderer",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fwkus7:defines-type",
      "from": "file:2eckht:verifygroundednesscommand-cs",
      "to": "type:6i8iop:verifygroundednesscommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 7,
          "summary": "Type VerifyGroundednessCommand is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "targetFileId": "file:2eckht:verifygroundednesscommand-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:fzv5jq:contains",
      "from": "file:1246987:mainactivity-cs",
      "to": "method:t9hn2c:oncreate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "line": 13,
          "summary": "Method OnCreate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1246987:mainactivity-cs",
      "targetFileId": "file:1246987:mainactivity-cs",
      "domainTags": [
        "maui",
        "android-activity",
        "application-startup",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry-android-activity",
        "maui-lifecycle-delegation"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:g2dcio:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "method:46fkcr:disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 246,
          "summary": "Method DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:g4el27:contains",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "class:1xcfdo4:isyncservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "summary": "File contains class ISyncService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ga1w91:contains",
      "from": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "to": "class:1kl84eu:addebooklastchapterindex",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "summary": "File contains class AddEbookLastChapterIndex.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "targetFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ge3bmj:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:s3i4fd:findauthorbynameasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Method FindAuthorByNameAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ge6om1:contains",
      "from": "file:vbuljf:ithemeservice-cs",
      "to": "class:1a23wve:ithemeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "summary": "File contains class IThemeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:gl1wfk:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1l8c2eg:estimatetokencount",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 801,
          "summary": "Method EstimateTokenCount is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:gqhyru:contains",
      "from": "file:i1pwrm:themeservice-cs",
      "to": "method:1fcqnzv:toggletheme",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "line": 8,
          "summary": "Method ToggleTheme is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "targetFileId": "file:i1pwrm:themeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:gvsjom:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1h2dsti:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 266,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:gycdel:contains",
      "from": "file:8kve74:bookingestionmodal-razor",
      "to": "class:twnl84:bookingestionmodal",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "summary": "File contains class BookIngestionModal.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "targetFileId": "file:8kve74:bookingestionmodal-razor",
      "domainTags": [
        "book",
        "epub",
        "metadata",
        "library"
      ],
      "technologyTags": [
        "ui-component",
        "file-upload-handler",
        "client-side-orchestration-of-upload-parse-confirm-server-ingest",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h20kpi:contains",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "class:lhjxtl:ibookstorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "summary": "File contains class IBookStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h43a8h:contains",
      "from": "file:13kvr59:contenthasher-cs",
      "to": "method:pslukv:computehash",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 9,
          "summary": "Method ComputeHash is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "targetFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h4z5zd:defines-type",
      "from": "file:xocicc:updatereadingprogresscommand-cs",
      "to": "type:lwz5af:updatereadingprogresscommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
          "line": 6,
          "summary": "Type UpdateReadingProgressCommand is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "targetFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h6b4vh:defines-type",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "type:14djij0:infrastructuremarker",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 141,
          "summary": "Type InfrastructureMarker is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h71jw3:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:9y8b30:nexusreader-domain-entities-knowledgeunitlink",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 255,
          "summary": "Type NexusReader.Domain.Entities.KnowledgeUnitLink is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:h7olrb:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:1nqcmix:handlehighlightrequested",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 192,
          "summary": "Method HandleHighlightRequested is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hapigj:contains",
      "from": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "to": "method:ppivt7:notifyuserlogout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 112,
          "summary": "Method NotifyUserLogout is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hllgoc:contains",
      "from": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "to": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "summary": "File contains class SignalRSyncBroadcaster.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hlo6y5:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:9ls8js:createaitrigger",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 181,
          "summary": "Method CreateAiTrigger is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hobjqm:contains",
      "from": "file:18yxzxe:authlayout-razor",
      "to": "class:1k4its0:authlayout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
          "summary": "File contains class AuthLayout.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:18yxzxe:authlayout-razor",
      "targetFileId": "file:18yxzxe:authlayout-razor",
      "domainTags": [
        "nexusreader-ui",
        "layout",
        "authlayout"
      ],
      "technologyTags": [
        "layout-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hweotf:contains",
      "from": "file:igeyi7:nexussearchbox-razor",
      "to": "method:j1tqds:handlekeypress",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 27,
          "summary": "Method HandleKeyPress is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "targetFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:hws67o:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1sxv1a4:getrelevantcontextasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 328,
          "summary": "Method GetRelevantContextAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:i3ttgt:defines-type",
      "from": "file:1y56eud:author-cs",
      "to": "type:y9wry3:author",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/Author.cs",
          "line": 5,
          "summary": "Type Author is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1y56eud:author-cs",
      "targetFileId": "file:1y56eud:author-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "entities"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-poco"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:i7tben:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:hhlqtu:microsoft-aspnetcore-identity-identityrole",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 30,
          "summary": "Type Microsoft.AspNetCore.Identity.IdentityRole is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:idsgrb:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:x4i3zt:generateasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 69,
          "summary": "Method GenerateAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:iepg75:contains",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "class:zdhkb2:knowledgegraphservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "summary": "File contains class KnowledgeGraphService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ioyu1c:imports",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "file:13kvr59:contenthasher-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Helpers/ContentHasher.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "label": "imports ContentHasher",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": true,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:isb5rj:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "class:jm4wx0:mauistorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "summary": "File contains class MauiStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ivnef6:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "method:p2mw02:notifytextselected",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 13,
          "summary": "Method NotifyTextSelected is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ivr4kr:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:19ghosy:saveboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 47,
          "summary": "Method SaveBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:j2rax8:contains",
      "from": "file:38gozs:tokenlimithandler-cs",
      "to": "class:dceqku:tokenlimithandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "summary": "File contains class TokenLimitHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "targetFileId": "file:38gozs:tokenlimithandler-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:j3sts2:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:qspmus:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 97,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:j42rma:contains",
      "from": "file:83c16m:aiassistantbubble-razor",
      "to": "method:16cvbhq:onparameterssetasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 56,
          "summary": "Method OnParametersSetAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "targetFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:j6bzcv:defines-type",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "type:14glqwn:selectioncoordinates",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 16,
          "summary": "Type SelectionCoordinates is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jahm9r:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "method:1jbr3bv:removeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 60,
          "summary": "Method RemoveAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jfe4p5:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "class:frxocr:ebookrepository",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "File contains class EbookRepository.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jfhiwh:contains",
      "from": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "class:1gb1hzf:makeknowledgeunitebookidnullable",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "summary": "File contains class MakeKnowledgeUnitEbookIdNullable.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "database-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jfos23:contains",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "method:1nrn8uy:buildmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "line": 17,
          "summary": "Method BuildModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jhw3it:defines-type",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "type:1nt1924:quizquestion",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "line": 10,
          "summary": "Type QuizQuestion is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jie9m8:contains",
      "from": "file:4pj82p:getuserprofilequeryhandler-cs",
      "to": "method:16gxcfa:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 18,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "targetFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jmytvv:contains",
      "from": "file:rfn6bc:ibillingservice-cs",
      "to": "class:qlxnhj:ibillingservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "summary": "File contains class IBillingService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "targetFileId": "file:rfn6bc:ibillingservice-cs",
      "domainTags": [
        "billing",
        "subscription",
        "customer-email",
        "stripeproduct"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jptk4c:contains",
      "from": "file:83c16m:aiassistantbubble-razor",
      "to": "method:1bl306q:onafterrenderasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 69,
          "summary": "Method OnAfterRenderAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "targetFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jqdye4:defines-type",
      "from": "file:gg5jm5:icommand-cs",
      "to": "type:l6ns3r:icommand-tresponse",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
          "line": 10,
          "summary": "Type ICommand<TResponse> is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:gg5jm5:icommand-cs",
      "targetFileId": "file:gg5jm5:icommand-cs",
      "domainTags": [
        "command",
        "nexusreader",
        "abstractions",
        "messaging"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jqj62m:contains",
      "from": "file:h6mj95:home-razor",
      "to": "method:p5ejmn:onparameterssetasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 36,
          "summary": "Method OnParametersSetAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:h6mj95:home-razor",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:jxj3kv:contains",
      "from": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "to": "class:181ukvc:fixknowledgeunitebookid",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "summary": "File contains class FixKnowledgeUnitEbookId.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "targetFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:k0lito:contains",
      "from": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "to": "method:1wohrks:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "line": 19,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "targetFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "identity-aspnetusers-aspnetroles"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "entity-configuration-fluent-api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:k0xc55:contains",
      "from": "file:1uhcs2l:library-razor",
      "to": "method:8gksn2:openbook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 549,
          "summary": "Method OpenBook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "targetFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:k12di0:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "method:vkortc:addebook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 42,
          "summary": "Method AddEbook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:k3kcxz:imports",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "file:1hlb3r7:iebookrepository-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "File imports dependency NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
      "label": "imports IEbookRepository",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kckg33:contains",
      "from": "file:1dyqnkg:jsonrepairhelper-cs",
      "to": "class:ogoid1:jsonrepairhelper",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "summary": "File contains class JsonRepairHelper.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "targetFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "domainTags": [
        "json",
        "truncation-recovery",
        "bracket-quote-balancing",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "stack-based-parser"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kczir6:imports",
      "from": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "quizresult",
        "ebook",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ki08lk:contains",
      "from": "file:47d4sb:synchub-cs",
      "to": "class:154519v:synchub",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "summary": "File contains class SyncHub.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "targetFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kjd8xq:contains",
      "from": "file:38gozs:tokenlimithandler-cs",
      "to": "method:1xc3hml:tokenlimithandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 18,
          "summary": "Method TokenLimitHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "targetFileId": "file:38gozs:tokenlimithandler-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kl3oq7:imports",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kn3qzz:defines-type",
      "from": "file:17um7nh:knowledgeunittype-cs",
      "to": "type:1jmw5xq:knowledgeunittype",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Enums/KnowledgeUnitType.cs",
          "line": 3,
          "summary": "Type KnowledgeUnitType is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:17um7nh:knowledgeunittype-cs",
      "targetFileId": "file:17um7nh:knowledgeunittype-cs",
      "domainTags": [
        "knowledgeunit",
        "section",
        "table",
        "definition"
      ],
      "technologyTags": [
        "dotnet",
        "enum"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ko5wrl:contains",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "class:1t69b7g:quizstateservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "summary": "File contains class QuizStateService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kqqa9:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1pdmx9l:onblockreachedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 106,
          "summary": "Method OnBlockReachedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ksvyms:contains",
      "from": "file:qt46oq:webplatformservice-cs",
      "to": "class:fhmi44:webplatformservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "File contains class WebPlatformService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "devicecontext",
        "devicetype",
        "displayorientation",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "platform-abstraction",
        "adapter-js-interop-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:kw0593:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:1jsmnk6:gotonextchapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 29,
          "summary": "Method GoToNextChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:l0c9y:contains",
      "from": "file:13phiik:billingservice-cs",
      "to": "class:11gdjq4:billingservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "File contains class BillingService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "targetFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:l2ttl0:contains",
      "from": "file:qieb5i:dependencyinjection-cs",
      "to": "method:zf4i3h:addapplication",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "line": 8,
          "summary": "Method AddApplication is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qieb5i:dependencyinjection-cs",
      "targetFileId": "file:qieb5i:dependencyinjection-cs",
      "domainTags": [
        "mapping",
        "mediatr-handler-discovery",
        "nexusreader",
        "dependencyinjection"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "service-registration",
        "composition-root-partial"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lac7ic:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:1wn8qlw:onconfiguring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 13,
          "summary": "Method OnConfiguring is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lafj2x:defines-type",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "type:11t8gjy:appdbcontextmodelsnapshot",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "line": 15,
          "summary": "Type AppDbContextModelSnapshot is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lcazta:defines-type",
      "from": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "to": "type:1obfu5w:addebooklastchapterindex",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "line": 8,
          "summary": "Type AddEbookLastChapterIndex is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "targetFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ldrg1j:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:1c802h4:program-top-level",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 15,
          "summary": "Method Program (top-level) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lo83t1:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:194t8sk:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 66,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lphwbq:defines-type",
      "from": "file:kgb933:icommandhandler-cs",
      "to": "type:l7ofd8:icommandhandler-tcommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
          "line": 6,
          "summary": "Type ICommandHandler<TCommand> is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kgb933:icommandhandler-cs",
      "targetFileId": "file:kgb933:icommandhandler-cs",
      "domainTags": [
        "command",
        "result-operation-outcome",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "command-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lpim5f:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:b6asoe:loginasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 46,
          "summary": "Method LoginAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lpvknn:defines-type",
      "from": "file:kgb933:icommandhandler-cs",
      "to": "type:1a1s3lb:icommandhandler-tcommand-tresponse",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs",
          "line": 11,
          "summary": "Type ICommandHandler<TCommand, TResponse> is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kgb933:icommandhandler-cs",
      "targetFileId": "file:kgb933:icommandhandler-cs",
      "domainTags": [
        "command",
        "result-operation-outcome",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "command-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lrc9cg:imports",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lt2hcq:contains",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "class:1h9lza8:knowledgepacket",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "summary": "File contains class KnowledgePacket.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lwn14l:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "method:1dgp7fr:addauthor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 42,
          "summary": "Method AddAuthor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lxavqp:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lzso66:defines-type",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "type:1f52ore:dependencyinjection",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 29,
          "summary": "Type DependencyInjection is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:lzzxvq:contains",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "method:1cxlt22:saveebookasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 11,
          "summary": "Method SaveEbookAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:m9qs19:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:ty8u23:allquestionsanswered",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 88,
          "summary": "Method AllQuestionsAnswered is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:majzz1:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:1xlrbb1:savecoverasync-stream",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Method SaveCoverAsync (Stream) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mg0ity:contains",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "method:aocpxz:isfocusmodeactive",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 5,
          "summary": "Method IsFocusModeActive is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mi4wtd:defines-type",
      "from": "file:1hn70tz:register-razor",
      "to": "type:gonkkw:registermodel",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 120,
          "summary": "Type RegisterModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1hn70tz:register-razor",
      "targetFileId": "file:1hn70tz:register-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mjvkt0:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:1pi9wuc:loginasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 39,
          "summary": "Method LoginAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mnr4o:defines-type",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "type:1wumbre:initialpostgres",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "line": 16,
          "summary": "Type InitialPostgres is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mrgqt1:defines-type",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "type:bldst0:nexususer",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 287,
          "summary": "Type NexusUser is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:mtncx:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:12jssth:findtitleinnavigation",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 186,
          "summary": "Method FindTitleInNavigation is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:n54dby:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:qjg1lv:handlefocussimulation",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 112,
          "summary": "Method HandleFocusSimulation is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:n69t8r:contains",
      "from": "file:xocicc:updatereadingprogresscommand-cs",
      "to": "class:1onwz:updatereadingprogresscommand",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs",
          "summary": "File contains class UpdateReadingProgressCommand.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "targetFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:n8z271:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:b6ndo3:clearasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 145,
          "summary": "Method ClearAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:nfwt54:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:12odud7:gotopreviouschapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 14,
          "summary": "Method GoToPreviousChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:nhg6m:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:mla8ro:knowledgeunit",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 227,
          "summary": "Type KnowledgeUnit is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:njlh4k:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:fxyqm0:resolvepath",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 124,
          "summary": "Method ResolvePath is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:nmnaug:defines-type",
      "from": "file:43kjze:class1-cs",
      "to": "type:1n37540:class1",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Class1.cs",
          "line": 3,
          "summary": "Type Class1 is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:43kjze:class1-cs",
      "targetFileId": "file:43kjze:class1-cs",
      "domainTags": [
        "nexusreader-infrastructure",
        "class1"
      ],
      "technologyTags": [
        "dotnet"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:no5jtd:contains",
      "from": "file:q6pxzf:knowledgegraphservice-cs",
      "to": "method:b27zpe:updategraph",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 15,
          "summary": "Method UpdateGraph is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "knowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "in-memory-state-holder",
        "event-based-notification-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:np3jqk:contains",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "method:grwwrg:savechangesasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 29,
          "summary": "Method SaveChangesAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:npcueb:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:hj2kxb:saveboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 42,
          "summary": "Method SaveBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ntmvxk:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:9ytc6k:saveebookasync-byte",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Method SaveEbookAsync (byte[]) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:nuc2ju:defines-type",
      "from": "file:hjtala:knowledgepacket-cs",
      "to": "type:1bqutxs:knowledgeunitdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "line": 16,
          "summary": "Type KnowledgeUnitDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "targetFileId": "file:hjtala:knowledgepacket-cs",
      "domainTags": [
        "knowledge",
        "concept",
        "quiz",
        "graph"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o09mmk:contains",
      "from": "file:1b03oou:subscriptionplan-cs",
      "to": "class:1ajhp9e:subscriptionplan",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
          "summary": "File contains class SubscriptionPlan.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1b03oou:subscriptionplan-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "subscriptionplan",
        "pricing",
        "quota-token-limits",
        "billing-stripe-mapping"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "dataannotations-ef-core"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o2d6vz:contains",
      "from": "file:10axm6l:serveridentityservice-cs",
      "to": "method:pcq8ik:refreshtokenasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 106,
          "summary": "Method RefreshTokenAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "targetFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o5bvww:imports",
      "from": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "to": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SemanticKnowledgeCache.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "label": "imports NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "ebook",
        "nexususer",
        "semanticknowledgecache",
        "asp-net-identity-roles-claims-logins-tokens"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-schema-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o5ho5o:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:1wyr0y8:quizresult-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/QuizResult.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/QuizResult.cs",
      "label": "imports NexusReader.Domain/Entities/QuizResult.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o7mvm6:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:q2ghu0:ebook-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 180,
          "summary": "Type Ebook (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o7twlr:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:4dh69s:nativestorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 16,
          "summary": "Method NativeStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o8ccni:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:h6a0xu:knowledgeunit-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnit.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnit.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:h6a0xu:knowledgeunit-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:o8h584:contains",
      "from": "file:83c16m:aiassistantbubble-razor",
      "to": "method:9ujebp:fetchandstreamasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 82,
          "summary": "Method FetchAndStreamAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "targetFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ocgme3:contains",
      "from": "file:pvs6tn:iknowledgeservice-cs",
      "to": "method:1ckhg6n:getknowledgeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 8,
          "summary": "Method GetKnowledgeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "targetFileId": "file:pvs6tn:iknowledgeservice-cs",
      "domainTags": [
        "knowledge",
        "groundedness",
        "semantic-search",
        "qa-answering"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ocslwr:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ohc6qi:contains",
      "from": "file:d17zn6:mauistorageservice-cs",
      "to": "method:rzym3m:getboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 48,
          "summary": "Method GetBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "targetFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:onn0bg:defines-type",
      "from": "file:1qcpa0s:ingestebookrequest-cs",
      "to": "type:1eqmnca:ingestebookrequest",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs",
          "line": 3,
          "summary": "Type IngestEbookRequest is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1qcpa0s:ingestebookrequest-cs",
      "targetFileId": "file:1qcpa0s:ingestebookrequest-cs",
      "domainTags": [
        "ebook",
        "library",
        "ingestion",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "command",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ono4v5:contains",
      "from": "file:1953stk:focusmodeservice-cs",
      "to": "class:oyj9xs:focusmodeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "summary": "File contains class FocusModeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "targetFileId": "file:1953stk:focusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "localstorage-persistence",
        "nexusreader-ui",
        "focusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event-notification"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:op00f8:imports",
      "from": "file:1ez5kuw:selectionaipanel-razor",
      "to": "file:1szg1zb:ireaderinteractionservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IReaderInteractionService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:or4lq9:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:105vz8s:scrolltonodeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 252,
          "summary": "Method ScrollToNodeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:otetea:contains",
      "from": "file:uvydt4:knowledgecoordinator-cs",
      "to": "method:1x9gjeq:processfullpageasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 76,
          "summary": "Method ProcessFullPageAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ov0cos:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:1ro58qu:vibrateerrorasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 25,
          "summary": "Method VibrateErrorAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ovuqw3:imports",
      "from": "file:h6mj95:home-razor",
      "to": "file:savadk:iquizstateservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IQuizStateService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:p10iq6:contains",
      "from": "file:1niza9w:globalintelligencepanel-razor",
      "to": "class:cps3pc:globalintelligencepanel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "summary": "File contains class GlobalIntelligencePanel.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "targetFileId": "file:1niza9w:globalintelligencepanel-razor",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:p29wim:contains",
      "from": "file:i1pwrm:themeservice-cs",
      "to": "class:1ehqpz0:themeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "summary": "File contains class ThemeService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "targetFileId": "file:i1pwrm:themeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "ui-notification",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "observer",
        "simple-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:p3szus:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:p3yucr:contains",
      "from": "file:11crtur:profile-razor",
      "to": "method:1jxczws:handlelogout",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 133,
          "summary": "Method HandleLogout is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:11crtur:profile-razor",
      "targetFileId": "file:11crtur:profile-razor",
      "domainTags": [
        "userprofile",
        "ai-tokens-aitokensused-aitokenlimit",
        "subscription-plan",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component",
        "component-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:p9dycw:contains",
      "from": "file:13phiik:billingservice-cs",
      "to": "method:174nry:handlesubscriptiondeletedasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 86,
          "summary": "Method HandleSubscriptionDeletedAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "targetFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pgtlgs:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports NexusReader.Data/Persistence/AppDbContext.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pjc1sp:contains",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "method:d5t49u:onstateinvalidated",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 8,
          "summary": "Method OnStateInvalidated is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:png227:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:jq1xnu:getknowledgemapasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 27,
          "summary": "Method GetKnowledgeMapAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pqikoe:contains",
      "from": "file:p5ean4:error-razor",
      "to": "method:z2iy0h:showrequestid-computed-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 32,
          "summary": "Method ShowRequestId (computed property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p5ean4:error-razor",
      "targetFileId": "file:p5ean4:error-razor",
      "domainTags": [
        "error",
        "requestid",
        "nexusreader",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "razor-page",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ptke70:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:cfsfui:ebooks-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 23,
          "summary": "Method Ebooks (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pu62ns:contains",
      "from": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "to": "method:1pxp1t3:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "line": 11,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "aitokenlimit",
        "isunlimitedtokens",
        "stripeproductid"
      ],
      "technologyTags": [
        "dotnet",
        "data-migration",
        "seed-data-update"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pvj3b5:contains",
      "from": "file:a32vvn:20260428184727-initialpostgres-cs",
      "to": "method:19ym4q4:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 13,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "targetFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "domainTags": [
        "user",
        "ebook",
        "semanticknowledgecache",
        "identity-roles-claims"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration",
        "identity-asp-net-core-identity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pxi285:defines-type",
      "from": "file:3xx07l:quizstateservice-cs",
      "to": "type:n36vet:quizstateservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 5,
          "summary": "Type QuizStateService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "targetFileId": "file:3xx07l:quizstateservice-cs",
      "domainTags": [
        "quiz",
        "nexusreader-ui",
        "quizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state-service",
        "observer-events-for-pub-sub"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pxwdr7:contains",
      "from": "file:p180ke:mainapplication-cs",
      "to": "class:471u2p:mainapplication",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "summary": "File contains class MainApplication.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "targetFileId": "file:p180ke:mainapplication-cs",
      "domainTags": [
        "mauiapp",
        "android-application-startup",
        "nexusreader",
        "platforms"
      ],
      "technologyTags": [
        "dotnet",
        "platform-entry",
        "factory-override"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pxy82o:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:4o7htd:setbook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 25,
          "summary": "Method SetBook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:pydnqj:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:1bx0ikl:removesecureasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 75,
          "summary": "Method RemoveSecureAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:q2zs46:contains",
      "from": "file:lqr4h8:ingestebookcommandhandler-cs",
      "to": "method:gy7qh:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 23,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "targetFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:q5is72:defines-type",
      "from": "file:1uay25w:mauiprogram-cs",
      "to": "type:1dhxtbx:mauiprogram",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "line": 10,
          "summary": "Type MauiProgram is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1uay25w:mauiprogram-cs",
      "targetFileId": "file:1uay25w:mauiprogram-cs",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qcjhg0:contains",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "method:1sosafx:savecoverasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 22,
          "summary": "Method SaveCoverAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qd4ke2:defines-type",
      "from": "file:qqutlm:planconstants-cs",
      "to": "type:1l8om0z:planconstants",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Constants/PlanConstants.cs",
          "line": 3,
          "summary": "Type PlanConstants is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:qqutlm:planconstants-cs",
      "targetFileId": "file:qqutlm:planconstants-cs",
      "domainTags": [
        "plan",
        "tokenlimit",
        "activitylabel",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "constants-holder"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qepns9:imports",
      "from": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "ebook",
        "author",
        "nexususer",
        "subscriptionplan"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qigtoi:contains",
      "from": "file:1foudu6:readerfooter-razor",
      "to": "method:1ac31ry:handlenavigationchanged",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 39,
          "summary": "Method HandleNavigationChanged is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:1foudu6:readerfooter-razor",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qjvim:defines-type",
      "from": "file:uhcd4x:quizviewmodels-cs",
      "to": "type:1mrj3g3:quizdto",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs",
          "line": 4,
          "summary": "Type QuizDto is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:uhcd4x:quizviewmodels-cs",
      "targetFileId": "file:uhcd4x:quizviewmodels-cs",
      "domainTags": [
        "quiz",
        "quizquestion",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "dto",
        "record"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qm1nix:contains",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "class:1gyz12d:iplatformservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "summary": "File contains class IPlatformService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qm8s7x:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:ex6nhz:appdbcontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 9,
          "summary": "Method AppDbContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qqm4v0:imports",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "file:lcvwj6:ebook-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "label": "imports NexusReader.Domain/Entities/Ebook.cs",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:lcvwj6:ebook-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qrrwme:contains",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "method:1c1pgjw:assembly",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 137,
          "summary": "Method Assembly is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:r7svsj:dependencyinjection-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:quq7yz:contains",
      "from": "file:83c16m:aiassistantbubble-razor",
      "to": "method:1naqltb:handleactionclick",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 146,
          "summary": "Method HandleActionClick is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "targetFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qusupk:defines-type",
      "from": "file:q6hq0x:20260429080302-addquizresults-cs",
      "to": "type:1tv21lf:quizresults-table-schema",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 14,
          "summary": "Type QuizResults (table schema) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "targetFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:qzqffp:contains",
      "from": "file:7ji0h3:mauistorageservice-cs",
      "to": "class:18xcrf7:mauistorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "summary": "File contains class MauiStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "targetFileId": "file:7ji0h3:mauistorageservice-cs",
      "domainTags": [
        "preferences-key-value-settings",
        "securestorage-secure-key-value",
        "operation-result-wrapping-fluentresults",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade",
        "wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:r0j2zx:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:19x6wwx:account-logout-form-get-account-logout-form",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 539,
          "summary": "Method Account Logout Form (GET /account/logout-form) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:r1xtqr:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:85035t:countwords",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 175,
          "summary": "Method CountWords is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:r4y8sn:defines-type",
      "from": "file:1m6x5qy:knowledgeunitlink-cs",
      "to": "type:wq74ui:knowledgeunitlink",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
          "line": 6,
          "summary": "Type KnowledgeUnitLink is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:raerxq:defines-type",
      "from": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "to": "type:1hf0y4h:updatereadingprogresscommandhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 13,
          "summary": "Type UpdateReadingProgressCommandHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "targetFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "domainTags": [
        "user",
        "ebook",
        "readingprogress",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator-irequesthandler",
        "repository-dbcontext-usage"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rbc6nb:contains",
      "from": "file:1ufa6nr:wasmknowledgeservice-cs",
      "to": "method:1k4gp5:wasmknowledgeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 12,
          "summary": "Method WasmKnowledgeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rcz1k8:contains",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "method:1egmvje:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rf5j0s:imports",
      "from": "file:h6a0xu:knowledgeunit-cs",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "knowledgeunitlink",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "ef-core-data-annotations",
        "navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rhegex:contains",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "method:b38ztv:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rhw1o9:calls",
      "from": "method:tmysty:render-razor-markup",
      "to": "method:1dvbk1u:gotonextchapter",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 17,
          "summary": "Method Render (Razor markup) calls GoToNextChapter in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "label": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:rieq3n:contains",
      "from": "file:1b5rrku:dashboard-razor",
      "to": "class:140cn9s:dashboard",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "summary": "File contains class Dashboard.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "targetFileId": "file:1b5rrku:dashboard-razor",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rmzs8p:defines-type",
      "from": "file:ayj9r2:iqueryhandler-cs",
      "to": "type:tpv4sn:iqueryhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "line": 6,
          "summary": "Type IQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:ayj9r2:iqueryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "query",
        "result",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "cqrs-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rqg6vo:defines-type",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "type:14vwagc:ebookrepository",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 12,
          "summary": "Type EbookRepository is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rts14y:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:1xwytsy:getsecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 73,
          "summary": "Method GetSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rtz176:contains",
      "from": "file:1wkle85:reconnectmodal-razor-js",
      "to": "method:15ixuxd:module-init",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 1,
          "summary": "Method <module_init> is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "targetFileId": "file:1wkle85:reconnectmodal-razor-js",
      "domainTags": [
        "reconnect",
        "resume-circuit",
        "visibility-driven-retry",
        "reconnect-modal"
      ],
      "technologyTags": [
        "javascript",
        "retry-pattern",
        "event-driven-ui-handler",
        "visibility-driven-retry-scheduling",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ruah2z:contains",
      "from": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "to": "method:1lw55w9:up",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "line": 11,
          "summary": "Method Up is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "targetFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rvhsk0:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:18nxwdn:savestringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 21,
          "summary": "Method SaveStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rygz5v:contains",
      "from": "file:1dbwiwx:program-cs",
      "to": "method:9hjjot:createdbcontext",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 61,
          "summary": "Method CreateDbContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "targetFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:rzdp2q:contains",
      "from": "file:1uhcs2l:library-razor",
      "to": "method:1ffpsuv:refreshlibrary",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 543,
          "summary": "Method RefreshLibrary is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "targetFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:s26mxj:contains",
      "from": "file:jo64ly:knowledgegraph-razor",
      "to": "method:lvsss7:disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 125,
          "summary": "Method DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "targetFileId": "file:jo64ly:knowledgegraph-razor",
      "domainTags": [
        "graph",
        "node",
        "nexusreader-ui",
        "organisms"
      ],
      "technologyTags": [
        "observer-event-subscription-unsubscription",
        "js-interop-mount-update-unmount",
        "component-lifecycle-oninitialized-onafterrenderasync-disposeasync",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:s2n0zr:contains",
      "from": "file:2eckht:verifygroundednesscommand-cs",
      "to": "class:109ebx2:verifygroundednesscommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "summary": "File contains class VerifyGroundednessCommandHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "targetFileId": "file:2eckht:verifygroundednesscommand-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:s4nplz:contains",
      "from": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "to": "class:1jh8uof:fixknowledgeunitebookid",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "summary": "File contains class FixKnowledgeUnitEbookId.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "targetFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "schema-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:s5ovne:contains",
      "from": "file:q6hq0x:20260429080302-addquizresults-cs",
      "to": "class:3a8sch:addquizresults",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "summary": "File contains class AddQuizResults.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "targetFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:s7qv2z:contains",
      "from": "file:12lov7s:mauiplatformservice-cs",
      "to": "method:twu1zj:vibratesuccessasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 10,
          "summary": "Method VibrateSuccessAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:12lov7s:mauiplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader-infrastructure"
      ],
      "technologyTags": [
        "dotnet",
        "platform-adapter",
        "service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sfjy6:defines-type",
      "from": "file:vjfxh7:getuserprofilequery-cs",
      "to": "type:1u9bw06:getuserprofilequery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
          "line": 7,
          "summary": "Type GetUserProfileQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:vjfxh7:getuserprofilequery-cs",
      "targetFileId": "file:vjfxh7:getuserprofilequery-cs",
      "domainTags": [
        "user",
        "userprofile",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "mediatr-request-message"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sg5tau:defines-type",
      "from": "file:13kvr59:contenthasher-cs",
      "to": "type:7fsbyq:contenthasher",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 7,
          "summary": "Type ContentHasher is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "targetFileId": "file:13kvr59:contenthasher-cs",
      "domainTags": [
        "content-hashing",
        "fingerprinting",
        "canonicalization",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "utility",
        "hashing",
        "normalization"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sgunqd:contains",
      "from": "file:17v8pus:authenticationheaderhandler-cs",
      "to": "method:17fop7p:sendasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 27,
          "summary": "Method SendAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "targetFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sir2jv:contains",
      "from": "file:wgkae9:ireadernavigationservice-cs",
      "to": "method:wxhxya:chaptertitle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 8,
          "summary": "Method ChapterTitle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "reader",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "navigation-service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sj8jwi:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "method:2bqrkc:markquizasseen",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 18,
          "summary": "Method MarkQuizAsSeen is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:skixgv:contains",
      "from": "file:485hwz:localepubmetadata-cs",
      "to": "class:1vvya1l:localepubmetadata",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
          "summary": "File contains class LocalEpubMetadata.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:485hwz:localepubmetadata-cs",
      "targetFileId": "file:485hwz:localepubmetadata-cs",
      "domainTags": [
        "epub",
        "book",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:snchk9:defines-type",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "type:12mtiix:knowledgeunitlink-model-configured",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 280,
          "summary": "Type KnowledgeUnitLink (model configured) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sp9yld:contains",
      "from": "file:1hlb3r7:iebookrepository-cs",
      "to": "method:2iyuvn:addauthor",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 19,
          "summary": "Method AddAuthor is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sttn65:defines-type",
      "from": "file:dskay:submitanswercommand-cs",
      "to": "type:dvy3sa:submitanswercommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
          "line": 5,
          "summary": "Type SubmitAnswerCommand is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:dskay:submitanswercommand-cs",
      "targetFileId": "file:dskay:submitanswercommand-cs",
      "domainTags": [
        "quiz",
        "answer-submission",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sucixd:defines-type",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "type:52venu:adddescriptiontoebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "line": 17,
          "summary": "Type AddDescriptionToEbook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:sv137z:contains",
      "from": "file:vbuljf:ithemeservice-cs",
      "to": "method:dw3sqb:toggletheme",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 7,
          "summary": "Method ToggleTheme is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:swfa5c:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:1gw1s7x:removeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 63,
          "summary": "Method RemoveAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:t2h5qd:contains",
      "from": "file:dskay:submitanswercommand-cs",
      "to": "class:cmiilf:submitanswercommand",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
          "summary": "File contains class SubmitAnswerCommand.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:dskay:submitanswercommand-cs",
      "targetFileId": "file:dskay:submitanswercommand-cs",
      "domainTags": [
        "quiz",
        "answer-submission",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:t3137c:defines-type",
      "from": "file:gg5jm5:icommand-cs",
      "to": "type:3fxux:icommand",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs",
          "line": 6,
          "summary": "Type ICommand is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:gg5jm5:icommand-cs",
      "targetFileId": "file:gg5jm5:icommand-cs",
      "domainTags": [
        "command",
        "nexusreader",
        "abstractions",
        "messaging"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs",
        "command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:t511kn:imports",
      "from": "file:1b5rrku:dashboard-razor",
      "to": "file:q8opk3:nexusicon-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "label": "imports NexusIcon",
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "targetFileId": "file:q8opk3:nexusicon-razor",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages",
        "icon",
        "atoms",
        "nexusicon"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui",
        "ui-component",
        "switch-based-renderer"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:t8pvlm:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:ggo2op:ingestebook-post-api-library-ingest",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 330,
          "summary": "Method IngestEbook (POST /api/library/ingest) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:t9nqon:contains",
      "from": "file:q6hq0x:20260429080302-addquizresults-cs",
      "to": "method:1sgd810:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 43,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "targetFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "domainTags": [
        "quizresult",
        "user-aspnetusers",
        "nexusreader",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tae551:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:4eprgx:knowledgeservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 38,
          "summary": "Method KnowledgeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tgwa45:contains",
      "from": "file:83c16m:aiassistantbubble-razor",
      "to": "method:1p3ftme:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 159,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "targetFileId": "file:83c16m:aiassistantbubble-razor",
      "domainTags": [
        "ai-assistant-summary-quiz",
        "knowledgepacket",
        "contextblockid-content-block",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component-lifecycle-onparameterssetasync-onafterrenderasync",
        "streaming-ui-word-by-word-reveal",
        "cancellationtokensource-cancellation-pattern",
        "fallback-on-missing-data",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tm1k0g:defines-type",
      "from": "file:q380me:relevantcontext-cs",
      "to": "type:hegy2r:relevantcontext",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs",
          "line": 3,
          "summary": "Type RelevantContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:q380me:relevantcontext-cs",
      "targetFileId": "file:q380me:relevantcontext-cs",
      "domainTags": [
        "relevantcontext",
        "ai-context",
        "nexusreader",
        "dtos"
      ],
      "technologyTags": [
        "dotnet",
        "data-transfer-object-dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:togz65:contains",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "method:e4n4cn:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tpwj9q:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1wyr0y8:quizresult-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/QuizResult.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/QuizResult.cs",
      "label": "imports NexusReader.Domain/Entities/QuizResult.cs",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:trqz1t:defines-type",
      "from": "file:485hwz:localepubmetadata-cs",
      "to": "type:1b16u65:localepubmetadata",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs",
          "line": 6,
          "summary": "Type LocalEpubMetadata is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:485hwz:localepubmetadata-cs",
      "targetFileId": "file:485hwz:localepubmetadata-cs",
      "domainTags": [
        "epub",
        "book",
        "metadata",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "dto"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ttoad7:imports",
      "from": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "to": "file:xcxh5w:nexususer-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "label": "imports NexusReader.Domain/Entities/NexusUser.cs",
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "targetFileId": "file:xcxh5w:nexususer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "model-snapshot",
        "code-first-db-schema"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tx87ph:contains",
      "from": "file:62lucr:app-xaml-cs",
      "to": "class:a8yza:app",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "summary": "File contains class App.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:62lucr:app-xaml-cs",
      "targetFileId": "file:62lucr:app-xaml-cs",
      "domainTags": [
        "ui",
        "application-startup",
        "nexusreader",
        "app-xaml"
      ],
      "technologyTags": [
        "dotnet",
        "maui-app-root-application"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:tzb0gh:contains",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "method:w8lt4l:quizresults-dbset-property",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 24,
          "summary": "Method QuizResults (DbSet property) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:u0koyi:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:14qnurl:bookstorageservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "label": "imports NexusReader.Infrastructure/Services/BookStorageService.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:u2stst:defines-type",
      "from": "file:1rikffk:viewmodels-cs",
      "to": "type:1jbz88m:aiactiontriggerblock",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
          "line": 9,
          "summary": "Type AiActionTriggerBlock is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1rikffk:viewmodels-cs",
      "targetFileId": "file:1rikffk:viewmodels-cs",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:u8d4ry:contains",
      "from": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "to": "method:10r2ds4:down",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "line": 22,
          "summary": "Method Down is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "targetFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "migrations",
        "20260510171941-addebooklastchapterindex"
      ],
      "technologyTags": [
        "dotnet",
        "migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:u9qf88:defines-type",
      "from": "file:1rikffk:viewmodels-cs",
      "to": "type:6l0ozw:readerpageviewmodel",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/ViewModels.cs",
          "line": 11,
          "summary": "Type ReaderPageViewModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1rikffk:viewmodels-cs",
      "targetFileId": "file:1rikffk:viewmodels-cs",
      "domainTags": [
        "contentblock",
        "textsegment",
        "aiactiontrigger",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "viewmodel",
        "polymorphic-dto",
        "json-discriminated-union-jsonderivedtype"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uail6a:imports",
      "from": "file:136c3oe:dbinitializer-cs",
      "to": "file:1b03oou:subscriptionplan-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "label": "imports NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "targetFileId": "file:1b03oou:subscriptionplan-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uarw0g:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:1k49ns3:removesecureasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 80,
          "summary": "Method RemoveSecureAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ud52uu:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "method:1oqk0x0:iasyncdisposable-disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 112,
          "summary": "Method IAsyncDisposable.DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:udx9z1:contains",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "method:1op2ws5:updateprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 8,
          "summary": "Method UpdateProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uil6st:contains",
      "from": "file:savadk:iquizstateservice-cs",
      "to": "class:36xxdc:iquizstateservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "summary": "File contains class IQuizStateService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "targetFileId": "file:savadk:iquizstateservice-cs",
      "domainTags": [
        "quiz",
        "quizblock",
        "nexusreader-ui",
        "iquizstateservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-service",
        "publish-subscribe-events"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ul0lwa:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:xfwbbe:removesecureasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 15,
          "summary": "Method RemoveSecureAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uouoqn:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:1olwlbd:getsecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 78,
          "summary": "Method GetSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ur1zel:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:io0xiq:askquestionasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 549,
          "summary": "Method AskQuestionAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ut8ylk:defines-type",
      "from": "file:wb18l0:iplatformservice-cs",
      "to": "type:flcquz:devicecontext",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 13,
          "summary": "Type DeviceContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "vibration",
        "displayorientation",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "abstraction-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uu2a30:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:13day2p:nexusreader-domain-entities-knowledgeunit",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 209,
          "summary": "Type NexusReader.Domain.Entities.KnowledgeUnit is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uvg4in:defines-type",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "type:5hfl1o:nativestorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 12,
          "summary": "Type NativeStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uz7se2:contains",
      "from": "file:3sb16d:readercanvas-razor",
      "to": "method:etczkb:onparameterssetasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 83,
          "summary": "Method OnParametersSetAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "targetFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:uzmzbi:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "method:oj5ghm:handleupdate",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 70,
          "summary": "Method HandleUpdate is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:v4a9d:contains",
      "from": "file:1uvdam9:currentreadingwidget-razor",
      "to": "class:1tn889i:currentreadingwidget",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "summary": "File contains class CurrentReadingWidget.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vdw33q:defines-type",
      "from": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "to": "type:brf48c:subscriptionplan",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 485,
          "summary": "Type SubscriptionPlan is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "targetFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "domainTags": [
        "author",
        "ebook",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vevwaz:contains",
      "from": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "to": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "File contains class SearchLibrarySemanticallyQueryHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "targetFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:virzv8:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:veacg9:getmyebooks-get-api-library-books",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 355,
          "summary": "Method GetMyEbooks (GET /api/library/books) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vp9t95:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:10r1sy2:clearcacheasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 785,
          "summary": "Method ClearCacheAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vqux7r:defines-type",
      "from": "file:9lh011:getreaderpagequery-cs",
      "to": "type:a2sfsr:getreaderpagequery",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
          "line": 11,
          "summary": "Type GetReaderPageQuery is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:9lh011:getreaderpagequery-cs",
      "targetFileId": "file:9lh011:getreaderpagequery-cs",
      "domainTags": [
        "ebook",
        "reader",
        "chapter",
        "tenant-user"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vs3x8s:contains",
      "from": "file:yno7se:knowledgecheck-razor",
      "to": "method:cgrv35:selectoptionasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 68,
          "summary": "Method SelectOptionAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "targetFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vtb511:imports",
      "from": "file:1b5rrku:dashboard-razor",
      "to": "file:1uvdam9:currentreadingwidget-razor",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
      "label": "imports CurrentReadingWidget",
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "targetFileId": "file:1uvdam9:currentreadingwidget-razor",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages",
        "book",
        "library",
        "reader",
        "chapter"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui",
        "ui-component"
      ],
      "crossesDomain": true,
      "crossesBoundary": true,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vu59hg:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "method:ly29k7:savesecurestring",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 71,
          "summary": "Method SaveSecureString is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vv7y5q:contains",
      "from": "file:1uhcs2l:library-razor",
      "to": "class:g9nkgg:library",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "summary": "File contains class Library.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uhcs2l:library-razor",
      "targetFileId": "file:1uhcs2l:library-razor",
      "domainTags": [
        "book",
        "library",
        "reading-progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-component-ui-lifecycle-markup",
        "client-side-api-fetch-with-try-catch-fallback",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vvkwl3:contains",
      "from": "file:csf9l7:login-razor",
      "to": "method:5hqhux:togglepassword",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 155,
          "summary": "Method TogglePassword is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:csf9l7:login-razor",
      "targetFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:vz3bd8:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink",
        "nexususer",
        "semanticknowledgecache"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:w31l5j:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "class:1owrs1t:inativestorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "summary": "File contains class INativeStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:w8o8rw:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "method:171cr2c:syncservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 20,
          "summary": "Method SyncService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wbtsa5:contains",
      "from": "file:b8uv8h:identityservice-cs",
      "to": "method:nb75z9:refreshtokenasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 202,
          "summary": "Method RefreshTokenAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "targetFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wfv21k:calls",
      "from": "method:1bkauax:generatefullquiz",
      "to": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 91,
          "summary": "Method GenerateFullQuiz calls RequestSummaryAndQuizAsync in NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "label": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "targetFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledgepacket",
        "selectioncoordinates",
        "ai-assistant-summary-quiz",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "component",
        "service-injection",
        "event-bound-handlers",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:wggdui:contains",
      "from": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "to": "method:11mh753:handle",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "line": 8,
          "summary": "Method Handle is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "targetFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "domainTags": [
        "initializationstatus",
        "application-startup",
        "nexusreader",
        "queries"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-query-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wgp3jh:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:8lkc9b:saveboolasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 9,
          "summary": "Method SaveBoolAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wgt200:contains",
      "from": "file:d3gg9l:epubmetadataextractor-cs",
      "to": "method:1vt6hc7:extractmetadataasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "line": 15,
          "summary": "Method ExtractMetadataAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "targetFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "domainTags": [
        "epub",
        "metadata",
        "cover-image",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "extractor",
        "adapter-library-wrapper"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:whtbqg:defines-type",
      "from": "file:1ud0jop:iidentityservice-cs",
      "to": "type:udpmrx:iidentityservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 6,
          "summary": "Type IIdentityService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "targetFileId": "file:1ud0jop:iidentityservice-cs",
      "domainTags": [
        "identity",
        "authentication",
        "userprofile",
        "session-token-management"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wme3te:contains",
      "from": "file:14qnurl:bookstorageservice-cs",
      "to": "method:1iw78py:saveebookasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 19,
          "summary": "Method SaveEbookAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:14qnurl:bookstorageservice-cs",
      "domainTags": [
        "book",
        "ebook",
        "cover",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wn2pkl:contains",
      "from": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "to": "method:1s8oq59:broadcastingestionprogressasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 49,
          "summary": "Method BroadcastIngestionProgressAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "targetFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:woqxcs:contains",
      "from": "file:1tk8lz4:ingestebookcommand-cs",
      "to": "class:byhisx:ingestebookcommand",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs",
          "summary": "File contains class IngestEbookCommand.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "targetFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "domainTags": [
        "ebook",
        "library",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-command"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wpp9hk:contains",
      "from": "file:veuxa3:ebookrepository-cs",
      "to": "method:xqcyw0:savechangesasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 50,
          "summary": "Method SaveChangesAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:veuxa3:ebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "dotnet",
        "repository"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wqcipp:contains",
      "from": "file:902xey:nativestorageservice-cs",
      "to": "method:wsqlg8:getstringasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 34,
          "summary": "Method GetStringAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wtxmyq:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:13xh0j3:handlesubscriptionsuccess",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 410,
          "summary": "Method HandleSubscriptionSuccess is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:wzcw20:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "method:1nyg1j6:dispose",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 72,
          "summary": "Method Dispose is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:x37737:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:ecwzho:setbook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 65,
          "summary": "Method SetBook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:x9acb:defines-type",
      "from": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "to": "type:swoy5w:addebookreadyflag",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "line": 8,
          "summary": "Type AddEbookReadyFlag is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "targetFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "domainTags": [
        "ebook",
        "nexusreader",
        "persistence",
        "migrations"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xb6lcp:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:cho50r:activenodeid",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 8,
          "summary": "Method ActiveNodeId is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xcsdbe:contains",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "method:1ef8df:oninitialized",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 48,
          "summary": "Method OnInitialized is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:q33ld0:intelligencetoolbar-razor",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xd8ii:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:1rb8gnn:map-identity-api-mapgroup-identity",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 451,
          "summary": "Method Map Identity API (MapGroup /identity) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xhc7xb:defines-type",
      "from": "file:1d4ycw2:semanticknowledgecache-cs",
      "to": "type:1gdonul:semanticknowledgecache",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
          "line": 7,
          "summary": "Type SemanticKnowledgeCache is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "targetFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "domainTags": [
        "semanticknowledgecache",
        "embedding",
        "modelid",
        "promptversion"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "orm-mapped-model-ef-core-style-with-data-annotations",
        "embedding-cache"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xhmhsg:contains",
      "from": "file:15km3l4:webstorageservice-cs",
      "to": "class:1uirugg:webstorageservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "summary": "File contains class WebStorageService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "targetFileId": "file:15km3l4:webstorageservice-cs",
      "domainTags": [
        "localstorage",
        "key-value-persistence",
        "platform-native-storage-abstraction",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "wrapper",
        "localstorage-adapter"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xhtrow:imports",
      "from": "file:r7svsj:dependencyinjection-cs",
      "to": "file:q4k94a:epubreaderservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "File imports dependency NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "label": "imports NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "ai-chat-embeddings",
        "persistence-postgres-sqlite",
        "background-jobs-hangfire"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection",
        "repository",
        "marker-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xir0e:defines-type",
      "from": "file:vbuljf:ithemeservice-cs",
      "to": "type:5dm37d:ithemeservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 3,
          "summary": "Type IThemeService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "targetFileId": "file:vbuljf:ithemeservice-cs",
      "domainTags": [
        "theme",
        "light-dark-mode",
        "nexusreader-ui",
        "ithemeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xrg2vr:imports",
      "from": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "to": "file:1m6x5qy:knowledgeunitlink-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "summary": "File imports dependency NexusReader.Domain/Entities/KnowledgeUnitLink.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "label": "imports NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "model-snapshot-fluent-mapping",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xv02nm:contains",
      "from": "file:q4k94a:epubreaderservice-cs",
      "to": "method:1tcm0y0:extractparagraphs",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 145,
          "summary": "Method ExtractParagraphs is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "targetFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xvd7z4:contains",
      "from": "file:lqr4h8:ingestebookcommandhandler-cs",
      "to": "class:1kfw737:ingestebookcommandhandler",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "summary": "File contains class IngestEbookCommandHandler.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "targetFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:xvhtp6:contains",
      "from": "file:1wyr0y8:quizresult-cs",
      "to": "method:160zwvx:ctor-implicit",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "line": 9,
          "summary": "Method .ctor (implicit) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "targetFileId": "file:1wyr0y8:quizresult-cs",
      "domainTags": [
        "quizresult",
        "user",
        "tenant",
        "quiz-assessment"
      ],
      "technologyTags": [
        "dotnet",
        "entity"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:y3hhby:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:72bnlj:handlesubscriptioncancellation",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 434,
          "summary": "Method HandleSubscriptionCancellation is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:y3stqj:contains",
      "from": "file:27eki7:knowledgeservice-cs",
      "to": "method:1lrpkzo:getknowledgeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 61,
          "summary": "Method GetKnowledgeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:y5zkbx:defines-type",
      "from": "file:1pacvtg:appdbcontext-cs",
      "to": "type:c5amk9:appdbcontext",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 7,
          "summary": "Type AppDbContext is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-dbcontext",
        "fluent-api-model-configuration",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:y7cct2:defines-type",
      "from": "file:9fivst:ibookstorageservice-cs",
      "to": "type:gqvtnh:ibookstorageservice",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 6,
          "summary": "Type IBookStorageService is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "ebook",
        "cover",
        "storage",
        "file-path-url"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:y93kob:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 367,
          "summary": "Method StripeWebhook (POST /api/StripeWebhook) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:yp5qcb:calls",
      "from": "method:tmysty:render-razor-markup",
      "to": "method:12odud7:gotopreviouschapter",
      "kind": "calls",
      "status": "resolved",
      "confidence": 0.92,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 8,
          "summary": "Method Render (Razor markup) calls GoToPreviousChapter in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "label": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "targetFileId": "file:wgkae9:ireadernavigationservice-cs",
      "domainTags": [
        "chapter",
        "navigation",
        "progress",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription",
        "ui-component",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "method-call",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "edge:yxqg3t:contains",
      "from": "file:1m6x5qy:knowledgeunitlink-cs",
      "to": "class:mqaz6:knowledgeunitlink",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs",
          "summary": "File contains class KnowledgeUnitLink.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "targetFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "relationtype",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "entity",
        "efcore-annotations",
        "foreignkey-navigation-properties"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:yy9b6m:contains",
      "from": "file:1uay25w:mauiprogram-cs",
      "to": "class:1e8p0hy:mauiprogram",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "summary": "File contains class MauiProgram.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1uay25w:mauiprogram-cs",
      "targetFileId": "file:1uay25w:mauiprogram-cs",
      "domainTags": [
        "identity",
        "sync",
        "theme",
        "knowledgegraph"
      ],
      "technologyTags": [
        "dotnet",
        "service-registration",
        "dependency-injection",
        "application-bootstrap"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:yyiwsx:defines-type",
      "from": "file:xxwh7p:asklibraryquestionquery-cs",
      "to": "type:s4lsqg:asklibraryquestionqueryhandler",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 14,
          "summary": "Type AskLibraryQuestionQueryHandler is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "targetFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "domainTags": [
        "library-question",
        "knowledgeservice",
        "groundedresponse",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:yymwm3:imports",
      "from": "file:h6mj95:home-razor",
      "to": "file:xs3ks1:ifocusmodeservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "sourceFileId": "file:h6mj95:home-razor",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "book",
        "reader",
        "quiz",
        "focusmode"
      ],
      "technologyTags": [
        "event-driven-ui-subscribe-unsubscribe",
        "js-interop-with-dotnetobjectreference",
        "navigation-state-orchestration-navservice-setbook",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:z46iqe:contains",
      "from": "file:1it42kj:inativestorageservice-cs",
      "to": "method:ne3mm3:removeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 11,
          "summary": "Method RemoveAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "key-value-storage",
        "secure-storage",
        "settings-credentials",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:z7qwf0:imports",
      "from": "file:q33ld0:intelligencetoolbar-razor",
      "to": "file:xs3ks1:ifocusmodeservice-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "summary": "File imports dependency NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "label": "imports NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "knowledge-ai-cache",
        "identity-logout",
        "navigation"
      ],
      "technologyTags": [
        "event-subscription",
        "dependency-injection",
        "ui-component-blazor",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:z8rzrc:contains",
      "from": "file:12rhzck:program-cs",
      "to": "method:1uibcuk:program-top-level",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 29,
          "summary": "Method Program (top-level) is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:12rhzck:program-cs",
      "targetFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zaalft:contains",
      "from": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "to": "method:145q8gt:buildtargetmodel",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 20,
          "summary": "Method BuildTargetModel is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "targetFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "domainTags": [
        "ebook",
        "author",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migrations",
        "orm-model-builder",
        "data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zfdkyj:contains",
      "from": "file:l3weg3:isyncservice-cs",
      "to": "method:163m6av:disposeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 10,
          "summary": "Method DisposeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "targetFileId": "file:l3weg3:isyncservice-cs",
      "domainTags": [
        "sync",
        "progress",
        "ebook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "service-interface",
        "event-observer"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zg37qg:defines-type",
      "from": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "to": "type:7ob3p3:nexusreader-domain-entities-ebook",
      "kind": "defines-type",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 162,
          "summary": "Type NexusReader.Domain.Entities.Ebook is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "defines",
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "targetFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "data-seeding",
        "entity-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "type-definition",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zggxwu:contains",
      "from": "file:1la6lrw:syncservice-cs",
      "to": "method:r2rlv7:initializeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 32,
          "summary": "Method InitializeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "targetFileId": "file:1la6lrw:syncservice-cs",
      "domainTags": [
        "readingprogress",
        "ebook",
        "page",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "dotnet",
        "debounce-trailing-edge",
        "signalr-hub-client",
        "event-forwarding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zhw7xm:contains",
      "from": "file:1hn70tz:register-razor",
      "to": "method:mj67eu:handleregister",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 84,
          "summary": "Method HandleRegister is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1hn70tz:register-razor",
      "targetFileId": "file:1hn70tz:register-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zjaks4:contains",
      "from": "file:1szg1zb:ireaderinteractionservice-cs",
      "to": "class:w9vxji:ireaderinteractionservice",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "summary": "File contains class IReaderInteractionService.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "node",
        "block",
        "text-selection",
        "selectioncoordinates"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-driven",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zq7aae:imports",
      "from": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "to": "file:1pacvtg:appdbcontext-cs",
      "kind": "imports",
      "status": "resolved",
      "confidence": 0.95,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "summary": "File imports dependency NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ],
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "label": "imports AppDbContext",
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "targetFileId": "file:1pacvtg:appdbcontext-cs",
      "domainTags": [
        "knowledgeunit",
        "ebook",
        "subscriptionplan",
        "nexususer",
        "semanticknowledgecache",
        "knowledgeunitlink"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration",
        "fluent-api-model-configuration",
        "data-seeding",
        "ef-dbcontext",
        "provider-specific-configuration",
        "deterministic-data-seeding"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-dependency",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zqxmgv:contains",
      "from": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "to": "class:1jcp5tl:updatesubscriptionplanisunlimitedtokens",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "summary": "File contains class UpdateSubscriptionPlanIsUnlimitedTokens.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "targetFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "knowledgeunit",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "entity-framework-core-migration",
        "ef-core-model-snapshot-fluent-api-configuration"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:ztbrip:contains",
      "from": "file:xs3ks1:ifocusmodeservice-cs",
      "to": "method:fpl7t6:initializeasync",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 7,
          "summary": "Method InitializeAsync is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "targetFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "domainTags": [
        "focusmode",
        "nexusreader-ui",
        "ifocusmodeservice"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "observer-event"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zxpv3w:contains",
      "from": "file:1x9xhbs:iknowledgegraphservice-cs",
      "to": "method:x4s1g:setloading",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 17,
          "summary": "Method SetLoading is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "edge:zz8ea6:contains",
      "from": "file:1aunxq2:readernavigationservice-cs",
      "to": "method:l29i6z:gotochapter",
      "kind": "contains",
      "status": "grounded",
      "confidence": 0.99,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 21,
          "summary": "Method GoToChapter is defined in this file.",
          "kind": "file-summary"
        }
      ],
      "label": "contains",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "targetFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "containment",
      "allowedInRuntimeFlow": false
    },
    {
      "id": "eky1ro",
      "from": "method:x4s1g:setloading",
      "to": "event:1qjyz5n:implementation-should-trigger-onloadingchanged-w",
      "kind": "publishes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 17,
          "summary": "event-publish: Implementation should trigger OnLoadingChanged with the new boolean value.",
          "kind": "interaction"
        }
      ],
      "label": "publishes publish Implementation should trigger OnLoadingChanged with the new boolean value.",
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "knowledgegraph",
        "graph-node",
        "nexusreader-ui",
        "iknowledgegraphservice"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event",
        "service-interface",
        "event"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "fs6s7p",
      "from": "class:1lgm7qp:getreaderpagequeryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "summary": "GetReaderPageQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "chapter",
        "ebook",
        "nexusreader",
        "query",
        "reader",
        "readerpage",
        "result"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dependency-injection-constructor-injection",
        "dotnet",
        "mediator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "fzgdq4",
      "from": "method:mj67eu:handleregister",
      "to": "store:1lgwsa9:errormessage-regresult-errors-firstordefault-mes",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 107,
          "summary": "persistence-read: _errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
          "kind": "interaction"
        }
      ],
      "label": "reads _errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "sourceFileId": "file:1hn70tz:register-razor",
      "domainTags": [
        "user-identity",
        "registration",
        "login",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "form-handling",
        "client-side-auth-orchestration",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "g0e3bh",
      "from": "method:1gw1s7x:removeasync",
      "to": "external:p4awid:await-jsruntime-invokevoidasync-localstorage-rem",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 67,
          "summary": "external-call: await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
          "kind": "interaction"
        }
      ],
      "label": "requests await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "gdns66",
      "from": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "to": "external:1shw6gi:pipelineprovider-getpipeline-ai-retry-used-to-se",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 37,
          "summary": "external-call: pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
          "kind": "interaction"
        }
      ],
      "label": "requests pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ghj0l4",
      "from": "method:1ca58m3:getrelevantcontextasync",
      "to": "external:a9gr7v:sends-payload-query-tenantid-via-httpclient-post",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 41,
          "summary": "external-call: Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ],
      "label": "requests Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "glaiq",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:1u7bhjr:match-new-qdrant-client-grpc-match-text-tenantid",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 342,
          "summary": "external-call: Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
          "kind": "interaction"
        }
      ],
      "label": "requests Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "gu09bu",
      "from": "method:n19kbi:seedasync",
      "to": "store:1ljoi91:dbcontext-authors-add-author",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 87,
          "summary": "persistence-write: dbContext.Authors.Add(author);",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.Authors.Add(author);",
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "domainTags": [
        "subscriptionplan",
        "role",
        "user-nexususer",
        "author",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "seeder",
        "data-seeding",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "h1dg6l",
      "from": "method:pkbr0t:down",
      "to": "external:1arxp8d:migrationbuilder-altercolumn-datetime-name-lastr",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 71,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "h6xb9h",
      "from": "method:yy3thw:searchlibrarysemanticallyasync",
      "to": "store:14gpj8y:where-e-ebookids-contains-e-id",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 489,
          "summary": "persistence-read: .Where(e => ebookIds.Contains(e.Id))",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(e => ebookIds.Contains(e.Id))",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "h7kat8",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:hwdhs5:calls-qdrantclient-searchasync-and-converts-to-l",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 357,
          "summary": "external-call: calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
          "kind": "interaction"
        }
      ],
      "label": "requests calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "h87gje",
      "from": "method:e8akyb:handle",
      "to": "method:1lfokb3:vibrateasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "line": 20,
          "summary": "external-call: _platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
          "kind": "interaction"
        }
      ],
      "label": "requests _platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "targetFileId": "file:qt46oq:webplatformservice-cs",
      "domainTags": [
        "quiz",
        "answer",
        "nexusreader",
        "commands"
      ],
      "technologyTags": [
        "dotnet",
        "command-handler",
        "mediator-style-handler"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "hea8el",
      "from": "method:1bus1hn:handle",
      "to": "external:188dx43:embeddinggenerator-generateasync-called-with-req",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 50,
          "summary": "external-call: _embeddingGenerator.GenerateAsync called with request.QueryText",
          "kind": "interaction"
        }
      ],
      "label": "requests _embeddingGenerator.GenerateAsync called with request.QueryText",
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "domainTags": [
        "semanticknowledgecache-tenant-scoped-cached-embeddings",
        "embedding-float-vector",
        "semanticsearchresultdto-result-dto",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "resilience-retry-resiliencepipeline",
        "vector-similarity-semantic-search",
        "repository-dbcontext-read"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "hjd1s7",
      "from": "method:bamm0e:getepubcontentasync",
      "to": "external:f0ptei:chapterref-readcontentastextasync-external-epub-",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 81,
          "summary": "external-call: chapterRef.ReadContentAsTextAsync() (external EPUB object)",
          "kind": "interaction"
        }
      ],
      "label": "requests chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "hrst9e",
      "from": "method:105vz8s:scrolltonodeasync",
      "to": "external:l4owl9:js-invokevoidasync-eval-script",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 256,
          "summary": "external-call: JS.InvokeVoidAsync('eval', script)",
          "kind": "interaction"
        }
      ],
      "label": "requests JS.InvokeVoidAsync('eval', script)",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "huet00",
      "from": "method:1x9gjeq:processfullpageasync",
      "to": "method:1fgpnj9:getgraphdataasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 87,
          "summary": "external-call: await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
          "kind": "interaction"
        }
      ],
      "label": "requests await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "i5v46p",
      "from": "method:p4hxqo:oninitializedasync",
      "to": "external:1r6o2a3:await-identityservice-getprofileasync-project-se",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 103,
          "summary": "external-call: await IdentityService.GetProfileAsync(); (project service)",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.GetProfileAsync(); (project service)",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ibqyje",
      "from": "method:14jdxkg:handlerequirementasync",
      "to": "store:1opwi8i:context-succeed-requirement",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 43,
          "summary": "persistence-read: context.Succeed(requirement);",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 50,
          "summary": "persistence-read: context.Succeed(requirement);",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Succeed(requirement);",
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "icen6f",
      "from": "method:64smty:handlelogout",
      "to": "external:k4et2o:await-identityservice-logoutasync-project-servic",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 109,
          "summary": "external-call: await IdentityService.LogoutAsync(); (project service)",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.LogoutAsync(); (project service)",
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "domainTags": [
        "authentication-identity",
        "navigation-routing",
        "ui-layout-sidebar-content",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "blazor-layout",
        "dependency-injection",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ieiyiu",
      "from": "method:1do3jf2:extractmetadataasync",
      "to": "external:5yx7mx:versone-epub-epubreader-openbookasync-epubstream",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 49,
          "summary": "external-call: VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
          "kind": "interaction"
        }
      ],
      "label": "requests VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ieqcjb",
      "from": "method:13yeu7e:getauthenticationstateasync",
      "to": "method:1olwlbd:getsecurestring",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 37,
          "summary": "external-call: await _storageService.GetSecureString(TokenKey)",
          "kind": "interaction"
        }
      ],
      "label": "requests await _storageService.GetSecureString(TokenKey)",
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "targetFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "user-email",
        "tenant-tenantid",
        "roles",
        "authentication-state"
      ],
      "technologyTags": [
        "dotnet",
        "authentication-provider",
        "in-memory-cache",
        "local-persistence-based-auth-token-cookie-indicators"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ipy4bc",
      "from": "method:cgrv35:selectoptionasync",
      "to": "external:18piw3o:var-res-await-mediator-send-cmd",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 76,
          "summary": "external-call: var res = await Mediator.Send(cmd)",
          "kind": "interaction"
        }
      ],
      "label": "requests var res = await Mediator.Send(cmd)",
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "domainTags": [
        "quiz",
        "quizquestiondto",
        "answer-submission",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "event-subscription-quizservice-onquizupdated",
        "cqrs-command-dispatch-submitanswercommand-via-imediator",
        "stateful-ui-component-local-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "j1uh7",
      "from": "method:uwsk5z:handlelogin",
      "to": "external:t62tls:calls-js-invokevoidasync-nexusauth-submitloginfo",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 137,
          "summary": "external-call: Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "sourceFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "j2tw6w",
      "from": "method:17fop7p:sendasync",
      "to": "external:1udvi8d:var-response-await-base-sendasync-request-cancel",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 55,
          "summary": "external-call: var response = await base.SendAsync(request, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "requests var response = await base.SendAsync(request, cancellationToken);",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "j85eps",
      "from": "method:ero6bp:loadchapterasync",
      "to": "store:vnp9jg:statusmessage-b-d-result-errors-firstordefault-m",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 244,
          "summary": "persistence-read: StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
          "kind": "interaction"
        }
      ],
      "label": "reads StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "domainTags": [
        "ebook-chapter-currentchapterindex-totalchapters-chaptertitle",
        "block-textsegmentblock-block-id-content",
        "selection-selected-text-block-id-coordinates",
        "reading-progress-synchronization",
        "data"
      ],
      "technologyTags": [
        "jsinterop-observer-selection",
        "event-subscription-unsubscription",
        "coordinator-orchestration",
        "mediator-based-query-cqrs-query-to-load-page",
        "progress-synchronization-across-devices",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "jfxc3k",
      "from": "method:3jcuy:findauthorbynameasync",
      "to": "store:1662huz:task-author-findauthorbynameasync-string-name-ca",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 14,
          "summary": "persistence-read: Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
          "kind": "interaction"
        }
      ],
      "label": "reads Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "author",
        "ebook",
        "nexusreader",
        "abstractions",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync",
        "abstraction-interface",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "jqjd2x",
      "from": "method:ef0iff:saveboolasync",
      "to": "external:1yus9tg:preferences-default-set-key-value",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 39,
          "summary": "external-call: Preferences.Default.Set(key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests Preferences.Default.Set(key, value)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "jz2qi5",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:1dwn4ic:relatedcontexts-add-source-id-sourceid-sourcecon",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 659,
          "summary": "persistence-write: relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
          "kind": "interaction"
        }
      ],
      "label": "writes relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "k5mtma",
      "from": "method:1jy35qw:ondisconnectedasync",
      "to": "store:go6e6j:await-groups-removefromgroupasync-context-connec",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 43,
          "summary": "persistence-read: await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
          "kind": "interaction"
        }
      ],
      "label": "reads await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "k837d9",
      "from": "method:17fop7p:sendasync",
      "to": "external:1oi7g04:calls-inativestorageservice-getsecurestring-to-o",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 47,
          "summary": "external-call: Calls INativeStorageService.GetSecureString to obtain JWT",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls INativeStorageService.GetSecureString to obtain JWT",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "kcxngs",
      "from": "method:j1tqds:handlekeypress",
      "to": "external:1f02vyb:await-onsearch-invokeasync-searchvalue-raises-th",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 31,
          "summary": "external-call: await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
          "kind": "interaction"
        }
      ],
      "label": "requests await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "domainTags": [
        "search",
        "nexusreader-ui",
        "atoms",
        "nexussearchbox"
      ],
      "technologyTags": [
        "eventcallback-pattern",
        "controlled-component-local-state-parent-callback",
        "markup-driven-computed-css-state",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "kj59bq",
      "from": "method:12jssth:findtitleinnavigation",
      "to": "store:1oft4no:private-static-string-findtitleinnavigation-ienu",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 186,
          "summary": "persistence-read: private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
          "kind": "interaction"
        }
      ],
      "label": "reads private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "kz8r6e",
      "from": "method:10bpn0:getepubcontentasync",
      "to": "external:rrfp4t:calls-httpclient-getasync-api-epub-ebookid-chapt",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 25,
          "summary": "external-call: Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "epub",
        "ebook-metadata",
        "readerpage",
        "nexusreader-web"
      ],
      "technologyTags": [
        "dotnet",
        "adapter-interface-implementation",
        "service-implementation"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "lc6koe",
      "from": "method:12jssth:findtitleinnavigation",
      "to": "store:prjd43:var-childtitle-findtitleinnavigation-item-nested",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 198,
          "summary": "persistence-read: var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
          "kind": "interaction"
        }
      ],
      "label": "reads var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "lgo127",
      "from": "method:18nxwdn:savestringasync",
      "to": "external:1q8ifou:await-jsruntime-invokevoidasync-localstorage-set",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 25,
          "summary": "external-call: await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "domainTags": [
        "localstorage",
        "jsinterop",
        "secure-storage",
        "prerendering-js-unavailable-fallback"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ljzwh3",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:1u0z6xz:calls-embeddinggenerator-generateasync-via-retry",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 332,
          "summary": "external-call: calls _embeddingGenerator.GenerateAsync via retry pipeline",
          "kind": "interaction"
        }
      ],
      "label": "requests calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "lkfcmr",
      "from": "method:pkbr0t:down",
      "to": "external:1jgzkcy:migrationbuilder-altercolumn-datetime-name-creat",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 53,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "mn13h7",
      "from": "method:lqrlha:oninitializedasync",
      "to": "external:1b864m5:await-identityservice-getprofileasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "line": 92,
          "summary": "external-call: await IdentityService.GetProfileAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await IdentityService.GetProfileAsync()",
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "domainTags": [
        "userprofile",
        "dashboard",
        "nexusreader-ui",
        "pages"
      ],
      "technologyTags": [
        "blazor-component",
        "page-lifecycle",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "mzovok",
      "from": "method:1s8oq59:broadcastingestionprogressasync",
      "to": "external:1wmsa3b:sendasync-ingestionprogress-message-progress-can",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 59,
          "summary": "external-call: .SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "requests .SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "domainTags": [
        "sync-progress",
        "ingestion-progress",
        "user-sessions-connected-devices",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "real-time-broadcaster",
        "signalr-integration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "nasb0e",
      "from": "class:tx0x5k:mauiplatformservice",
      "to": "class:1gyz12d:iplatformservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "summary": "MauiPlatformService implements IPlatformService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IPlatformService",
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "targetFileId": "file:wb18l0:iplatformservice-cs",
      "domainTags": [
        "device",
        "displayorientation",
        "hapticfeedback",
        "nexusreader",
        "nexusreader-infrastructure",
        "vibration"
      ],
      "technologyTags": [
        "abstraction-adapter",
        "dotnet",
        "platform-adapter",
        "service",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ndzp6w",
      "from": "method:yif4p8:processknowledgeunitsasync",
      "to": "store:v4goxe:where-u-allcandidateids-contains-u-id",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 235,
          "summary": "persistence-read: .Where(u => allCandidateIds.Contains(u.Id))",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(u => allCandidateIds.Contains(u.Id))",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "nte7kg",
      "from": "method:1x7fw9j:up",
      "to": "external:1bc2xmd:migrationbuilder-altercolumn-datetime-name-lastr",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 32,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "o4agpz",
      "from": "method:t1zuul:handlenodeselected",
      "to": "store:w8w2rh:var-selectednode-graph-nodes-firstordefault-n-n-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 51,
          "summary": "persistence-read: var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
          "kind": "interaction"
        }
      ],
      "label": "reads var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "p1c1w8",
      "from": "method:1wp2z4z:savechangesasync",
      "to": "store:w36z93:public-task-author-findauthorbynameasync-string-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 88,
          "summary": "persistence-read: public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
          "kind": "interaction"
        }
      ],
      "label": "reads public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "sourceFileId": "file:1dbwiwx:program-cs",
      "domainTags": [
        "ebook",
        "author",
        "embedding",
        "appdbcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "dependency-injection-di-registration",
        "environment-specific-stubbing-throwing-stubs-for-server-only-services",
        "composition-root-app-bootstrap",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "p7hotm",
      "from": "method:1al0hre:handle",
      "to": "method:10bpn0:getepubcontentasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 18,
          "summary": "external-call: _epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
          "kind": "interaction"
        }
      ],
      "label": "requests _epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "targetFileId": "file:hiutf5:wasmepubservice-cs",
      "domainTags": [
        "reader",
        "ebook",
        "chapter",
        "readerpage"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "dependency-injection-constructor-injection"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "pw1r9p",
      "from": "method:1whrhth:onconnectedasync",
      "to": "external:1v883i8:await-base-onconnectedasync",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 35,
          "summary": "external-call: await base.OnConnectedAsync()",
          "kind": "interaction"
        }
      ],
      "label": "requests await base.OnConnectedAsync()",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "q3u0ca",
      "from": "class:zdhkb2:knowledgegraphservice",
      "to": "class:1y1hevk:iknowledgegraphservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "summary": "KnowledgeGraphService implements IKnowledgeGraphService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IKnowledgeGraphService",
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "targetFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "domainTags": [
        "graph",
        "graph-node",
        "iknowledgegraphservice",
        "knowledgegraph",
        "knowledgegraphservice",
        "nexusreader-ui",
        "node"
      ],
      "technologyTags": [
        "dotnet",
        "event-based-notification-observer",
        "in-memory-state-holder",
        "observer-event",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "q5ly22",
      "from": "method:c84ulg:askquestionasync",
      "to": "method:io0xiq:askquestionasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 425,
          "summary": "external-call: await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
          "kind": "interaction"
        }
      ],
      "label": "requests await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "targetFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "qckbho",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:1aznj2g:filter-should-add-new-qdrant-client-grpc-conditi",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 337,
          "summary": "external-call: filter.Should.Add(new Qdrant.Client.Grpc.Condition",
          "kind": "interaction"
        },
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 345,
          "summary": "external-call: filter.Should.Add(new Qdrant.Client.Grpc.Condition",
          "kind": "interaction"
        }
      ],
      "label": "requests filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "qdt2z8",
      "from": "method:yif4p8:processknowledgeunitsasync",
      "to": "store:1xjot4x:dbcontext-knowledgeunitlinks-add-link",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 281,
          "summary": "persistence-write: dbContext.KnowledgeUnitLinks.Add(link);",
          "kind": "interaction"
        }
      ],
      "label": "writes dbContext.KnowledgeUnitLinks.Add(link);",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "qjweis",
      "from": "method:upe53r:oninitialized",
      "to": "external:6vllxi:var-returnurl-navigationmanager-tobaserelativepa",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 6,
          "summary": "external-call: var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
          "kind": "interaction"
        }
      ],
      "label": "requests var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "domainTags": [
        "nexusreader-ui",
        "redirecttologin"
      ],
      "technologyTags": [
        "ui-component",
        "redirector",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "qknsb5",
      "from": "method:s95smj:savestringasync",
      "to": "external:1yus9tg:preferences-default-set-key-value",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 14,
          "summary": "external-call: Preferences.Default.Set(key, value)",
          "kind": "interaction"
        }
      ],
      "label": "requests Preferences.Default.Set(key, value)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "qys11x",
      "from": "class:gamvik:bookstorageservice",
      "to": "class:lhjxtl:ibookstorageservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "summary": "BookStorageService implements IBookStorageService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IBookStorageService",
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "targetFileId": "file:9fivst:ibookstorageservice-cs",
      "domainTags": [
        "book",
        "cover",
        "ebook",
        "file-path-url",
        "storage",
        "web-relative-asset-path"
      ],
      "technologyTags": [
        "dotnet",
        "filesystem-storage",
        "infrastructure-service",
        "service-interface",
        "storage-abstraction"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "r6q25w",
      "from": "method:1fl6nt2:handle",
      "to": "method:1ol1cx2:verifygroundednessasync",
      "kind": "requests",
      "status": "resolved",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 20,
          "summary": "external-call: await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
          "kind": "interaction"
        }
      ],
      "label": "requests await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "targetFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "groundedness",
        "knowledgeservice",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "mediatr"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "r7ljgu",
      "from": "method:16gxcfa:handle",
      "to": "store:66z21x:where-ur-ur-userid-u-id",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 54,
          "summary": "persistence-read: .Where(ur => ur.UserId == u.Id)",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(ur => ur.UserId == u.Id)",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rd49yj",
      "from": "method:11o3hgs:oninitialized",
      "to": "store:1k74zre:if-context-issuccess",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 79,
          "summary": "persistence-read: if (context.IsSuccess)",
          "kind": "interaction"
        }
      ],
      "label": "reads if (context.IsSuccess)",
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "domainTags": [
        "ai-assistant-intelligence-sidebar",
        "quiz-quizservice-hasnewquiz-knowledgecheck",
        "nexusreader-ui",
        "layout",
        "data"
      ],
      "technologyTags": [
        "event-subscription-unsubscription-for-ui-updates",
        "js-interop-initialization-with-try-catch-fallback",
        "device-detection-platform-css-switching",
        "authorizeview-based-conditional-rendering",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rpwifd",
      "from": "method:c84ulg:askquestionasync",
      "to": "store:1xsov3i:answer-error-result-errors-firstordefault-messag",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 434,
          "summary": "persistence-read: Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
          "kind": "interaction"
        }
      ],
      "label": "reads Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "domainTags": [
        "groundedresponse",
        "citation",
        "book-lastreadbook",
        "nexusreader-ui",
        "data"
      ],
      "technologyTags": [
        "razor-component-page",
        "client-side-ui-orchestration",
        "ui",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rszbrc",
      "from": "method:14jdxkg:handlerequirementasync",
      "to": "store:gcvc8x:var-userid-context-user-findfirstvalue-claimtype",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 24,
          "summary": "persistence-read: var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "aitokens-aitokenlimit",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "repository-query-ef-dbcontext",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rtiosp",
      "from": "class:18r7noo:readerinteractionservice",
      "to": "class:w9vxji:ireaderinteractionservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "summary": "ReaderInteractionService implements IReaderInteractionService",
          "kind": "file-summary"
        }
      ],
      "label": "implements IReaderInteractionService",
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "targetFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "domainTags": [
        "block",
        "nexusreader-ui",
        "node",
        "selectioncoordinates",
        "text-selection"
      ],
      "technologyTags": [
        "dotnet",
        "observer-event-dispatcher",
        "observer-event-driven",
        "ui-interaction-service",
        "ui-interaction-service-pub-sub-for-ui-components"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rv32p4",
      "from": "method:6i8lek:getstringasync",
      "to": "external:s6iesj:preferences-default-get-key-string-null",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 27,
          "summary": "external-call: Preferences.Default.Get(key, (string?)null)",
          "kind": "interaction"
        }
      ],
      "label": "requests Preferences.Default.Get(key, (string?)null)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rwbmm4",
      "from": "method:1jy35qw:ondisconnectedasync",
      "to": "external:rip2e9:groups-removefromgroupasync-context-connectionid",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 43,
          "summary": "external-call: Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
          "kind": "interaction"
        }
      ],
      "label": "requests Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "rxwru5",
      "from": "method:rb5d4b:notifynavigationchangedasync",
      "to": "external:11f26sj:await-handler-invokes-subscriber-code-external-t",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 78,
          "summary": "external-call: await handler() — invokes subscriber code (external to this service)",
          "kind": "interaction"
        }
      ],
      "label": "requests await handler() — invokes subscriber code (external to this service)",
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "nexusreader-ui",
        "readernavigationservice"
      ],
      "technologyTags": [
        "dotnet",
        "state-holder-ui-state",
        "pub-sub-event-notification",
        "navigation-service"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "ryjcbw",
      "from": "method:uwsk5z:handlelogin",
      "to": "external:3f5wnd:calls-injected-iidentityservice-loginasync-to-au",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 133,
          "summary": "external-call: Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "sourceFileId": "file:csf9l7:login-razor",
      "domainTags": [
        "authentication",
        "externallogin-google",
        "loginmodel-credentials",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "form-handling",
        "external-oauth-redirect",
        "client-side-js-interop-for-cookie-sign-in",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "s0s5vb",
      "from": "method:1epuq0y:handle",
      "to": "external:1u9upqw:tolistasync-cancellationtoken-ef-core-async-mate",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 42,
          "summary": "external-call: ToListAsync(cancellationToken) - EF Core async materialization",
          "kind": "interaction"
        }
      ],
      "label": "requests ToListAsync(cancellationToken) - EF Core async materialization",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "domainTags": [
        "ebook",
        "author",
        "user",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "ef-core-query-projection"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "s8yfse",
      "from": "class:vyfiaz:nativestorageservice",
      "to": "class:1owrs1t:inativestorageservice",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "summary": "NativeStorageService implements INativeStorageService",
          "kind": "file-summary"
        }
      ],
      "label": "implements INativeStorageService",
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "targetFileId": "file:1it42kj:inativestorageservice-cs",
      "domainTags": [
        "jsinterop",
        "key-value-storage",
        "localstorage",
        "nexusreader",
        "prerendering-js-unavailable-fallback",
        "secure-storage",
        "settings-credentials"
      ],
      "technologyTags": [
        "adapter",
        "dotnet",
        "facade",
        "key-value-store",
        "service-interface"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "sjq09u",
      "from": "method:h9z30t:handlesearch",
      "to": "external:13tr33n:awaits-eventcallback-invokeasync-query-to-notify",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 59,
          "summary": "external-call: Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
          "kind": "interaction"
        }
      ],
      "label": "requests Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "domainTags": [
        "semantic-search",
        "library-books",
        "relevance-scoring",
        "nexusreader-ui"
      ],
      "technologyTags": [
        "ui-component",
        "eventcallback-based-children-to-parent-event",
        "ui"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "skorxz",
      "from": "method:t1zuul:handlenodeselected",
      "to": "store:rgdfd6:var-othernode-graph-nodes-firstordefault-n-n-id-",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 59,
          "summary": "persistence-read: var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
          "kind": "interaction"
        }
      ],
      "label": "reads var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "domainTags": [
        "knowledge-graph",
        "quiz",
        "knowledgepacket",
        "block-node",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "coordinator",
        "observer-event-subscribe-invoke",
        "facade-orchestrator",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "sssaa7",
      "from": "method:1pi9wuc:loginasync",
      "to": "external:1llndca:await-usermanager-resetaccessfailedcountasync-us",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 58,
          "summary": "external-call: await _userManager.ResetAccessFailedCountAsync(user)",
          "kind": "interaction"
        }
      ],
      "label": "requests await _userManager.ResetAccessFailedCountAsync(user)",
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "tenant",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "identity-adapter",
        "mediator-cqrs-query-dispatch"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "syhlnw",
      "from": "class:19ihp67:getinitializationstatusqueryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "summary": "GetInitializationStatusQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "application-startup",
        "initializationstatus",
        "nexusreader",
        "queries",
        "query",
        "result"
      ],
      "technologyTags": [
        "cqrs-handler",
        "cqrs-query-handler",
        "dotnet",
        "mediator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "t9z698",
      "from": "method:1whrhth:onconnectedasync",
      "to": "external:1hz36l3:groups-addtogroupasync-context-connectionid-user",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 33,
          "summary": "external-call: Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
          "kind": "interaction"
        }
      ],
      "label": "requests Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "sourceFileId": "file:47d4sb:synchub-cs",
      "domainTags": [
        "user",
        "readingprogress",
        "ebook",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "mediator",
        "signalr-hub",
        "group-based-notifications",
        "api"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "timjir",
      "from": "method:nyrl9z:getprofileinternalasync",
      "to": "external:ukfy2q:httpclient-getasync-identity-profile-framework-c",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 165,
          "summary": "external-call: HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ],
      "label": "requests HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "domainTags": [
        "authentication",
        "userprofile",
        "access-refresh-tokens",
        "persistent-secure-storage-of-user-metadata"
      ],
      "technologyTags": [
        "dotnet",
        "caching-in-memory",
        "single-flight-deduplication-profiletask",
        "service-bridging-http-local-secure-storage",
        "auth-orchestration-invalidate-notify-fetch-profile-after-token-changes"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "u8yexy",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:66nke4:var-userid-user-findfirstvalue-claimtypes-nameid",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 252,
          "summary": "persistence-read: var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ],
      "label": "reads var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "uh1d9r",
      "from": "method:1sxv1a4:getrelevantcontextasync",
      "to": "external:g1wm0j:match-new-qdrant-client-grpc-match-text-global",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 350,
          "summary": "external-call: Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
          "kind": "interaction"
        }
      ],
      "label": "requests Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "v7d8gd",
      "from": "class:frxocr:ebookrepository",
      "to": "class:ir9z2o:iebookrepository",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "summary": "EbookRepository implements IEbookRepository",
          "kind": "file-summary"
        }
      ],
      "label": "implements IEbookRepository",
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "targetFileId": "file:1hlb3r7:iebookrepository-cs",
      "domainTags": [
        "abstractions",
        "author",
        "ebook",
        "nexusreader",
        "persistence"
      ],
      "technologyTags": [
        "abstraction-interface",
        "dotnet",
        "repository",
        "unit-of-work-staged-changes-savechangesasync"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "vg6mmq",
      "from": "method:pkbr0t:down",
      "to": "external:kzg80q:migrationbuilder-altercolumn-datetime-name-added",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 80,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
          "kind": "interaction"
        }
      ],
      "label": "requests migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "domainTags": [
        "semanticknowledgecache",
        "ebooks",
        "contenthash",
        "nexusreader"
      ],
      "technologyTags": [
        "dotnet",
        "ef-core-migration"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "wbsykr",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:14gpj8y:where-e-ebookids-contains-e-id",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 704,
          "summary": "persistence-read: .Where(e => ebookIds.Contains(e.Id))",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(e => ebookIds.Contains(e.Id))",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "wdnppt",
      "from": "method:1uibcuk:program-top-level",
      "to": "store:1gsept0:context-response-statuscode-statuscodes-status40",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 131,
          "summary": "persistence-read: context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "sourceFileId": "file:12rhzck:program-cs",
      "domainTags": [
        "subscriptionplan",
        "knowledge-knowledgeservice",
        "ebook-library-ingestion",
        "user-identity-and-profiles",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "minimal-api",
        "startup-composition-root",
        "local-functions-for-webhook-handling",
        "retry-with-exponential-backoff-for-db-migration",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "wgti6p",
      "from": "method:bamm0e:getepubcontentasync",
      "to": "external:10yodpk:calls-versone-epub-epubreader-openbookasync-to-o",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 62,
          "summary": "external-call: Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
          "kind": "interaction"
        }
      ],
      "label": "requests Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "domainTags": [
        "ebook",
        "chapter",
        "readerpageviewmodel",
        "contentblock"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "factory-createaitrigger"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "wpu2ty",
      "from": "method:1bfedhw:getsecurestring",
      "to": "external:1eysk1b:await-securestorage-default-getasync-key",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 90,
          "summary": "external-call: await SecureStorage.Default.GetAsync(key)",
          "kind": "interaction"
        }
      ],
      "label": "requests await SecureStorage.Default.GetAsync(key)",
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "domainTags": [
        "preferences-based-key-value-storage",
        "securestorage-protected-key-value-storage",
        "nexusreader-infrastructure",
        "mauistorageservice"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "facade"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "wq7nme",
      "from": "method:gy7qh:handle",
      "to": "store:o198xq:var-author-await-ebookrepository-findauthorbynam",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 52,
          "summary": "persistence-read: var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
          "kind": "interaction"
        }
      ],
      "label": "reads var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "domainTags": [
        "ebook",
        "author",
        "file-storage",
        "tenant",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "repository",
        "command-handler",
        "dependency-injection",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "xeujdf",
      "from": "method:13vwa6r:handlerequirementasync",
      "to": "store:1opwi8i:context-succeed-requirement",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 47,
          "summary": "persistence-read: context.Succeed(requirement);",
          "kind": "interaction"
        }
      ],
      "label": "reads context.Succeed(requirement);",
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "domainTags": [
        "aitokens",
        "subscriptionplan",
        "user-identity-claims",
        "nexusreader",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "authorization-handler",
        "db-backed-claim-authorization-check",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "xkwb4",
      "from": "method:1ca58m3:getrelevantcontextasync",
      "to": "store:164m416:return-context-null-result-ok-context-result-fai",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 45,
          "summary": "persistence-read: return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
          "kind": "interaction"
        }
      ],
      "label": "reads return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "domainTags": [
        "knowledge-knowledgepacket",
        "semantic-search",
        "groundedness-verification",
        "relevantcontext",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "adapter",
        "http-api-client",
        "facade-thin-orchestration-to-a-generic-caller",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "xt52ku",
      "from": "method:17fop7p:sendasync",
      "to": "external:fxwsdp:identityservice-refreshtokenasync-if-success-re-",
      "kind": "requests",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 78,
          "summary": "external-call: identityService.RefreshTokenAsync(); if success, re-read stored token",
          "kind": "interaction"
        }
      ],
      "label": "requests identityService.RefreshTokenAsync(); if success, re-read stored token",
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "domainTags": [
        "authentication",
        "jwt",
        "token-refresh",
        "secure-storage"
      ],
      "technologyTags": [
        "dotnet",
        "http-delegatinghandler",
        "token-auto-refresh",
        "scoped-resolution-for-short-lived-services",
        "concurrency-serialization-semaphore"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "yjwaol",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:19ypa2f:relatedcontexts-add-source-id-sourceid-content",
      "kind": "writes",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 687,
          "summary": "persistence-write: relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
          "kind": "interaction"
        }
      ],
      "label": "writes relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "yzaz44",
      "from": "method:1ctlycb:handlesubscriptionupdatedasync",
      "to": "store:1net1ay:var-user-await-usermanager-findbyemailasync-cust",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 36,
          "summary": "persistence-read: var user = await _userManager.FindByEmailAsync(customerEmail);",
          "kind": "interaction"
        }
      ],
      "label": "reads var user = await _userManager.FindByEmailAsync(customerEmail);",
      "sourceFileId": "file:13phiik:billingservice-cs",
      "domainTags": [
        "subscriptionplan",
        "nexususer",
        "stripe-product-id-mapping",
        "ai-token-limits",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "service",
        "repository-dbcontext-access",
        "identity-user-management",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "z753cp",
      "from": "method:16gxcfa:handle",
      "to": "store:1mb6tc8:int-u-quizresults-where-q-q-totalquestions-0-ave",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 36,
          "summary": "persistence-read: ? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
          "kind": "interaction"
        }
      ],
      "label": "reads ? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "domainTags": [
        "user",
        "subscriptionplan",
        "ebook-lastreadbook",
        "quizresult",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cqrs-handler",
        "repository-ef-core-dbcontext-read",
        "projection-dto-mapping",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "zzdybf",
      "from": "class:1far2m1:getmyebooksqueryhandler",
      "to": "class:daunpv:iqueryhandler",
      "kind": "implements",
      "status": "inferred",
      "confidence": 0.82,
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "GetMyEbooksQueryHandler implements IQueryHandler",
          "kind": "file-summary"
        }
      ],
      "label": "implements IQueryHandler",
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "targetFileId": "file:ayj9r2:iqueryhandler-cs",
      "domainTags": [
        "abstractions",
        "author",
        "ebook",
        "nexusreader",
        "query",
        "result",
        "user"
      ],
      "technologyTags": [
        "cqrs-handler",
        "dotnet",
        "ef-core-query-projection",
        "mediator"
      ],
      "crossesDomain": false,
      "crossesBoundary": false,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    },
    {
      "id": "zzxo5o",
      "from": "method:io0xiq:askquestionasync",
      "to": "store:1isdduh:where-r-r-payload-trygetvalue-ebookid-out-var-ev",
      "kind": "reads",
      "status": "grounded",
      "confidence": 0.84,
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 694,
          "summary": "persistence-read: .Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
          "kind": "interaction"
        }
      ],
      "label": "reads .Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "domainTags": [
        "knowledgeunit",
        "knowledgeunitlink",
        "semanticknowledgecache",
        "ebook",
        "data"
      ],
      "technologyTags": [
        "dotnet",
        "cache-semanticknowledgecache",
        "request-coalescing-deduplication-concurrentdictionary-lazy-task",
        "retry-resilience-polly-resiliencepipeline",
        "rag-qdrant-vector-search-neo4j-graph-expansion",
        "upsert-pattern-for-domain-entities-knowledgeunit",
        "data"
      ],
      "crossesDomain": false,
      "crossesBoundary": true,
      "extractionMethod": "file-interaction",
      "allowedInRuntimeFlow": true
    }
  ],
  "unresolvedReferences": [
    {
      "id": "unresolved:1182z2f:dependency-target",
      "sourceNodeId": "file:ayj9r2:iqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ejgp6x:dependency-target",
      "sourceNodeId": "file:ayj9r2:iqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:16y6p8p:dependency-target",
      "sourceNodeId": "file:1hlb3r7:iebookrepository-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1bf761s:interaction-target",
      "sourceNodeId": "class:ir9z2o:iebookrepository",
      "kind": "interaction-target",
      "targetHint": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 14,
          "summary": "persistence-read: Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:7gz429:dependency-target",
      "sourceNodeId": "file:rfn6bc:ibillingservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities (using)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities (using).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:qkd3c4:dependency-target",
      "sourceNodeId": "file:rfn6bc:ibillingservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (using)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "summary": "Unresolved dependency target FluentResults (using).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1la1nhg:dependency-target",
      "sourceNodeId": "file:vdwqp9:iepubmetadataextractor-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (NuGet/namespace)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "summary": "Unresolved dependency target FluentResults (NuGet/namespace).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:15xz92t:dependency-target",
      "sourceNodeId": "file:vdwqp9:iepubmetadataextractor-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader (namespace containing LocalEpubMetadata)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader (namespace containing LocalEpubMetadata).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1t9o8kq:dependency-target",
      "sourceNodeId": "file:vdwqp9:iepubmetadataextractor-cs",
      "kind": "dependency-target",
      "targetPath": "System.IO (Stream)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "summary": "Unresolved dependency target System.IO (Stream).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:5n3amc:dependency-target",
      "sourceNodeId": "file:1mo9e25:iepubreader-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader (ReaderPageViewModel referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader (ReaderPageViewModel referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:8ufprs:dependency-target",
      "sourceNodeId": "file:1mo9e25:iepubreader-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result<T> usage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "summary": "Unresolved dependency target FluentResults (Result<T> usage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:o9h54s:dependency-target",
      "sourceNodeId": "file:1ud0jop:iidentityservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (external package)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "summary": "Unresolved dependency target FluentResults (external package).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:rf1imi:dependency-target",
      "sourceNodeId": "file:pvs6tn:iknowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:12uyfk6:dependency-target",
      "sourceNodeId": "file:pvs6tn:iknowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zsf6vl:dependency-target",
      "sourceNodeId": "file:2eckht:verifygroundednesscommand-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IKnowledgeService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IKnowledgeService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19rtif1:dependency-target",
      "sourceNodeId": "file:2eckht:verifygroundednesscommand-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result<>)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "summary": "Unresolved dependency target FluentResults (Result<>).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:151x8ld:dependency-target",
      "sourceNodeId": "file:2eckht:verifygroundednesscommand-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR (IRequestHandler/IRequest)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "summary": "Unresolved dependency target MediatR (IRequestHandler/IRequest).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1x6qoip:call-target",
      "sourceNodeId": "method:1fl6nt2:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "VerifyGroundednessAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 20,
          "summary": "Unresolved call target VerifyGroundednessAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1d98nmq:interaction-target",
      "sourceNodeId": "class:109ebx2:verifygroundednesscommandhandler",
      "kind": "interaction-target",
      "targetHint": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 20,
          "summary": "external-call: await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:gg9dtd:dependency-target",
      "sourceNodeId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:uep4tr:dependency-target",
      "sourceNodeId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IBookStorageService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services/IBookStorageService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:2jb8zj:dependency-target",
      "sourceNodeId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities/Ebook.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities/Ebook.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:3a5vlg:dependency-target",
      "sourceNodeId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities/Author.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities/Author.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1hkxnh3:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IBookStorageService.cs",
      "targetHint": "SaveEbookAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 31,
          "summary": "Unresolved call target SaveEbookAsync in NexusReader.Application.Abstractions.Services/IBookStorageService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jnlalo:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IBookStorageService.cs",
      "targetHint": "SaveCoverAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 33,
          "summary": "Unresolved call target SaveCoverAsync in NexusReader.Application.Abstractions.Services/IBookStorageService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1foxj00:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
      "targetHint": "FindAuthorByNameAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 52,
          "summary": "Unresolved call target FindAuthorByNameAsync in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1o7j1ya:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
      "targetHint": "AddAuthor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 56,
          "summary": "Unresolved call target AddAuthor in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:6ikjt:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
      "targetHint": "AddEbook",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 72,
          "summary": "Unresolved call target AddEbook in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:syqfv0:call-target",
      "sourceNodeId": "method:gy7qh:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
      "targetHint": "SaveChangesAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 73,
          "summary": "Unresolved call target SaveChangesAsync in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:100nowa:interaction-target",
      "sourceNodeId": "class:1kfw737:ingestebookcommandhandler",
      "kind": "interaction-target",
      "targetHint": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 52,
          "summary": "persistence-read: var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:yctv9m:interaction-target",
      "sourceNodeId": "class:1kfw737:ingestebookcommandhandler",
      "kind": "interaction-target",
      "targetHint": "Calls AddEbook and SaveChangesAsync to persist the new entity",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 72,
          "summary": "persistence-write: Calls AddEbook and SaveChangesAsync to persist the new entity",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1k8f5yt:dependency-target",
      "sourceNodeId": "file:dskay:submitanswercommand-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1pix3qb:dependency-target",
      "sourceNodeId": "file:hc4koi:submitanswercommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IPlatformService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services/IPlatformService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:my9spj:dependency-target",
      "sourceNodeId": "file:hc4koi:submitanswercommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.Quiz/SubmitAnswerCommand.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.Quiz/SubmitAnswerCommand.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:gdtbd6:call-target",
      "sourceNodeId": "method:e8akyb:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IPlatformService.cs",
      "targetHint": "VibrateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "line": 20,
          "summary": "Unresolved call target VibrateAsync in NexusReader.Application.Abstractions.Services/IPlatformService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:h9q2v9:interaction-target",
      "sourceNodeId": "class:andjgd:submitanswercommandhandler",
      "kind": "interaction-target",
      "targetHint": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "line": 20,
          "summary": "external-call: _platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:5pxw20:dependency-target",
      "sourceNodeId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:16sjs62:dependency-target",
      "sourceNodeId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:197jdm1:call-target",
      "sourceNodeId": "method:1jqlijy:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory<AppDbContext>.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 28,
          "summary": "Unresolved call target IDbContextFactory<AppDbContext>.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:167ab0v:call-target",
      "sourceNodeId": "method:1jqlijy:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.Users.FirstOrDefaultAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 30,
          "summary": "Unresolved call target AppDbContext.Users.FirstOrDefaultAsync in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:eld0cu:call-target",
      "sourceNodeId": "method:1jqlijy:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.Ebooks.FirstOrDefaultAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 40,
          "summary": "Unresolved call target AppDbContext.Ebooks.FirstOrDefaultAsync in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1rw33m5:call-target",
      "sourceNodeId": "method:1jqlijy:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.SaveChangesAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 49,
          "summary": "Unresolved call target AppDbContext.SaveChangesAsync in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:jg0l72:call-target",
      "sourceNodeId": "method:1jqlijy:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ISyncBroadcaster.BroadcastProgressAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 52,
          "summary": "Unresolved call target ISyncBroadcaster.BroadcastProgressAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:35czhy:interaction-target",
      "sourceNodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "interaction-target",
      "targetHint": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 30,
          "summary": "persistence-read: var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1mfbj3f:interaction-target",
      "sourceNodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "interaction-target",
      "targetHint": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 40,
          "summary": "persistence-read: var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:k7dskm:interaction-target",
      "sourceNodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "interaction-target",
      "targetHint": "await context.SaveChangesAsync(cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 49,
          "summary": "persistence-read: await context.SaveChangesAsync(cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1n2eft4:interaction-target",
      "sourceNodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
      "kind": "interaction-target",
      "targetHint": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 52,
          "summary": "external-call: await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:pkaiw9:dependency-target",
      "sourceNodeId": "file:wxheam:appjsoncontext-cs",
      "kind": "dependency-target",
      "targetPath": "System.Text.Json.Serialization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Common/AppJsonContext.cs",
          "summary": "Unresolved dependency target System.Text.Json.Serialization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:kqsrin:dependency-target",
      "sourceNodeId": "file:wxheam:appjsoncontext-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Graph",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Common/AppJsonContext.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Graph.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:142tqvw:dependency-target",
      "sourceNodeId": "file:qieb5i:dependencyinjection-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application/Mappings",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "summary": "Unresolved dependency target NexusReader.Application/Mappings.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1oo5v1s:call-target",
      "sourceNodeId": "method:zf4i3h:addapplication",
      "kind": "call-target",
      "targetPath": "NexusReader.Application/Mappings",
      "targetHint": "AddMapsterConfiguration",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "line": 10,
          "summary": "Unresolved call target AddMapsterConfiguration in NexusReader.Application/Mappings.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16kml5t:dependency-target",
      "sourceNodeId": "file:hjtala:knowledgepacket-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application/Queries/Graph/GraphDataDto.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs",
          "summary": "Unresolved dependency target NexusReader.Application/Queries/Graph/GraphDataDto.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1xaaq8a:dependency-target",
      "sourceNodeId": "file:1fs0p2c:userprofiledto-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Constants.PlanConstants (referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Constants.PlanConstants (referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:2ivwwd:dependency-target",
      "sourceNodeId": "file:1fs0p2c:userprofiledto-cs",
      "kind": "dependency-target",
      "targetPath": "SubscriptionPlanDto (referenced, external file)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "summary": "Unresolved dependency target SubscriptionPlanDto (referenced, external file).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:mf6f0o:dependency-target",
      "sourceNodeId": "file:1fs0p2c:userprofiledto-cs",
      "kind": "dependency-target",
      "targetPath": "AuthorDto (referenced, external file)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs",
          "summary": "Unresolved dependency target AuthorDto (referenced, external file).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1j0812h:dependency-target",
      "sourceNodeId": "file:w6cklc:mappingconfig-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities (NexusUser, Ebook referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities (NexusUser, Ebook referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:nwv9ip:dependency-target",
      "sourceNodeId": "file:w6cklc:mappingconfig-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application/DTOs/User (UserProfileDto, LastReadBookDto referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "summary": "Unresolved dependency target NexusReader.Application/DTOs/User (UserProfileDto, LastReadBookDto referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:132t2nb:interaction-target",
      "sourceNodeId": "class:1lmiwem:mappingconfig",
      "kind": "interaction-target",
      "targetHint": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "line": 13,
          "summary": "external-call: var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:iaei0z:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Domain/NexusReader.Domain.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Domain/NexusReader.Domain.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ql4sjv:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Data/NexusReader.Data.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Data/NexusReader.Data.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:tx29uq:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "FluentResults (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target FluentResults (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1jierts:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Mapster (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Mapster (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1b9cwqc:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Mapster.DependencyInjection (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Mapster.DependencyInjection (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:b02tco:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "MediatR (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target MediatR (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1klarbx:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Authorization (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Authorization (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:172tw8a:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ehlq1a:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.AI (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Microsoft.Extensions.AI (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:s4lp61:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Identity.Core (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Microsoft.Extensions.Identity.Core (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:sbfkqk:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Pgvector.EntityFrameworkCore (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Pgvector.EntityFrameworkCore (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:d8f74z:dependency-target",
      "sourceNodeId": "file:mpxmz7:nexusreader-application-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Resilience (NuGet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/NexusReader.Application.csproj",
          "summary": "Unresolved dependency target Microsoft.Extensions.Resilience (NuGet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:oizlpn:dependency-target",
      "sourceNodeId": "file:10kr3oo:getknowledgegraphquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging (IQuery)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging (IQuery).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dgb32r:dependency-target",
      "sourceNodeId": "file:10kr3oo:getknowledgegraphquery-cs",
      "kind": "dependency-target",
      "targetPath": "GraphDataDto (output type)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs",
          "summary": "Unresolved dependency target GraphDataDto (output type).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dmto9s:dependency-target",
      "sourceNodeId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging (IQueryHandler)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging (IQueryHandler).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:hr1lff:dependency-target",
      "sourceNodeId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IKnowledgeService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IKnowledgeService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:i84gum:call-target",
      "sourceNodeId": "method:tgg1x1:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetGraphDataAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 21,
          "summary": "Unresolved call target GetGraphDataAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:180ldv3:interaction-target",
      "sourceNodeId": "class:p0no6:getknowledgegraphqueryhandler",
      "kind": "interaction-target",
      "targetHint": "await _knowledgeService.GetGraphDataAsync(...)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 21,
          "summary": "external-call: await _knowledgeService.GetGraphDataAsync(...)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:75vwqu:dependency-target",
      "sourceNodeId": "file:xxwh7p:asklibraryquestionquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13g96aj:dependency-target",
      "sourceNodeId": "file:xxwh7p:asklibraryquestionquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ccwdod:dependency-target",
      "sourceNodeId": "file:xxwh7p:asklibraryquestionquery-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:rd8fob:dependency-target",
      "sourceNodeId": "file:xxwh7p:asklibraryquestionquery-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19u8vwm:call-target",
      "sourceNodeId": "method:17jlxw0:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AskQuestionAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 30,
          "summary": "Unresolved call target AskQuestionAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:13z2o11:interaction-target",
      "sourceNodeId": "class:1n4pq65:asklibraryquestionqueryhandler",
      "kind": "interaction-target",
      "targetHint": "Returns result of _knowledgeService.AskQuestionAsync(...)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 30,
          "summary": "external-call: Returns result of _knowledgeService.AskQuestionAsync(...)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1p9rnhh:dependency-target",
      "sourceNodeId": "file:16axv5i:getmyebooksquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1cqlu0f:dependency-target",
      "sourceNodeId": "file:16axv5i:getmyebooksquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1t3pfoq:dependency-target",
      "sourceNodeId": "file:16axv5i:getmyebooksquery-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:145vr14:dependency-target",
      "sourceNodeId": "file:16axv5i:getmyebooksquery-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:l1avga:dependency-target",
      "sourceNodeId": "file:16axv5i:getmyebooksquery-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:x17hvs:interaction-target",
      "sourceNodeId": "class:1far2m1:getmyebooksqueryhandler",
      "kind": "interaction-target",
      "targetHint": ".Where(e => e.UserId == request.UserId)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 25,
          "summary": "persistence-read: .Where(e => e.UserId == request.UserId)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:wfw9je:interaction-target",
      "sourceNodeId": "class:1far2m1:getmyebooksqueryhandler",
      "kind": "interaction-target",
      "targetHint": "ToListAsync(cancellationToken) - EF Core async materialization",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 42,
          "summary": "external-call: ToListAsync(cancellationToken) - EF Core async materialization",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:159jrbq:dependency-target",
      "sourceNodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence (imported at line 15)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence (imported at line 15).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1nmbqj2:dependency-target",
      "sourceNodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "dependency-target",
      "targetPath": "Mapster/MapsterMapper (imported at lines 12-13)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "Unresolved dependency target Mapster/MapsterMapper (imported at lines 12-13).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1p7hi:dependency-target",
      "sourceNodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR (imported line 2)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "Unresolved dependency target MediatR (imported line 2).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ngt2c1:dependency-target",
      "sourceNodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "dependency-target",
      "targetPath": "Pgvector (imported lines 3-4)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "Unresolved dependency target Pgvector (imported lines 3-4).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1igb7c9:dependency-target",
      "sourceNodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Resilience / Polly (lines 9-11)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "summary": "Unresolved dependency target Microsoft.Extensions.Resilience / Polly (lines 9-11).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1nh5es3:call-target",
      "sourceNodeId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetPipeline",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 37,
          "summary": "Unresolved call target GetPipeline in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ywu2kl:call-target",
      "sourceNodeId": "method:1bus1hn:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ExecuteAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 49,
          "summary": "Unresolved call target ExecuteAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:8t3u5h:call-target",
      "sourceNodeId": "method:1bus1hn:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GenerateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 50,
          "summary": "Unresolved call target GenerateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1oqa70v:call-target",
      "sourceNodeId": "method:1bus1hn:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 53,
          "summary": "Unresolved call target CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:rglo3u:call-target",
      "sourceNodeId": "method:1bus1hn:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Map",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 60,
          "summary": "Unresolved call target Map in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:2r3zjw:interaction-target",
      "sourceNodeId": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "kind": "interaction-target",
      "targetHint": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 55,
          "summary": "persistence-read: .Where(c => c.TenantId == request.TenantId && c.Embedding != null)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ubjsmz:interaction-target",
      "sourceNodeId": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "kind": "interaction-target",
      "targetHint": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 37,
          "summary": "external-call: pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1gdzso6:interaction-target",
      "sourceNodeId": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "kind": "interaction-target",
      "targetHint": "_embeddingGenerator.GenerateAsync called with request.QueryText",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 50,
          "summary": "external-call: _embeddingGenerator.GenerateAsync called with request.QueryText",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:u0d3ed:dependency-target",
      "sourceNodeId": "file:9lh011:getreaderpagequery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging (IQuery<ReaderPageViewModel>)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging (IQuery<ReaderPageViewModel>).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:mtnksj:dependency-target",
      "sourceNodeId": "file:y077jr:getreaderpagequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:b5aj41:dependency-target",
      "sourceNodeId": "file:y077jr:getreaderpagequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1tdjyt0:dependency-target",
      "sourceNodeId": "file:y077jr:getreaderpagequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7zd42w:call-target",
      "sourceNodeId": "method:1al0hre:handle",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetEpubContentAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 18,
          "summary": "Unresolved call target GetEpubContentAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:nzxkp1:interaction-target",
      "sourceNodeId": "class:1lgm7qp:getreaderpagequeryhandler",
      "kind": "interaction-target",
      "targetHint": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 18,
          "summary": "external-call: _epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:w4aw7e:dependency-target",
      "sourceNodeId": "file:1m26se1:getinitializationstatusquery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging (IQuery<string>)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging (IQuery<string>).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:z5qfy:dependency-target",
      "sourceNodeId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1e7ypjq:dependency-target",
      "sourceNodeId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.System.GetInitializationStatusQuery",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.System.GetInitializationStatusQuery.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:tl4b8j:dependency-target",
      "sourceNodeId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1vots2l:dependency-target",
      "sourceNodeId": "file:vjfxh7:getuserprofilequery-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User (UserProfileDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User (UserProfileDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1irhzw2:dependency-target",
      "sourceNodeId": "file:vjfxh7:getuserprofilequery-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:52d0r0:dependency-target",
      "sourceNodeId": "file:vjfxh7:getuserprofilequery-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:g8ii7m:dependency-target",
      "sourceNodeId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:yc5tn6:dependency-target",
      "sourceNodeId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:qqe359:dependency-target",
      "sourceNodeId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "Unresolved dependency target FluentResults.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1488pgn:dependency-target",
      "sourceNodeId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:15t570c:call-target",
      "sourceNodeId": "method:16gxcfa:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.Users (DbSet)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 21,
          "summary": "Unresolved call target AppDbContext.Users (DbSet) in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:b2sea4:call-target",
      "sourceNodeId": "method:16gxcfa:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.UserRoles (DbSet)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 53,
          "summary": "Unresolved call target AppDbContext.UserRoles (DbSet) in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:nutxq5:call-target",
      "sourceNodeId": "method:16gxcfa:handle",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence",
      "targetHint": "AppDbContext.Roles (DbSet)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 55,
          "summary": "Unresolved call target AppDbContext.Roles (DbSet) in NexusReader.Data.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1o052g9:interaction-target",
      "sourceNodeId": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "interaction-target",
      "targetHint": ".Where(u => u.Id == request.UserId)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 22,
          "summary": "persistence-read: .Where(u => u.Id == request.UserId)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1s9n6fm:interaction-target",
      "sourceNodeId": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "interaction-target",
      "targetHint": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 36,
          "summary": "persistence-read: ? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1mpyomv:interaction-target",
      "sourceNodeId": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "interaction-target",
      "targetHint": "}).FirstOrDefault(),",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 52,
          "summary": "persistence-read: }).FirstOrDefault(),",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:jtwisz:interaction-target",
      "sourceNodeId": "class:158ohhh:getuserprofilequeryhandler",
      "kind": "interaction-target",
      "targetHint": ".Where(ur => ur.UserId == u.Id)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 54,
          "summary": "persistence-read: .Where(ur => ur.UserId == u.Id)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1c3isb1:dependency-target",
      "sourceNodeId": "file:1hyu1ez:prouserhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1v56x9p:dependency-target",
      "sourceNodeId": "file:1hyu1ez:prouserhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:p5hs9g:dependency-target",
      "sourceNodeId": "file:1hyu1ez:prouserhandler-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:yv01sb:interaction-target",
      "sourceNodeId": "class:1hxasb:prouserhandler",
      "kind": "interaction-target",
      "targetHint": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 24,
          "summary": "persistence-read: var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:7uqyo8:interaction-target",
      "sourceNodeId": "class:1hxasb:prouserhandler",
      "kind": "interaction-target",
      "targetHint": "context.Succeed(requirement);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 43,
          "summary": "persistence-read: context.Succeed(requirement);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:raiqd6:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 14,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:hddsir:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 22,
          "summary": "external-call: migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1liwgtv:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 32,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:gp3i3y:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 41,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1xkic68:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 53,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1tqhoi7:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 61,
          "summary": "external-call: migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:15lpvbv:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 71,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:d95c5g:interaction-target",
      "sourceNodeId": "class:14xe27n:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 80,
          "summary": "external-call: migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1041pkd:interaction-target",
      "sourceNodeId": "class:mi743e:increasehashlength",
      "kind": "interaction-target",
      "targetHint": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "line": 26,
          "summary": "external-call: NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1meayaz:interaction-target",
      "sourceNodeId": "class:zj074q:finalnormalizedsubscriptionarchitecture",
      "kind": "interaction-target",
      "targetHint": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 27,
          "summary": "external-call: NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1x958ae:interaction-target",
      "sourceNodeId": "class:zj074q:finalnormalizedsubscriptionarchitecture",
      "kind": "interaction-target",
      "targetHint": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 28,
          "summary": "external-call: NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:g8usd5:dependency-target",
      "sourceNodeId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext (referenced in [DbContext(typeof(AppDbContext))])",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence/AppDbContext (referenced in [DbContext(typeof(AppDbContext))]).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:abkw96:dependency-target",
      "sourceNodeId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence (AppDbContext reference via attribute)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence (AppDbContext reference via attribute).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18nuxgv:dependency-target",
      "sourceNodeId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "kind": "dependency-target",
      "targetPath": "Npgsql.EntityFrameworkCore.PostgreSQL (extension usage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "summary": "Unresolved dependency target Npgsql.EntityFrameworkCore.PostgreSQL (extension usage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:2nfp3m:dependency-target",
      "sourceNodeId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "kind": "dependency-target",
      "targetPath": "Pgvector (Vector type usage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "summary": "Unresolved dependency target Pgvector (Vector type usage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1hj50zu:dependency-target",
      "sourceNodeId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "kind": "dependency-target",
      "targetPath": "Pgvector (external)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "summary": "Unresolved dependency target Pgvector (external).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:740ai3:dependency-target",
      "sourceNodeId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "kind": "dependency-target",
      "targetPath": "Npgsql.EntityFrameworkCore.PostgreSQL (external)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "summary": "Unresolved dependency target Npgsql.EntityFrameworkCore.PostgreSQL (external).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:t4y3g7:dependency-target",
      "sourceNodeId": "file:bk6gk1:nexusreader-data-csproj",
      "kind": "dependency-target",
      "targetPath": "[object Object]",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/NexusReader.Data.csproj",
          "summary": "Unresolved dependency target [object Object].",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1n10j0k:dependency-target",
      "sourceNodeId": "file:1pacvtg:appdbcontext-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities (referenced via using NexusReader.Domain.Entities at line 3)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities (referenced via using NexusReader.Domain.Entities at line 3).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:9yg66c:dependency-target",
      "sourceNodeId": "file:1pacvtg:appdbcontext-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore (EF Core usage evident)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore (EF Core usage evident).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1tf41qv:call-target",
      "sourceNodeId": "method:nwogow:createdbcontext",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "AppDbContext..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "line": 43,
          "summary": "Unresolved call target AppDbContext..ctor in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:148q98d:call-target",
      "sourceNodeId": "method:n19kbi:seedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
      "targetHint": "FreeId / FreeName / ProId / ProName / EnterpriseId / EnterpriseName (static properties)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 30,
          "summary": "Unresolved call target FreeId / FreeName / ProId / ProName / EnterpriseId / EnterpriseName (static properties) in NexusReader.Domain/Entities/SubscriptionPlan.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:v6805b:call-target",
      "sourceNodeId": "method:n19kbi:seedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
      "targetHint": "NexusUser .ctor (entity creation)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 58,
          "summary": "Unresolved call target NexusUser .ctor (entity creation) in NexusReader.Domain/Entities/NexusUser.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:t3ot5v:call-target",
      "sourceNodeId": "method:n19kbi:seedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain/Entities/Author.cs",
      "targetHint": "Author .ctor (entity creation)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 86,
          "summary": "Unresolved call target Author .ctor (entity creation) in NexusReader.Domain/Entities/Author.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:8fs4dr:call-target",
      "sourceNodeId": "method:n19kbi:seedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
      "targetHint": "Ebook .ctor (entity creation)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 94,
          "summary": "Unresolved call target Ebook .ctor (entity creation) in NexusReader.Domain/Entities/Ebook.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:17a2h42:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 45,
          "summary": "persistence-write: dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:d456c0:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "dbContext.Users.Add(adminUser);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 73,
          "summary": "persistence-write: dbContext.Users.Add(adminUser);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:sdjm8i:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 77,
          "summary": "persistence-write: dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:w7mczj:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "dbContext.Authors.Add(author);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 87,
          "summary": "persistence-write: dbContext.Authors.Add(author);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:uowqml:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "dbContext.Ebooks.Add(new Ebook",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 94,
          "summary": "persistence-write: dbContext.Ebooks.Add(new Ebook",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:30rgkl:interaction-target",
      "sourceNodeId": "class:1t4ptj6:dbinitializer",
      "kind": "interaction-target",
      "targetHint": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 19,
          "summary": "external-call: await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:14e5nwh:dependency-target",
      "sourceNodeId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities/* (Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, QuizResult, SemanticKnowledgeCache, SubscriptionPlan)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities/* (Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, QuizResult, SemanticKnowledgeCache, SubscriptionPlan).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:fux07:dependency-target",
      "sourceNodeId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities (referenced entity types: Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, SubscriptionPlan, QuizResult, SemanticKnowledgeCache)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities (referenced entity types: Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, SubscriptionPlan, QuizResult, SemanticKnowledgeCache).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:vzpeg0:call-target",
      "sourceNodeId": "method:1egmvje:buildtargetmodel",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NpgsqlModelBuilderExtensions.HasPostgresExtension",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 27,
          "summary": "Unresolved call target NpgsqlModelBuilderExtensions.HasPostgresExtension in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1oombcg:call-target",
      "sourceNodeId": "method:1egmvje:buildtargetmodel",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 28,
          "summary": "Unresolved call target NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ii6wwa:call-target",
      "sourceNodeId": "method:1egmvje:buildtargetmodel",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ModelBuilder.Entity",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 30,
          "summary": "Unresolved call target ModelBuilder.Entity in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:83awfv:call-target",
      "sourceNodeId": "method:1egmvje:buildtargetmodel",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "EntityTypeBuilder.HasData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 530,
          "summary": "Unresolved call target EntityTypeBuilder.HasData in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1kdizgd:dependency-target",
      "sourceNodeId": "file:xcxh5w:nexususer-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Identity.IdentityUser",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Identity.IdentityUser.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:vqjpre:dependency-target",
      "sourceNodeId": "file:xcxh5w:nexususer-cs",
      "kind": "dependency-target",
      "targetPath": "SubscriptionPlan (NexusReader.Domain.Entities)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "summary": "Unresolved dependency target SubscriptionPlan (NexusReader.Domain.Entities).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:5lg6v2:dependency-target",
      "sourceNodeId": "file:xcxh5w:nexususer-cs",
      "kind": "dependency-target",
      "targetPath": "Ebook (NexusReader.Domain.Entities)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "summary": "Unresolved dependency target Ebook (NexusReader.Domain.Entities).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1wrsfpw:dependency-target",
      "sourceNodeId": "file:xcxh5w:nexususer-cs",
      "kind": "dependency-target",
      "targetPath": "QuizResult (NexusReader.Domain.Entities)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/NexusUser.cs",
          "summary": "Unresolved dependency target QuizResult (NexusReader.Domain.Entities).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:f7ti5f:dependency-target",
      "sourceNodeId": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "dependency-target",
      "targetPath": "Pgvector (external package)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
          "summary": "Unresolved dependency target Pgvector (external package).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:99b90l:dependency-target",
      "sourceNodeId": "file:1d4ycw2:semanticknowledgecache-cs",
      "kind": "dependency-target",
      "targetPath": "System.ComponentModel.DataAnnotations (framework)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs",
          "summary": "Unresolved dependency target System.ComponentModel.DataAnnotations (framework).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:flkkqz:dependency-target",
      "sourceNodeId": "file:167q7jt:nexusreader-domain-csproj",
      "kind": "dependency-target",
      "targetPath": "TargetFramework: net10.0 (line 4)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/NexusReader.Domain.csproj",
          "summary": "Unresolved dependency target TargetFramework: net10.0 (line 4).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ryn5zv:dependency-target",
      "sourceNodeId": "file:167q7jt:nexusreader-domain-csproj",
      "kind": "dependency-target",
      "targetPath": "PackageReference: Pgvector (line 11)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/NexusReader.Domain.csproj",
          "summary": "Unresolved dependency target PackageReference: Pgvector (line 11).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1m535uw:dependency-target",
      "sourceNodeId": "file:167q7jt:nexusreader-domain-csproj",
      "kind": "dependency-target",
      "targetPath": "PackageReference: Microsoft.Extensions.Identity.Stores (line 12)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Domain/NexusReader.Domain.csproj",
          "summary": "Unresolved dependency target PackageReference: Microsoft.Extensions.Identity.Stores (line 12).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:15lc1tm:dependency-target",
      "sourceNodeId": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Application/NexusReader.Application.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Application/NexusReader.Application.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1novxvl:dependency-target",
      "sourceNodeId": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Maui.Essentials (nuget)@10.0.20",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj",
          "summary": "Unresolved dependency target Microsoft.Maui.Essentials (nuget)@10.0.20.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1elatch:dependency-target",
      "sourceNodeId": "file:12lov7s:mauiplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions/Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions/Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:qy5nbw:dependency-target",
      "sourceNodeId": "file:12lov7s:mauiplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Maui.Devices (platform API)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "summary": "Unresolved dependency target Microsoft.Maui.Devices (platform API).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:eh9ae0:call-target",
      "sourceNodeId": "method:60f4ut:getdevicecontext",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "MapDeviceType",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 61,
          "summary": "Unresolved call target MapDeviceType in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:31gcz4:call-target",
      "sourceNodeId": "method:60f4ut:getdevicecontext",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "MapOrientation",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 62,
          "summary": "Unresolved call target MapOrientation in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5pyvrl:dependency-target",
      "sourceNodeId": "file:d17zn6:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (interface reference)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (interface reference).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:fsgbon:dependency-target",
      "sourceNodeId": "file:d17zn6:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Maui.Storage (Preferences, SecureStorage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target Microsoft.Maui.Storage (Preferences, SecureStorage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1n5rif9:dependency-target",
      "sourceNodeId": "file:d17zn6:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target FluentResults (Result).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:14mo52j:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "Preferences.Default.Set(key, value)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 14,
          "summary": "external-call: Preferences.Default.Set(key, value)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1kr9h8o:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "Preferences.Default.Get(key, (string?)null)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 27,
          "summary": "external-call: Preferences.Default.Get(key, (string?)null)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:iaz95s:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "Preferences.Default.Get(key, defaultValue)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 52,
          "summary": "external-call: Preferences.Default.Get(key, defaultValue)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1n470aa:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "Preferences.Default.Remove(key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 64,
          "summary": "external-call: Preferences.Default.Remove(key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:kxn7x9:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "await SecureStorage.Default.SetAsync(key, value)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 77,
          "summary": "external-call: await SecureStorage.Default.SetAsync(key, value)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1owtkrk:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "await SecureStorage.Default.GetAsync(key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 90,
          "summary": "external-call: await SecureStorage.Default.GetAsync(key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:14jpd1a:interaction-target",
      "sourceNodeId": "class:jm4wx0:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "SecureStorage.Default.Remove(key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 102,
          "summary": "external-call: SecureStorage.Default.Remove(key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1amow1q:dependency-target",
      "sourceNodeId": "file:r7svsj:dependencyinjection-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:112gl5e:dependency-target",
      "sourceNodeId": "file:r7svsj:dependencyinjection-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Security.Authorization/ProUserHandler.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Security.Authorization/ProUserHandler.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1a0lsd0:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext.cs",
      "targetHint": "AppDbContext (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 36,
          "summary": "Unresolved call target AppDbContext (type) in NexusReader.Data.Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1qfa48h:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddDbContextFactory<T>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 36,
          "summary": "Unresolved call target AddDbContextFactory<T> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:qnp595:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddDbContext<T>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 41,
          "summary": "Unresolved call target AddDbContext<T> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:kw71kk:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddSingleton<QdrantClient>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 57,
          "summary": "Unresolved call target AddSingleton<QdrantClient> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1e9zmi6:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GraphDatabase.Driver",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 61,
          "summary": "Unresolved call target GraphDatabase.Driver in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1s64w8s:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddHangfire",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 66,
          "summary": "Unresolved call target AddHangfire in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:lpwlzz:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddHangfireServer",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 69,
          "summary": "Unresolved call target AddHangfireServer in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15cp2jv:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
      "targetHint": "AiSettings (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 72,
          "summary": "Unresolved call target AiSettings (type) in NexusReader.Infrastructure/Configuration/AiSettings.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:rm4h5e:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Get<T> (IConfigurationSection)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 74,
          "summary": "Unresolved call target Get<T> (IConfigurationSection) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xf24ib:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddResiliencePipeline",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 81,
          "summary": "Unresolved call target AddResiliencePipeline in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:134hl5l:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ShouldHandle predicate",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 85,
          "summary": "Unresolved call target ShouldHandle predicate in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1sopn1x:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddChatClient",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 99,
          "summary": "Unresolved call target AddChatClient in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:err9l6:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AddEmbeddingGenerator",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 105,
          "summary": "Unresolved call target AddEmbeddingGenerator in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:t9z36n:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
      "targetHint": "KnowledgeService (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 112,
          "summary": "Unresolved call target KnowledgeService (type) in NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:19yvsnv:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
      "targetHint": "EpubReaderService (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 113,
          "summary": "Unresolved call target EpubReaderService (type) in NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1quafzl:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
      "targetHint": "EpubMetadataExtractor (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 114,
          "summary": "Unresolved call target EpubMetadataExtractor (type) in NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1en7f0v:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
      "targetHint": "BookStorageService (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 118,
          "summary": "Unresolved call target BookStorageService (type) in NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:72pwa6:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
      "targetHint": "EbookRepository (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 121,
          "summary": "Unresolved call target EbookRepository (type) in NexusReader.Infrastructure/Persistence/EbookRepository.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15p1osa:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
      "targetHint": "SignalRSyncBroadcaster (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 124,
          "summary": "Unresolved call target SignalRSyncBroadcaster (type) in NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:grr5wo:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Security.Authorization/ProUserHandler.cs",
      "targetHint": "ProUserHandler (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 131,
          "summary": "Unresolved call target ProUserHandler (type) in NexusReader.Application.Security.Authorization/ProUserHandler.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10n4wv1:call-target",
      "sourceNodeId": "method:7atrx1:addinfrastructure",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InfrastructureMarker (type)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 132,
          "summary": "Unresolved call target InfrastructureMarker (type) in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:fkfwxl:call-target",
      "sourceNodeId": "method:1c1pgjw:assembly",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "typeof(DependencyInjection).Assembly",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 137,
          "summary": "Unresolved call target typeof(DependencyInjection).Assembly in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:p2lu8n:call-target",
      "sourceNodeId": "method:pslukv:computehash",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "Normalize",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 16,
          "summary": "Unresolved call target Normalize in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7qxs61:interaction-target",
      "sourceNodeId": "class:lvxelt:contenthasher",
      "kind": "interaction-target",
      "targetHint": "var hashBytes = SHA256.HashData(inputBytes) (framework API)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 19,
          "summary": "external-call: var hashBytes = SHA256.HashData(inputBytes) (framework API)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1idwayf:dependency-target",
      "sourceNodeId": "file:38gozs:tokenlimithandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1g088fj:interaction-target",
      "sourceNodeId": "class:dceqku:tokenlimithandler",
      "kind": "interaction-target",
      "targetHint": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 28,
          "summary": "persistence-read: var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:vltt1w:interaction-target",
      "sourceNodeId": "class:dceqku:tokenlimithandler",
      "kind": "interaction-target",
      "targetHint": "context.Succeed(requirement);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 47,
          "summary": "persistence-read: context.Succeed(requirement);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1fs5lso:dependency-target",
      "sourceNodeId": "file:1wvs02p:tokenlimitrequirement-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Authorization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Authorization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18xy44x:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Application/NexusReader.Application.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Application/NexusReader.Application.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:csm8fj:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Data/NexusReader.Data.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Data/NexusReader.Data.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1inai1b:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.App (FrameworkReference)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.App (FrameworkReference).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1wl3lnb:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "GeminiDotnet.Extensions.AI",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target GeminiDotnet.Extensions.AI.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1x6gqi2:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Hangfire.AspNetCore",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Hangfire.AspNetCore.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:9p8nl8:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Hangfire.PostgreSql",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Hangfire.PostgreSql.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1otixm:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Identity.EntityFrameworkCore",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Identity.EntityFrameworkCore.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1nbdc3w:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore.Design",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore.Design.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:11wxvcq:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.EntityFrameworkCore.Sqlite",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.EntityFrameworkCore.Sqlite.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:6h6ofk:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.AI",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.Extensions.AI.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1fd5ajd:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Resilience",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.Extensions.Resilience.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ehg3gc:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Bcl.Memory",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.Bcl.Memory.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:wekk6j:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.ML.Tokenizers",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.ML.Tokenizers.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18r45oh:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Microsoft.ML.Tokenizers.Data.Cl100kBase",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Microsoft.ML.Tokenizers.Data.Cl100kBase.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:98l0wg:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Neo4j.Driver",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Neo4j.Driver.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:4aine9:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Npgsql.EntityFrameworkCore.PostgreSQL",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Npgsql.EntityFrameworkCore.PostgreSQL.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1arsz8o:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Polly",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Polly.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:fzplf2:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Polly.Extensions.Http",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Polly.Extensions.Http.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:145h9zh:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Qdrant.Client",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Qdrant.Client.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:cxahcs:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "Stripe.net",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target Stripe.net.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:nbpz7e:dependency-target",
      "sourceNodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "kind": "dependency-target",
      "targetPath": "VersOne.Epub",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
          "summary": "Unresolved dependency target VersOne.Epub.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1a8t80g:call-target",
      "sourceNodeId": "method:101vezb:findauthorbynameasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "Authors.FirstOrDefaultAsync (Npgsql branch)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 29,
          "summary": "Unresolved call target Authors.FirstOrDefaultAsync (Npgsql branch) in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ged6nf:call-target",
      "sourceNodeId": "method:101vezb:findauthorbynameasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "Authors.FirstOrDefaultAsync (fallback)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 33,
          "summary": "Unresolved call target Authors.FirstOrDefaultAsync (fallback) in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1suxvrt:call-target",
      "sourceNodeId": "method:1dgp7fr:addauthor",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "Authors.Add",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 39,
          "summary": "Unresolved call target Authors.Add in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ob3ud7:call-target",
      "sourceNodeId": "method:vkortc:addebook",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "Ebooks.Add",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 46,
          "summary": "Unresolved call target Ebooks.Add in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:aftwfz:call-target",
      "sourceNodeId": "method:xqcyw0:savechangesasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
      "targetHint": "SaveChangesAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 51,
          "summary": "Unresolved call target SaveChangesAsync in NexusReader.Data/Persistence/AppDbContext.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1bci86y:interaction-target",
      "sourceNodeId": "class:frxocr:ebookrepository",
      "kind": "interaction-target",
      "targetHint": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 22,
          "summary": "persistence-read: public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ks8yhx:interaction-target",
      "sourceNodeId": "class:frxocr:ebookrepository",
      "kind": "interaction-target",
      "targetHint": "_context.Ebooks.Add(ebook);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 46,
          "summary": "persistence-write: _context.Ebooks.Add(ebook);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:v0tlya:dependency-target",
      "sourceNodeId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging (ISyncBroadcaster)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging (ISyncBroadcaster).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ddfjnj:dependency-target",
      "sourceNodeId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Infrastructure.RealTime.SyncHub (referenced hub type)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "summary": "Unresolved dependency target NexusReader.Infrastructure.RealTime.SyncHub (referenced hub type).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:136zfrf:dependency-target",
      "sourceNodeId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.SignalR (IHubContext, Clients.User, SendAsync)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.SignalR (IHubContext, Clients.User, SendAsync).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1smgfwa:call-target",
      "sourceNodeId": "method:115yp5z:broadcastprogressasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 34,
          "summary": "Unresolved call target IHubContext<SyncHub>.Clients.User(...).SendAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1cd76nj:call-target",
      "sourceNodeId": "method:1s8oq59:broadcastingestionprogressasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 59,
          "summary": "Unresolved call target IHubContext<SyncHub>.Clients.User(...).SendAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:yb10mn:interaction-target",
      "sourceNodeId": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "interaction-target",
      "targetHint": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 34,
          "summary": "external-call: .SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:7ilg33:interaction-target",
      "sourceNodeId": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "interaction-target",
      "targetHint": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 34,
          "summary": "external-call: Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1t9lbc2:interaction-target",
      "sourceNodeId": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "interaction-target",
      "targetHint": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 59,
          "summary": "external-call: .SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:kss05k:interaction-target",
      "sourceNodeId": "class:7rymm7:signalrsyncbroadcaster",
      "kind": "interaction-target",
      "targetHint": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 59,
          "summary": "external-call: Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:dbs3hu:dependency-target",
      "sourceNodeId": "file:47d4sb:synchub-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.Sync",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.Sync.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:16crk4v:call-target",
      "sourceNodeId": "method:1gkzz9r:updateprogress",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Commands.Sync",
      "targetHint": "UpdateReadingProgressCommand (ctor)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 24,
          "summary": "Unresolved call target UpdateReadingProgressCommand (ctor) in NexusReader.Application.Commands.Sync.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1sfqks3:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 21,
          "summary": "persistence-read: var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:lmelii:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 24,
          "summary": "persistence-read: await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1dpzx9c:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "var userId = Context.UserIdentifier;",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 30,
          "summary": "persistence-read: var userId = Context.UserIdentifier;",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:maydcv:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 33,
          "summary": "persistence-read: await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:103s891:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 43,
          "summary": "persistence-read: await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ts5omd:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 33,
          "summary": "external-call: Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:u0mqhe:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "await base.OnConnectedAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 35,
          "summary": "external-call: await base.OnConnectedAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1qw4zqv:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 43,
          "summary": "external-call: Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:12xuggn:interaction-target",
      "sourceNodeId": "class:154519v:synchub",
      "kind": "interaction-target",
      "targetHint": "await base.OnDisconnectedAsync(exception)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 45,
          "summary": "external-call: await base.OnDisconnectedAsync(exception)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1vbp8bw:dependency-target",
      "sourceNodeId": "file:13phiik:billingservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence/AppDbContext.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:oe4mqu:dependency-target",
      "sourceNodeId": "file:13phiik:billingservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities/SubscriptionPlan",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities/SubscriptionPlan.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1t4t4b3:dependency-target",
      "sourceNodeId": "file:13phiik:billingservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IBillingService",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services/IBillingService.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:s78d1v:dependency-target",
      "sourceNodeId": "file:13phiik:billingservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Infrastructure/Configuration/StripeSettings",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "summary": "Unresolved dependency target NexusReader.Infrastructure/Configuration/StripeSettings.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:jsmstp:call-target",
      "sourceNodeId": "method:1ctlycb:handlesubscriptionupdatedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain.Entities/SubscriptionPlan",
      "targetHint": "FreeName (static property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 43,
          "summary": "Unresolved call target FreeName (static property) in NexusReader.Domain.Entities/SubscriptionPlan.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:y7wf8y:call-target",
      "sourceNodeId": "method:1ctlycb:handlesubscriptionupdatedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Configuration/StripeSettings",
      "targetHint": "ProProductId/BasicProductId/FreeProductId (property access)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 46,
          "summary": "Unresolved call target ProProductId/BasicProductId/FreeProductId (property access) in NexusReader.Infrastructure/Configuration/StripeSettings.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1a2iojd:call-target",
      "sourceNodeId": "method:1ctlycb:handlesubscriptionupdatedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext",
      "targetHint": "SubscriptionPlans.FirstOrDefaultAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 62,
          "summary": "Unresolved call target SubscriptionPlans.FirstOrDefaultAsync in NexusReader.Data.Persistence/AppDbContext.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1p70858:call-target",
      "sourceNodeId": "method:174nry:handlesubscriptiondeletedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Domain.Entities/SubscriptionPlan",
      "targetHint": "FreeName (static property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 98,
          "summary": "Unresolved call target FreeName (static property) in NexusReader.Domain.Entities/SubscriptionPlan.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1vyek1g:call-target",
      "sourceNodeId": "method:174nry:handlesubscriptiondeletedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext",
      "targetHint": "SubscriptionPlans.FirstOrDefaultAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 98,
          "summary": "Unresolved call target SubscriptionPlans.FirstOrDefaultAsync in NexusReader.Data.Persistence/AppDbContext.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:rn7bsb:interaction-target",
      "sourceNodeId": "class:11gdjq4:billingservice",
      "kind": "interaction-target",
      "targetHint": "var user = await _userManager.FindByEmailAsync(customerEmail);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 36,
          "summary": "persistence-read: var user = await _userManager.FindByEmailAsync(customerEmail);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:13nkcv8:interaction-target",
      "sourceNodeId": "class:11gdjq4:billingservice",
      "kind": "interaction-target",
      "targetHint": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 74,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1a3pyvg:interaction-target",
      "sourceNodeId": "class:11gdjq4:billingservice",
      "kind": "interaction-target",
      "targetHint": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 110,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:13z7ym1:dependency-target",
      "sourceNodeId": "file:14qnurl:bookstorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IBookStorageService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IBookStorageService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:b5psb8:dependency-target",
      "sourceNodeId": "file:14qnurl:bookstorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Hosting (IWebHostEnvironment)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Hosting (IWebHostEnvironment).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1p1xq63:call-target",
      "sourceNodeId": "method:mpmpcx:saveebookasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveEbookAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 22,
          "summary": "Unresolved call target SaveEbookAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1a9m2p:call-target",
      "sourceNodeId": "method:mpmpcx:saveebookasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "EnsureDirectoryExists",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 28,
          "summary": "Unresolved call target EnsureDirectoryExists in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:zjmxe8:call-target",
      "sourceNodeId": "method:1o0t990:savecoverasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveCoverAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 47,
          "summary": "Unresolved call target SaveCoverAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:wakoep:call-target",
      "sourceNodeId": "method:1o0t990:savecoverasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "EnsureDirectoryExists",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 53,
          "summary": "Unresolved call target EnsureDirectoryExists in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:vghzo7:dependency-target",
      "sourceNodeId": "file:d3gg9l:epubmetadataextractor-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IEpubMetadataExtractor.cs (interface implemented)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions/Services/IEpubMetadataExtractor.cs (interface implemented).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1p3e3rm:dependency-target",
      "sourceNodeId": "file:d3gg9l:epubmetadataextractor-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs (returned DTO model)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "summary": "Unresolved dependency target NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs (returned DTO model).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18lf8r5:dependency-target",
      "sourceNodeId": "file:q4k94a:epubreaderservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence (AppDbContext/Ebooks)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence (AppDbContext/Ebooks).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:wr1tz7:dependency-target",
      "sourceNodeId": "file:q4k94a:epubreaderservice-cs",
      "kind": "dependency-target",
      "targetPath": "VersOne.Epub (EpubReader, EpubNavigationItemRef)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "summary": "Unresolved dependency target VersOne.Epub (EpubReader, EpubNavigationItemRef).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:xgwv1j:dependency-target",
      "sourceNodeId": "file:q4k94a:epubreaderservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "summary": "Unresolved dependency target FluentResults (Result).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pbjm7m:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ResolvePath",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 54,
          "summary": "Unresolved call target ResolvePath in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:sd20r:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "FindTitleInNavigation",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 77,
          "summary": "Unresolved call target FindTitleInNavigation in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10vtji3:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ExtractParagraphs",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 88,
          "summary": "Unresolved call target ExtractParagraphs in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:p2zvza:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SanitizeParagraph",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 91,
          "summary": "Unresolved call target SanitizeParagraph in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:fsn6r:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CountWords",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 96,
          "summary": "Unresolved call target CountWords in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:19zzvhz:call-target",
      "sourceNodeId": "method:bamm0e:getepubcontentasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CreateAiTrigger",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 101,
          "summary": "Unresolved call target CreateAiTrigger in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:o3cgod:call-target",
      "sourceNodeId": "method:12jssth:findtitleinnavigation",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "FindTitleInNavigation",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 198,
          "summary": "Unresolved call target FindTitleInNavigation in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1qm31wz:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "var ebook = await context.Ebooks",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 41,
          "summary": "persistence-read: var ebook = await context.Ebooks",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1tbpd8k:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 77,
          "summary": "persistence-read: var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:tivg13:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 186,
          "summary": "persistence-read: private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1vbv9lo:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 198,
          "summary": "persistence-read: var childTitle = FindTitleInNavigation(item.NestedItems, filePath);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:tdlw7z:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 62,
          "summary": "external-call: Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1jnjwar:interaction-target",
      "sourceNodeId": "class:1ynrixc:epubreaderservice",
      "kind": "interaction-target",
      "targetHint": "chapterRef.ReadContentAsTextAsync() (external EPUB object)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 81,
          "summary": "external-call: chapterRef.ReadContentAsTextAsync() (external EPUB object)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1bfrshg:dependency-target",
      "sourceNodeId": "file:27eki7:knowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI (KnowledgePacket, GroundednessResult, RelevantContext, SemanticSearchResultDto, GroundedResponseDto, CitationDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI (KnowledgePacket, GroundednessResult, RelevantContext, SemanticSearchResultDto, GroundedResponseDto, CitationDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1metm9h:dependency-target",
      "sourceNodeId": "file:27eki7:knowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence/AppDbContext.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence/AppDbContext.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:775try:dependency-target",
      "sourceNodeId": "file:27eki7:knowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain/Entities (KnowledgeUnit, KnowledgeUnitLink, SemanticKnowledgeCache, Ebook)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Domain/Entities (KnowledgeUnit, KnowledgeUnitLink, SemanticKnowledgeCache, Ebook).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7l69tj:call-target",
      "sourceNodeId": "method:4eprgx:knowledgeservice",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "TiktokenTokenizer.CreateForModel",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 58,
          "summary": "Unresolved call target TiktokenTokenizer.CreateForModel in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:47atqf:call-target",
      "sourceNodeId": "method:4eprgx:knowledgeservice",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ResiliencePipelineProvider.GetPipeline",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 51,
          "summary": "Unresolved call target ResiliencePipelineProvider.GetPipeline in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1pjcjv0:call-target",
      "sourceNodeId": "method:1lrpkzo:getknowledgeasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetKnowledgeInternalAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 63,
          "summary": "Unresolved call target GetKnowledgeInternalAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:out96g:call-target",
      "sourceNodeId": "method:1fgpnj9:getgraphdataasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetKnowledgeInternalAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 68,
          "summary": "Unresolved call target GetKnowledgeInternalAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:483118:call-target",
      "sourceNodeId": "method:1025f5z:getsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetKnowledgeInternalAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 73,
          "summary": "Unresolved call target GetKnowledgeInternalAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:qcqfwo:call-target",
      "sourceNodeId": "method:1anyvp0:getknowledgemapasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetKnowledgeInternalAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 78,
          "summary": "Unresolved call target GetKnowledgeInternalAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1c8zyv3:call-target",
      "sourceNodeId": "method:965937:getknowledgeinternalasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
      "targetHint": "ContentHasher.ComputeHash",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 87,
          "summary": "Unresolved call target ContentHasher.ComputeHash in NexusReader.Infrastructure/Helpers/ContentHasher.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:uepcqr:call-target",
      "sourceNodeId": "method:965937:getknowledgeinternalasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ExecuteAiRequestAndCacheAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 112,
          "summary": "Unresolved call target ExecuteAiRequestAndCacheAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16zt9ep:call-target",
      "sourceNodeId": "method:965937:getknowledgeinternalasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 85,
          "summary": "Unresolved call target IDbContextFactory.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:11kkh95:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 151,
          "summary": "Unresolved call target IDbContextFactory.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:a2ye6s:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ResiliencePipeline.ExecuteAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 159,
          "summary": "Unresolved call target ResiliencePipeline.ExecuteAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:e1t5nn:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IChatClient.GetResponseAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 160,
          "summary": "Unresolved call target IChatClient.GetResponseAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:164lber:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "targetHint": "JsonRepairHelper.Repair",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 171,
          "summary": "Unresolved call target JsonRepairHelper.Repair in NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:gc1ktw:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ProcessKnowledgeUnitsAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 202,
          "summary": "Unresolved call target ProcessKnowledgeUnitsAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1qp5h1x:call-target",
      "sourceNodeId": "method:1egheyd:executeairequestandcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "JsonSerializer.Deserialize<KnowledgePacket>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 175,
          "summary": "Unresolved call target JsonSerializer.Deserialize<KnowledgePacket> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:yaascp:call-target",
      "sourceNodeId": "method:yif4p8:processknowledgeunitsasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AppDbContext.KnowledgeUnits",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 234,
          "summary": "Unresolved call target AppDbContext.KnowledgeUnits in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:oqpmyu:call-target",
      "sourceNodeId": "method:6gn0zk:verifygroundednessasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ResiliencePipeline.ExecuteAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 308,
          "summary": "Unresolved call target ResiliencePipeline.ExecuteAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4pitit:call-target",
      "sourceNodeId": "method:6gn0zk:verifygroundednessasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IChatClient.GetResponseAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 309,
          "summary": "Unresolved call target IChatClient.GetResponseAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:lov4bd:call-target",
      "sourceNodeId": "method:6gn0zk:verifygroundednessasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "JsonSerializer.Deserialize<GroundednessResult>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 318,
          "summary": "Unresolved call target JsonSerializer.Deserialize<GroundednessResult> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1pio9ig:call-target",
      "sourceNodeId": "method:1sxv1a4:getrelevantcontextasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IEmbeddingGenerator.GenerateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 332,
          "summary": "Unresolved call target IEmbeddingGenerator.GenerateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jj6suh:call-target",
      "sourceNodeId": "method:1sxv1a4:getrelevantcontextasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QdrantClient.SearchAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 357,
          "summary": "Unresolved call target QdrantClient.SearchAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ty51dz:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IEmbeddingGenerator.GenerateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 390,
          "summary": "Unresolved call target IEmbeddingGenerator.GenerateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:100rhko:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QdrantClient.SearchAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 420,
          "summary": "Unresolved call target QdrantClient.SearchAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:amsncy:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDriver.AsyncSession",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 448,
          "summary": "Unresolved call target IDriver.AsyncSession in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ggzp9w:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "session.ExecuteReadAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 454,
          "summary": "Unresolved call target session.ExecuteReadAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:sbx7fo:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 487,
          "summary": "Unresolved call target IDbContextFactory.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1w8q8su:call-target",
      "sourceNodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "JsonSerializer.Deserialize<Dictionary<string, object>>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 517,
          "summary": "Unresolved call target JsonSerializer.Deserialize<Dictionary<string, object>> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:twfvwd:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IEmbeddingGenerator.GenerateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 559,
          "summary": "Unresolved call target IEmbeddingGenerator.GenerateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10sonyq:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QdrantClient.SearchAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 605,
          "summary": "Unresolved call target QdrantClient.SearchAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:kmloog:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDriver.AsyncSession",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 640,
          "summary": "Unresolved call target IDriver.AsyncSession in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7ruse6:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "session.ExecuteReadAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 648,
          "summary": "Unresolved call target session.ExecuteReadAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:c6stju:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 702,
          "summary": "Unresolved call target IDbContextFactory.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1w5muzt:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ResiliencePipeline.ExecuteAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 740,
          "summary": "Unresolved call target ResiliencePipeline.ExecuteAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:sbu1nc:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
      "targetHint": "JsonRepairHelper.Repair",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 749,
          "summary": "Unresolved call target JsonRepairHelper.Repair in NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1onktry:call-target",
      "sourceNodeId": "method:io0xiq:askquestionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "JsonSerializer.Deserialize<GroundedResponseDto>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 753,
          "summary": "Unresolved call target JsonSerializer.Deserialize<GroundedResponseDto> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10uf8wm:call-target",
      "sourceNodeId": "method:10r1sy2:clearcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IDbContextFactory.CreateDbContextAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 787,
          "summary": "Unresolved call target IDbContextFactory.CreateDbContextAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1wsorul:call-target",
      "sourceNodeId": "method:10r1sy2:clearcacheasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "DbSet.ExecuteDeleteAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 790,
          "summary": "Unresolved call target DbSet.ExecuteDeleteAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:bimks8:call-target",
      "sourceNodeId": "method:1l8c2eg:estimatetokencount",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "Tokenizer.CountTokens",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 804,
          "summary": "Unresolved call target Tokenizer.CountTokens in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:s4gw6p:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 193,
          "summary": "persistence-write: if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:wlmnoi:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": ".Where(u => allCandidateIds.Contains(u.Id))",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 235,
          "summary": "persistence-read: .Where(u => allCandidateIds.Contains(u.Id))",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:kllanj:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "dbContext.KnowledgeUnits.Add(unit);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 248,
          "summary": "persistence-write: dbContext.KnowledgeUnits.Add(unit);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1gilyr5:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "dbContext.KnowledgeUnitLinks.Add(link);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 281,
          "summary": "persistence-write: dbContext.KnowledgeUnitLinks.Add(link);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1jqovd:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 479,
          "summary": "persistence-read: .Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:9tcptu:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": ".Where(e => ebookIds.Contains(e.Id))",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 489,
          "summary": "persistence-read: .Where(e => ebookIds.Contains(e.Id))",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:16685tb:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Answer = \"I cannot answer this based on the provided book context.\",",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 624,
          "summary": "persistence-read: Answer = \"I cannot answer this based on the provided book context.\",",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:gl3zt0:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 659,
          "summary": "persistence-write: relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:lw9jkq:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 673,
          "summary": "persistence-write: relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:4nj3fr:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 687,
          "summary": "persistence-write: relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:a5fihx:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 118,
          "summary": "external-call: awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1258ih7:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "calls _embeddingGenerator.GenerateAsync via retry pipeline",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 332,
          "summary": "external-call: calls _embeddingGenerator.GenerateAsync via retry pipeline",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:jue0lv:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "var filter = new Qdrant.Client.Grpc.Filter();",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 336,
          "summary": "external-call: var filter = new Qdrant.Client.Grpc.Filter();",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:q30n8k:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "filter.Should.Add(new Qdrant.Client.Grpc.Condition",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 337,
          "summary": "external-call: filter.Should.Add(new Qdrant.Client.Grpc.Condition",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:gi8gy3:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Field = new Qdrant.Client.Grpc.FieldCondition",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 339,
          "summary": "external-call: Field = new Qdrant.Client.Grpc.FieldCondition",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:dspfoz:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 342,
          "summary": "external-call: Match = new Qdrant.Client.Grpc.Match { Text = tenantId }",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1m9ex1b:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 350,
          "summary": "external-call: Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:nso9wb:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 354,
          "summary": "external-call: List<Qdrant.Client.Grpc.ScoredPoint> searchResult;",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1p8z85d:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 357,
          "summary": "external-call: calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:8s0x1n:interaction-target",
      "sourceNodeId": "class:1ybxixo:knowledgeservice",
      "kind": "interaction-target",
      "targetHint": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 368,
          "summary": "external-call: searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1yw6a9j:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "System.Net.Http",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target System.Net.Http.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7y0yf6:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Forms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Forms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1y84cqh:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Routing",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Routing.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:mr2f29:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:gzrsya:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web.Virtualization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.Virtualization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18ftg9n:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.JSInterop.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:33rvzl:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Maui",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.Maui.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13i90wc:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1hf8lbu:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1rbh8f8:dependency-target",
      "sourceNodeId": "file:e9w1fz:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Layout",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Layout.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zg2m27:dependency-target",
      "sourceNodeId": "file:62lucr:app-xaml-cs",
      "kind": "dependency-target",
      "targetPath": "MainPage.xaml.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "summary": "Unresolved dependency target MainPage.xaml.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1po6diq:call-target",
      "sourceNodeId": "method:1b26w2r:app",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeComponent",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "line": 7,
          "summary": "Unresolved call target InitializeComponent in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18invr8:call-target",
      "sourceNodeId": "method:1b26w2r:app",
      "kind": "call-target",
      "targetPath": "MainPage.xaml.cs",
      "targetHint": "MainPage (ctor)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "line": 9,
          "summary": "Unresolved call target MainPage (ctor) in MainPage.xaml.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1a9q0pd:dependency-target",
      "sourceNodeId": "file:jg997z:main-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Main.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1t8ink0:dependency-target",
      "sourceNodeId": "file:jg997z:main-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Routing",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Main.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Routing.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zruj1m:dependency-target",
      "sourceNodeId": "file:ua9rra:mainpage-xaml-cs",
      "kind": "dependency-target",
      "targetPath": "MainPage.xaml",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "summary": "Unresolved dependency target MainPage.xaml.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7t590t:call-target",
      "sourceNodeId": "method:6gridz:mainpage",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeComponent",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "line": 7,
          "summary": "Unresolved call target InitializeComponent in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ox6g4z:dependency-target",
      "sourceNodeId": "file:1uay25w:mauiprogram-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "summary": "Unresolved dependency target NexusReader.Application.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:wn9csw:dependency-target",
      "sourceNodeId": "file:1uay25w:mauiprogram-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Infrastructure.Mobile.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "summary": "Unresolved dependency target NexusReader.Infrastructure.Mobile.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1qe7f7c:dependency-target",
      "sourceNodeId": "file:1uay25w:mauiprogram-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1vv11qp:dependency-target",
      "sourceNodeId": "file:1uay25w:mauiprogram-cs",
      "kind": "dependency-target",
      "targetPath": "MediatR",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "summary": "Unresolved dependency target MediatR.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:gx6bb9:call-target",
      "sourceNodeId": "method:hh1uha:createmauiapp",
      "kind": "call-target",
      "targetPath": "NexusReader.Application",
      "targetHint": "AddApplication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "line": 51,
          "summary": "Unresolved call target AddApplication in NexusReader.Application.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1op5xiq:call-target",
      "sourceNodeId": "method:hh1uha:createmauiapp",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.DependencyInjection",
      "targetHint": "Assembly",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "line": 54,
          "summary": "Unresolved call target Assembly in NexusReader.Application.DependencyInjection.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18u42la:dependency-target",
      "sourceNodeId": "file:1670zex:nexusreader-maui-csproj",
      "kind": "dependency-target",
      "targetPath": "PackageReference: Microsoft.Extensions.Logging.Debug@10.0.0 (line 27)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/NexusReader.Maui.csproj",
          "summary": "Unresolved dependency target PackageReference: Microsoft.Extensions.Logging.Debug@10.0.0 (line 27).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1fj5v2o:dependency-target",
      "sourceNodeId": "file:1670zex:nexusreader-maui-csproj",
      "kind": "dependency-target",
      "targetPath": "PackageReference: Microsoft.AspNetCore.Components.WebView.Maui@10.0.20 (line 28)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/NexusReader.Maui.csproj",
          "summary": "Unresolved dependency target PackageReference: Microsoft.AspNetCore.Components.WebView.Maui@10.0.20 (line 28).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:gw4u5p:dependency-target",
      "sourceNodeId": "file:1670zex:nexusreader-maui-csproj",
      "kind": "dependency-target",
      "targetPath": "PackageReference: Microsoft.Maui.Essentials@10.0.20 (line 29)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/NexusReader.Maui.csproj",
          "summary": "Unresolved dependency target PackageReference: Microsoft.Maui.Essentials@10.0.20 (line 29).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pe2r1o:dependency-target",
      "sourceNodeId": "file:1670zex:nexusreader-maui-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj (line 33)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/NexusReader.Maui.csproj",
          "summary": "Unresolved dependency target ../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj (line 33).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:djq06x:dependency-target",
      "sourceNodeId": "file:1670zex:nexusreader-maui-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj (line 34)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/NexusReader.Maui.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj (line 34).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:suah5f:dependency-target",
      "sourceNodeId": "file:p180ke:mainapplication-cs",
      "kind": "dependency-target",
      "targetPath": "MauiProgram.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "summary": "Unresolved dependency target MauiProgram.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13b6ke4:call-target",
      "sourceNodeId": "method:197aset:createmauiapp",
      "kind": "call-target",
      "targetPath": "MauiProgram.cs",
      "targetHint": "CreateMauiApp",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 25,
          "summary": "Unresolved call target CreateMauiApp in MauiProgram.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18ai3fi:dependency-target",
      "sourceNodeId": "file:7ji0h3:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (INativeStorageService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (INativeStorageService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1727912:dependency-target",
      "sourceNodeId": "file:7ji0h3:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Maui.Storage (Preferences, SecureStorage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target Microsoft.Maui.Storage (Preferences, SecureStorage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:l2n0ua:dependency-target",
      "sourceNodeId": "file:7ji0h3:mauistorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "summary": "Unresolved dependency target FluentResults (Result).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1mitumm:interaction-target",
      "sourceNodeId": "class:18xcrf7:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "await SecureStorage.Default.SetAsync(key, value)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 77,
          "summary": "external-call: await SecureStorage.Default.SetAsync(key, value)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:k821qp:interaction-target",
      "sourceNodeId": "class:18xcrf7:mauistorageservice",
      "kind": "interaction-target",
      "targetHint": "await SecureStorage.Default.GetAsync(key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 90,
          "summary": "external-call: await SecureStorage.Default.GetAsync(key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1i16wf6:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "System.Net.Http",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target System.Net.Http.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1lueu9a:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "System.Net.Http.Json",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target System.Net.Http.Json.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18ibovn:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Forms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Forms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:nieozs:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Routing",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Routing.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:nv3wc0:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:3mahc5:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Authorization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Authorization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1915x6y:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web.RenderMode (static)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.RenderMode (static).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1g0hijh:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web.Virtualization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.Virtualization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7zcw2i:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.JSInterop.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:99uieh:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:18spcfz:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Layout",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Layout.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1lar5gv:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Authorization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Authorization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zb53ux:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:qgir0x:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Atoms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Atoms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ajn0c8:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Molecules",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Molecules.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:16z1lno:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Organisms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Organisms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1avoywt:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:xktgtt:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Logging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.Extensions.Logging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:mg2kel:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pjsg27:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1rxy791:dependency-target",
      "sourceNodeId": "file:1molfey:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1mzosp3:call-target",
      "sourceNodeId": "method:4skxop:render-component-markup",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnClick (EventCallback)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "line": 1,
          "summary": "Unresolved call target OnClick (EventCallback) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1p0z3es:call-target",
      "sourceNodeId": "method:j1tqds:handlekeypress",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnSearch.InvokeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 31,
          "summary": "Unresolved call target OnSearch.InvokeAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dtlz91:interaction-target",
      "sourceNodeId": "class:c49vab:nexussearchbox",
      "kind": "interaction-target",
      "targetHint": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 31,
          "summary": "external-call: await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:czqwea:call-target",
      "sourceNodeId": "method:10aseyf:componentrender",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "VariantCssClass",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 1,
          "summary": "Unresolved call target VariantCssClass in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:155aomx:call-target",
      "sourceNodeId": "method:10aseyf:componentrender",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ChildContent",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 2,
          "summary": "Unresolved call target ChildContent in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ty92cj:dependency-target",
      "sourceNodeId": "file:83c16m:aiassistantbubble-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services (IQuizStateService, KnowledgeCoordinator) - referenced via @inject",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services (IQuizStateService, KnowledgeCoordinator) - referenced via @inject.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:3o6zki:dependency-target",
      "sourceNodeId": "file:83c16m:aiassistantbubble-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI (KnowledgePacket) - referenced via using",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI (KnowledgePacket) - referenced via using.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:167r83h:call-target",
      "sourceNodeId": "method:16cvbhq:onparameterssetasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "FetchAndStreamAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 66,
          "summary": "Unresolved call target FetchAndStreamAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:d4ewrz:call-target",
      "sourceNodeId": "method:1bl306q:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "FetchAndStreamAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 77,
          "summary": "Unresolved call target FetchAndStreamAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4o4ap7:call-target",
      "sourceNodeId": "method:9ujebp:fetchandstreamasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "RequestSummaryAndQuizAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 101,
          "summary": "Unresolved call target RequestSummaryAndQuizAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1uzvj3j:call-target",
      "sourceNodeId": "method:1naqltb:handleactionclick",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "RequestQuiz",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 150,
          "summary": "Unresolved call target RequestQuiz in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:d0obx2:interaction-target",
      "sourceNodeId": "file:83c16m:aiassistantbubble-razor",
      "kind": "interaction-target",
      "targetHint": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 101,
          "summary": "external-call: await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1x2o66d:dependency-target",
      "sourceNodeId": "file:108l4jq:groundednessbadge-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.AI",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.AI.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1yxickk:dependency-target",
      "sourceNodeId": "file:108l4jq:groundednessbadge-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:6cb6oe:dependency-target",
      "sourceNodeId": "file:108l4jq:groundednessbadge-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Atoms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Atoms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ose6mk:dependency-target",
      "sourceNodeId": "file:108l4jq:groundednessbadge-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Authorization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Authorization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ro0lk4:call-target",
      "sourceNodeId": "method:mes1h8:onparameterssetasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "RunCheck",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 47,
          "summary": "Unresolved call target RunCheck in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1heq3ju:call-target",
      "sourceNodeId": "method:1nedo1:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "RunCheck",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 58,
          "summary": "Unresolved call target RunCheck in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:44hz6e:call-target",
      "sourceNodeId": "method:xt4lks:runcheck",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "VerifyGroundednessCommand handler",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 71,
          "summary": "Unresolved call target VerifyGroundednessCommand handler in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:e262m7:interaction-target",
      "sourceNodeId": "class:3ugxc0:groundednessbadge",
      "kind": "interaction-target",
      "targetHint": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 69,
          "summary": "persistence-read: var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:nrgd14:interaction-target",
      "sourceNodeId": "class:3ugxc0:groundednessbadge",
      "kind": "interaction-target",
      "targetHint": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 68,
          "summary": "external-call: await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:e58p8m:interaction-target",
      "sourceNodeId": "class:3ugxc0:groundednessbadge",
      "kind": "interaction-target",
      "targetHint": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 71,
          "summary": "external-call: await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1qnt5hh:dependency-target",
      "sourceNodeId": "file:q33ld0:intelligencetoolbar-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions/Services/IKnowledgeService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:hg2k67:dependency-target",
      "sourceNodeId": "file:q33ld0:intelligencetoolbar-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions/Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:14we84l:dependency-target",
      "sourceNodeId": "file:q33ld0:intelligencetoolbar-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components/NavigationManager (framework)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components/NavigationManager (framework).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:2xgh31:call-target",
      "sourceNodeId": "method:1ef8df:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "targetHint": "OnFocusModeChanged (event add)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 50,
          "summary": "Unresolved call target OnFocusModeChanged (event add) in NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:854yi0:call-target",
      "sourceNodeId": "method:1dyzngl:handleclearcache",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
      "targetHint": "ClearCacheAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 57,
          "summary": "Unresolved call target ClearCacheAsync in NexusReader.Application.Abstractions/Services/IKnowledgeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1vsk4w2:call-target",
      "sourceNodeId": "method:68za1u:handlelogout",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IIdentityService.cs",
      "targetHint": "LogoutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 66,
          "summary": "Unresolved call target LogoutAsync in NexusReader.Application.Abstractions/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4foxma:call-target",
      "sourceNodeId": "method:1nyg1j6:dispose",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "targetHint": "OnFocusModeChanged (event remove)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 74,
          "summary": "Unresolved call target OnFocusModeChanged (event remove) in NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:9twudu:interaction-target",
      "sourceNodeId": "class:nsawvo:intelligencetoolbar",
      "kind": "interaction-target",
      "targetHint": "await KnowledgeService.ClearCacheAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 57,
          "summary": "external-call: await KnowledgeService.ClearCacheAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1cqxa9n:interaction-target",
      "sourceNodeId": "class:nsawvo:intelligencetoolbar",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.LogoutAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 66,
          "summary": "external-call: await IdentityService.LogoutAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:qwfvmt:dependency-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Quiz (Quiz DTOs)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Quiz (Quiz DTOs).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:686p0h:dependency-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.Quiz (SubmitAnswerCommand)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.Quiz (SubmitAnswerCommand).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:u2n559:dependency-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IPlatformService, IQuizStateService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IPlatformService, IQuizStateService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zpm7ii:dependency-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "dependency-target",
      "targetPath": "MediatR (IMediator) - external library",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "summary": "Unresolved dependency target MediatR (IMediator) - external library.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:149jext:call-target",
      "sourceNodeId": "method:13emvrm:oninitialized",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QuizService.OnQuizUpdated (event add)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 58,
          "summary": "Unresolved call target QuizService.OnQuizUpdated (event add) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5f31sk:call-target",
      "sourceNodeId": "method:9q9eda:dispose",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QuizService.OnQuizUpdated (event remove)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 65,
          "summary": "Unresolved call target QuizService.OnQuizUpdated (event remove) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1h17smo:call-target",
      "sourceNodeId": "method:cgrv35:selectoptionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "PlatformService.VibrateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 73,
          "summary": "Unresolved call target PlatformService.VibrateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xwqjw3:call-target",
      "sourceNodeId": "method:cgrv35:selectoptionasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Commands.Quiz",
      "targetHint": "SubmitAnswerCommand..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 75,
          "summary": "Unresolved call target SubmitAnswerCommand..ctor in NexusReader.Application.Commands.Quiz.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:a4jvef:call-target",
      "sourceNodeId": "method:cgrv35:selectoptionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IMediator.Send",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 76,
          "summary": "Unresolved call target IMediator.Send in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1msmcsp:call-target",
      "sourceNodeId": "method:cgrv35:selectoptionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "PlatformService.VibrateSuccessAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 81,
          "summary": "Unresolved call target PlatformService.VibrateSuccessAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1hll04e:call-target",
      "sourceNodeId": "method:cgrv35:selectoptionasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "PlatformService.VibrateErrorAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 83,
          "summary": "Unresolved call target PlatformService.VibrateErrorAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:jnv1ge:call-target",
      "sourceNodeId": "method:ty8u23:allquestionsanswered",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QuizService.CurrentQuiz",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 90,
          "summary": "Unresolved call target QuizService.CurrentQuiz in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ai32n7:interaction-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "interaction-target",
      "targetHint": "await PlatformService.VibrateAsync(40)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 73,
          "summary": "external-call: await PlatformService.VibrateAsync(40)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:16bacnb:interaction-target",
      "sourceNodeId": "file:yno7se:knowledgecheck-razor",
      "kind": "interaction-target",
      "targetHint": "var res = await Mediator.Send(cmd)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 76,
          "summary": "external-call: var res = await Mediator.Send(cmd)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:10w72ub:dependency-target",
      "sourceNodeId": "file:1ez5kuw:selectionaipanel-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Models/SelectionCoordinates.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Models/SelectionCoordinates.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ie7r18:call-target",
      "sourceNodeId": "method:1bkauax:generatefullquiz",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CloseAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 93,
          "summary": "Unresolved call target CloseAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:zyw832:interaction-target",
      "sourceNodeId": "class:5wh0z0:selectionaipanel",
      "kind": "interaction-target",
      "targetHint": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 83,
          "summary": "external-call: Awaits Coordinator.RequestSummaryAndQuizAsync(...)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:bj4qwl:interaction-target",
      "sourceNodeId": "class:5wh0z0:selectionaipanel",
      "kind": "interaction-target",
      "targetHint": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 91,
          "summary": "external-call: Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1wlc2qr:interaction-target",
      "sourceNodeId": "class:5wh0z0:selectionaipanel",
      "kind": "interaction-target",
      "targetHint": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 99,
          "summary": "external-call: Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:xutp3w:dependency-target",
      "sourceNodeId": "file:8kve74:bookingestionmodal-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IEpubMetadataExtractor)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IEpubMetadataExtractor).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:cjiz53:dependency-target",
      "sourceNodeId": "file:8kve74:bookingestionmodal-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1pdvb5h:dependency-target",
      "sourceNodeId": "file:8kve74:bookingestionmodal-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.Library (IngestEbookRequest)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.Library (IngestEbookRequest).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1d5dsj5:call-target",
      "sourceNodeId": "method:ujsh2c:closemodal",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "Reset",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 131,
          "summary": "Unresolved call target Reset in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ewrxdq:call-target",
      "sourceNodeId": "method:1ptxaoh:handlefileselected",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ExtractMetadataAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 174,
          "summary": "Unresolved call target ExtractMetadataAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:adir2u:call-target",
      "sourceNodeId": "method:10uf4tt:savetolibrary",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CloseModal",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 223,
          "summary": "Unresolved call target CloseModal in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1uo9v3m:call-target",
      "sourceNodeId": "method:10uf4tt:savetolibrary",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NavigateToBook",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 224,
          "summary": "Unresolved call target NavigateToBook in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18cvbct:interaction-target",
      "sourceNodeId": "class:twnl84:bookingestionmodal",
      "kind": "interaction-target",
      "targetHint": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 183,
          "summary": "persistence-read: ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:143kb:interaction-target",
      "sourceNodeId": "class:twnl84:bookingestionmodal",
      "kind": "interaction-target",
      "targetHint": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 174,
          "summary": "external-call: MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:b3cagp:interaction-target",
      "sourceNodeId": "class:twnl84:bookingestionmodal",
      "kind": "interaction-target",
      "targetHint": "Http.PostAsJsonAsync(\"api/library/ingest\", request)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 216,
          "summary": "external-call: Http.PostAsJsonAsync(\"api/library/ingest\", request)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1j24tii:dependency-target",
      "sourceNodeId": "file:1uvdam9:currentreadingwidget-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:vnh13a:dependency-target",
      "sourceNodeId": "file:1uvdam9:currentreadingwidget-razor",
      "kind": "dependency-target",
      "targetPath": "framework:Microsoft.AspNetCore.Components.NavigationManager",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "summary": "Unresolved dependency target framework:Microsoft.AspNetCore.Components.NavigationManager.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19nu1lk:call-target",
      "sourceNodeId": "method:lwiyp5:render-razor-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "targetHint": "NexusIcon",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 46,
          "summary": "Unresolved call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1krli3s:interaction-target",
      "sourceNodeId": "class:1tn889i:currentreadingwidget",
      "kind": "interaction-target",
      "targetHint": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 76,
          "summary": "external-call: NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:u1e1jv:interaction-target",
      "sourceNodeId": "class:1tn889i:currentreadingwidget",
      "kind": "interaction-target",
      "targetHint": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 62,
          "summary": "external-call: NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:aey9ev:dependency-target",
      "sourceNodeId": "file:1niza9w:globalintelligencepanel-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs (referenced via @using)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "summary": "Unresolved dependency target NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs (referenced via @using).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:xrs7fn:dependency-target",
      "sourceNodeId": "file:1niza9w:globalintelligencepanel-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor (used as child component)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor (used as child component).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:v7y5t4:call-target",
      "sourceNodeId": "method:h9z30t:handlesearch",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnPerformSearch.InvokeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 59,
          "summary": "Unresolved call target OnPerformSearch.InvokeAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ayzqd8:interaction-target",
      "sourceNodeId": "class:cps3pc:globalintelligencepanel",
      "kind": "interaction-target",
      "targetHint": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 59,
          "summary": "external-call: Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1b9p63s:dependency-target",
      "sourceNodeId": "file:jo64ly:knowledgegraph-razor",
      "kind": "dependency-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "summary": "Unresolved dependency target ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:kflf2w:dependency-target",
      "sourceNodeId": "file:jo64ly:knowledgegraph-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1nw5tub:dependency-target",
      "sourceNodeId": "file:jo64ly:knowledgegraph-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IReaderInteractionService.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1fnc75p:dependency-target",
      "sourceNodeId": "file:jo64ly:knowledgegraph-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IFocusModeService.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pxnbrk:call-target",
      "sourceNodeId": "method:1ari3ha:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
      "targetHint": "OnFocusModeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 43,
          "summary": "Unresolved call target OnFocusModeChanged in NexusReader.UI.Shared/Services/IFocusModeService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:9u6o3t:call-target",
      "sourceNodeId": "method:1ari3ha:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnGraphUpdated",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 44,
          "summary": "Unresolved call target OnGraphUpdated in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:kwph20:call-target",
      "sourceNodeId": "method:1ari3ha:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnActiveNodeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 45,
          "summary": "Unresolved call target OnActiveNodeChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7hdicu:call-target",
      "sourceNodeId": "method:1ari3ha:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnLoadingChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 46,
          "summary": "Unresolved call target OnLoadingChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1tm32an:call-target",
      "sourceNodeId": "method:14hlcms:handlegraphupdate",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "clear",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 55,
          "summary": "Unresolved call target clear in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4132f3:call-target",
      "sourceNodeId": "method:14hlcms:handlegraphupdate",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "updateData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 59,
          "summary": "Unresolved call target updateData in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1t03yb9:call-target",
      "sourceNodeId": "method:14hlcms:handlegraphupdate",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "CurrentGraphData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 53,
          "summary": "Unresolved call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:87xiei:call-target",
      "sourceNodeId": "method:16kjevr:handleactivenodechange",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "setActiveNode",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 68,
          "summary": "Unresolved call target setActiveNode in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18xu0uy:call-target",
      "sourceNodeId": "method:1cayj92:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeGraphAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 80,
          "summary": "Unresolved call target InitializeGraphAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:13n5skw:call-target",
      "sourceNodeId": "method:1cayj92:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "CurrentGraphData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 82,
          "summary": "Unresolved call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:z3vcy7:call-target",
      "sourceNodeId": "method:1cayj92:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleGraphUpdate",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 84,
          "summary": "Unresolved call target HandleGraphUpdate in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1uyw1m:call-target",
      "sourceNodeId": "method:1to2smv:initializegraphasync",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "mount",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 93,
          "summary": "Unresolved call target mount in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1torkt6:call-target",
      "sourceNodeId": "method:1to2smv:initializegraphasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "CurrentGraphData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 93,
          "summary": "Unresolved call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ftxrfl:call-target",
      "sourceNodeId": "method:1muyu85:zoomin",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "zoomIn",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 96,
          "summary": "Unresolved call target zoomIn in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:3gfwx2:call-target",
      "sourceNodeId": "method:1l8ubet:zoomout",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "zoomOut",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 97,
          "summary": "Unresolved call target zoomOut in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jt5jy8:call-target",
      "sourceNodeId": "method:129w46l:zoomreset",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "zoomReset",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 98,
          "summary": "Unresolved call target zoomReset in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xrm9ho:call-target",
      "sourceNodeId": "method:66cucs:onnodeclicked",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService",
      "targetHint": "NotifyNodeSelected",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 103,
          "summary": "Unresolved call target NotifyNodeSelected in NexusReader.UI.Shared/Services/IReaderInteractionService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:tch553:call-target",
      "sourceNodeId": "method:qjg1lv:handlefocussimulation",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
      "targetHint": "IsFocusModeActive",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 117,
          "summary": "Unresolved call target IsFocusModeActive in NexusReader.UI.Shared/Services/IFocusModeService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10ntjpd:call-target",
      "sourceNodeId": "method:qjg1lv:handlefocussimulation",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "pause",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 118,
          "summary": "Unresolved call target pause in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:itxtwm:call-target",
      "sourceNodeId": "method:qjg1lv:handlefocussimulation",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "resume",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 120,
          "summary": "Unresolved call target resume in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1k2kio7:call-target",
      "sourceNodeId": "method:lvsss7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
      "targetHint": "OnFocusModeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 127,
          "summary": "Unresolved call target OnFocusModeChanged in NexusReader.UI.Shared/Services/IFocusModeService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7i1fw4:call-target",
      "sourceNodeId": "method:lvsss7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnGraphUpdated",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 128,
          "summary": "Unresolved call target OnGraphUpdated in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15rvkdv:call-target",
      "sourceNodeId": "method:lvsss7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnActiveNodeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 129,
          "summary": "Unresolved call target OnActiveNodeChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dic9oz:call-target",
      "sourceNodeId": "method:lvsss7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
      "targetHint": "OnLoadingChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 130,
          "summary": "Unresolved call target OnLoadingChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1t911zi:call-target",
      "sourceNodeId": "method:lvsss7:disposeasync",
      "kind": "call-target",
      "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
      "targetHint": "unmount",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 136,
          "summary": "Unresolved call target unmount in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:jkm9kh:dependency-target",
      "sourceNodeId": "file:3sb16d:readercanvas-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader (GetReaderPageQuery)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader (GetReaderPageQuery).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:cq9olp:dependency-target",
      "sourceNodeId": "file:3sb16d:readercanvas-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services (Coordinator, NavigationService, InteractionService, SyncService, ThemeService, FocusMode, IReaderInteractionService, IReaderNavigationService, IThemeService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services (Coordinator, NavigationService, InteractionService, SyncService, ThemeService, FocusMode, IReaderInteractionService, IReaderNavigationService, IThemeService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:enb05n:dependency-target",
      "sourceNodeId": "file:3sb16d:readercanvas-razor",
      "kind": "dependency-target",
      "targetPath": "MediatR (Mediator.Send)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "Unresolved dependency target MediatR (Mediator.Send).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13b9ppw:dependency-target",
      "sourceNodeId": "file:3sb16d:readercanvas-razor",
      "kind": "dependency-target",
      "targetPath": "JS modules: ./_content/NexusReader.UI.Shared/js/selectionHandler.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "Unresolved dependency target JS modules: ./_content/NexusReader.UI.Shared/js/selectionHandler.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:15dna4j:dependency-target",
      "sourceNodeId": "file:3sb16d:readercanvas-razor",
      "kind": "dependency-target",
      "targetPath": "JS modules: ./_content/NexusReader.UI.Shared/js/readerObserver.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "summary": "Unresolved dependency target JS modules: ./_content/NexusReader.UI.Shared/js/readerObserver.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1pzrppn:call-target",
      "sourceNodeId": "method:1pp2oro:oninitializedasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ClearAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 73,
          "summary": "Unresolved call target ClearAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10oitcb:call-target",
      "sourceNodeId": "method:etczkb:onparameterssetasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LoadChapterAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 85,
          "summary": "Unresolved call target LoadChapterAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4b0xv6:call-target",
      "sourceNodeId": "method:1k0kfjg:onnavigationchanged",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LoadChapterAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 93,
          "summary": "Unresolved call target LoadChapterAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1tl9hd6:call-target",
      "sourceNodeId": "method:qspmus:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InitializeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 101,
          "summary": "Unresolved call target InitializeAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:dmm0s1:call-target",
      "sourceNodeId": "method:qspmus:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ProcessFullPageAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 105,
          "summary": "Unresolved call target ProcessFullPageAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ihgsmk:call-target",
      "sourceNodeId": "method:qspmus:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeObserverAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 112,
          "summary": "Unresolved call target InitializeObserverAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:er2dng:call-target",
      "sourceNodeId": "method:qspmus:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeSelectionListenerAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 113,
          "summary": "Unresolved call target InitializeSelectionListenerAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:y0aono:call-target",
      "sourceNodeId": "method:w4053o:initializeselectionlistenerasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InvokeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 121,
          "summary": "Unresolved call target InvokeAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:49c7i:call-target",
      "sourceNodeId": "method:w4053o:initializeselectionlistenerasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InvokeVoidAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 122,
          "summary": "Unresolved call target InvokeVoidAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:oww71w:call-target",
      "sourceNodeId": "method:1l7jj8x:initializeobserverasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InvokeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 134,
          "summary": "Unresolved call target InvokeAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ovldpq:call-target",
      "sourceNodeId": "method:1l7jj8x:initializeobserverasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InvokeVoidAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 135,
          "summary": "Unresolved call target InvokeVoidAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:cztvzm:call-target",
      "sourceNodeId": "method:1p3f1im:handleblockreached",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnBlockReachedAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 146,
          "summary": "Unresolved call target OnBlockReachedAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:14tu9s8:call-target",
      "sourceNodeId": "method:1p3f1im:handleblockreached",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UpdateProgressAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 152,
          "summary": "Unresolved call target UpdateProgressAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1clpv1o:call-target",
      "sourceNodeId": "method:o7fqko:handlesyncprogressreceived",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ScrollToNodeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 165,
          "summary": "Unresolved call target ScrollToNodeAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ecszuf:call-target",
      "sourceNodeId": "method:1ejbaxq:handlescrollrequested",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ScrollToNodeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 189,
          "summary": "Unresolved call target ScrollToNodeAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:rtadvy:call-target",
      "sourceNodeId": "method:1nqcmix:handlehighlightrequested",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Delay",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 196,
          "summary": "Unresolved call target Delay in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ojxmgq:call-target",
      "sourceNodeId": "method:ero6bp:loadchapterasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetAuthenticationStateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 218,
          "summary": "Unresolved call target GetAuthenticationStateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ykg7qx:call-target",
      "sourceNodeId": "method:ero6bp:loadchapterasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Send",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 230,
          "summary": "Unresolved call target Send in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xmlex9:call-target",
      "sourceNodeId": "method:ero6bp:loadchapterasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UpdateMetadataAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 234,
          "summary": "Unresolved call target UpdateMetadataAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1o4rxvq:call-target",
      "sourceNodeId": "method:ero6bp:loadchapterasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "ProcessFullPageAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 238,
          "summary": "Unresolved call target ProcessFullPageAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:z4tu8x:call-target",
      "sourceNodeId": "method:105vz8s:scrolltonodeasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "InvokeVoidAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 256,
          "summary": "Unresolved call target InvokeVoidAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1290kf4:interaction-target",
      "sourceNodeId": "class:scmh0y:readercanvas",
      "kind": "interaction-target",
      "targetHint": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 219,
          "summary": "persistence-read: var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:wp86mw:interaction-target",
      "sourceNodeId": "class:scmh0y:readercanvas",
      "kind": "interaction-target",
      "targetHint": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 244,
          "summary": "persistence-read: StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1bfvgf7:interaction-target",
      "sourceNodeId": "class:scmh0y:readercanvas",
      "kind": "interaction-target",
      "targetHint": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 121,
          "summary": "external-call: JS.InvokeAsync('import', './_content/.../selectionHandler.js')",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:raqq7q:interaction-target",
      "sourceNodeId": "class:scmh0y:readercanvas",
      "kind": "interaction-target",
      "targetHint": "JS.InvokeAsync('import', './_content/.../readerObserver.js')",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 134,
          "summary": "external-call: JS.InvokeAsync('import', './_content/.../readerObserver.js')",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1nywp45:interaction-target",
      "sourceNodeId": "class:scmh0y:readercanvas",
      "kind": "interaction-target",
      "targetHint": "JS.InvokeVoidAsync('eval', script)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 256,
          "summary": "external-call: JS.InvokeVoidAsync('eval', script)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1rzriwn:call-target",
      "sourceNodeId": "method:tmysty:render-razor-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "ChapterTitle (property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 13,
          "summary": "Unresolved call target ChapterTitle (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1di6ghi:call-target",
      "sourceNodeId": "method:tmysty:render-razor-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "CurrentChapterIndex (property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 8,
          "summary": "Unresolved call target CurrentChapterIndex (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16fjgig:call-target",
      "sourceNodeId": "method:tmysty:render-razor-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "TotalChapters (property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 14,
          "summary": "Unresolved call target TotalChapters (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:i4ys3x:call-target",
      "sourceNodeId": "method:tmysty:render-razor-markup",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CalculateProgress",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 23,
          "summary": "Unresolved call target CalculateProgress in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:t92f63:call-target",
      "sourceNodeId": "method:1se6qsi:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "OnNavigationChanged (event)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 36,
          "summary": "Unresolved call target OnNavigationChanged (event) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1bw9ru3:call-target",
      "sourceNodeId": "method:1se6qsi:oninitialized",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleNavigationChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 36,
          "summary": "Unresolved call target HandleNavigationChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:19qrwhc:call-target",
      "sourceNodeId": "method:1ak3em3:calculateprogress",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "TotalChapters (property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 46,
          "summary": "Unresolved call target TotalChapters (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:gjvq32:call-target",
      "sourceNodeId": "method:1ak3em3:calculateprogress",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "CurrentChapterIndex (property)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 47,
          "summary": "Unresolved call target CurrentChapterIndex (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:pfzdgu:call-target",
      "sourceNodeId": "method:150wzsg:dispose",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
      "targetHint": "OnNavigationChanged (event)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 52,
          "summary": "Unresolved call target OnNavigationChanged (event) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:g6ml2y:dependency-target",
      "sourceNodeId": "file:82rsqa:redirecttologin-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.NavigationManager (framework)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.NavigationManager (framework).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7whfp5:interaction-target",
      "sourceNodeId": "file:82rsqa:redirecttologin-razor",
      "kind": "interaction-target",
      "targetHint": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 6,
          "summary": "external-call: var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1kmwu7d:interaction-target",
      "sourceNodeId": "file:82rsqa:redirecttologin-razor",
      "kind": "interaction-target",
      "targetHint": "NavigationManager.NavigateTo(\"/account/login\")",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 9,
          "summary": "external-call: NavigationManager.NavigateTo(\"/account/login\")",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1xw5601:interaction-target",
      "sourceNodeId": "file:82rsqa:redirecttologin-razor",
      "kind": "interaction-target",
      "targetHint": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 13,
          "summary": "external-call: NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:y2nch2:dependency-target",
      "sourceNodeId": "file:18yxzxe:authlayout-razor",
      "kind": "dependency-target",
      "targetPath": "_content/NexusReader.UI.Shared/css/nexus-auth.css",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor",
          "summary": "Unresolved dependency target _content/NexusReader.UI.Shared/css/nexus-auth.css.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:p5ugql:dependency-target",
      "sourceNodeId": "file:1ain1yo:mainhublayout-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1cxjpm5:dependency-target",
      "sourceNodeId": "file:1ain1yo:mainhublayout-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components/Molecules/NexusIcon.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components/Molecules/NexusIcon.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:17ozmdg:call-target",
      "sourceNodeId": "method:p4hxqo:oninitializedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IIdentityService.cs",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 103,
          "summary": "Unresolved call target GetProfileAsync in NexusReader.Application.Abstractions.Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15jy0tl:call-target",
      "sourceNodeId": "method:64smty:handlelogout",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/IIdentityService.cs",
      "targetHint": "LogoutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 109,
          "summary": "Unresolved call target LogoutAsync in NexusReader.Application.Abstractions.Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1mo1qcu:interaction-target",
      "sourceNodeId": "class:vf4020:mainhublayout",
      "kind": "interaction-target",
      "targetHint": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 98,
          "summary": "external-call: await AuthStateProvider.GetAuthenticationStateAsync() (framework call)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:6dhnk4:interaction-target",
      "sourceNodeId": "class:vf4020:mainhublayout",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.GetProfileAsync(); (project service)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 103,
          "summary": "external-call: await IdentityService.GetProfileAsync(); (project service)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:n5pbzn:interaction-target",
      "sourceNodeId": "class:vf4020:mainhublayout",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.LogoutAsync(); (project service)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 109,
          "summary": "external-call: await IdentityService.LogoutAsync(); (project service)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1k8045k:interaction-target",
      "sourceNodeId": "class:vf4020:mainhublayout",
      "kind": "interaction-target",
      "targetHint": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 110,
          "summary": "external-call: NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:8w58w3:dependency-target",
      "sourceNodeId": "file:mm1vnb:readerlayout-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (PlatformService.GetDeviceContext usage)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (PlatformService.GetDeviceContext usage).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1usd2nx:dependency-target",
      "sourceNodeId": "file:mm1vnb:readerlayout-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services (FocusMode, IQuizStateService referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services (FocusMode, IQuizStateService referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:i1g7hm:dependency-target",
      "sourceNodeId": "file:mm1vnb:readerlayout-razor",
      "kind": "dependency-target",
      "targetPath": "IJSRuntime (JS interop import - framework)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "summary": "Unresolved dependency target IJSRuntime (JS interop import - framework).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1f9xkjs:call-target",
      "sourceNodeId": "method:11o3hgs:oninitialized",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "FocusMode.OnFocusModeChanged += HandleUpdate (event subscribe)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 75,
          "summary": "Unresolved call target FocusMode.OnFocusModeChanged += HandleUpdate (event subscribe) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1y5usm8:call-target",
      "sourceNodeId": "method:11o3hgs:oninitialized",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QuizService.OnQuizUpdated += HandleUpdate (event subscribe)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 76,
          "summary": "Unresolved call target QuizService.OnQuizUpdated += HandleUpdate (event subscribe) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1wlsy2d:call-target",
      "sourceNodeId": "method:11o3hgs:oninitialized",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (unknown path)",
      "targetHint": "GetDeviceContext",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 78,
          "summary": "Unresolved call target GetDeviceContext in NexusReader.Application.Abstractions.Services (unknown path).",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:na1slj:call-target",
      "sourceNodeId": "method:zb4rdj:dispose",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "FocusMode.OnFocusModeChanged -= HandleUpdate (event unsubscribe)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 113,
          "summary": "Unresolved call target FocusMode.OnFocusModeChanged -= HandleUpdate (event unsubscribe) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:vgq4n3:call-target",
      "sourceNodeId": "method:zb4rdj:dispose",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "QuizService.OnQuizUpdated -= HandleUpdate (event unsubscribe)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 114,
          "summary": "Unresolved call target QuizService.OnQuizUpdated -= HandleUpdate (event unsubscribe) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1d3viv2:interaction-target",
      "sourceNodeId": "class:15qe4r2:readerlayout",
      "kind": "interaction-target",
      "targetHint": "if (context.IsSuccess)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 79,
          "summary": "persistence-read: if (context.IsSuccess)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:xu9xg:interaction-target",
      "sourceNodeId": "class:15qe4r2:readerlayout",
      "kind": "interaction-target",
      "targetHint": "_isMobile = context.Value.DeviceType switch",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 81,
          "summary": "persistence-read: _isMobile = context.Value.DeviceType switch",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:pm6tjt:interaction-target",
      "sourceNodeId": "class:15qe4r2:readerlayout",
      "kind": "interaction-target",
      "targetHint": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 99,
          "summary": "external-call: await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:xv35el:dependency-target",
      "sourceNodeId": "file:uzi8zg:reconnectmodal-razor",
      "kind": "dependency-target",
      "targetPath": "_content/NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor",
          "summary": "Unresolved dependency target _content/NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:46ci3r:dependency-target",
      "sourceNodeId": "file:1wkle85:reconnectmodal-razor-js",
      "kind": "dependency-target",
      "targetPath": "unknown (Blazor interop and browser DOM APIs referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "summary": "Unresolved dependency target unknown (Blazor interop and browser DOM APIs referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:8mchpn:call-target",
      "sourceNodeId": "method:15ixuxd:module-init",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "handleReconnectStateChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 3,
          "summary": "Unresolved call target handleReconnectStateChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5x2oyh:call-target",
      "sourceNodeId": "method:15ixuxd:module-init",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "retry",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 6,
          "summary": "Unresolved call target retry in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10kruh6:call-target",
      "sourceNodeId": "method:15ixuxd:module-init",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "resume",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 9,
          "summary": "Unresolved call target resume in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:m2lwlj:call-target",
      "sourceNodeId": "method:1n08b99:handlereconnectstatechanged",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "reconnectModal.showModal",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 13,
          "summary": "Unresolved call target reconnectModal.showModal in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:psft95:call-target",
      "sourceNodeId": "method:1n08b99:handlereconnectstatechanged",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "reconnectModal.close",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 15,
          "summary": "Unresolved call target reconnectModal.close in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1yjs71m:call-target",
      "sourceNodeId": "method:1n08b99:handlereconnectstatechanged",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "retryWhenDocumentBecomesVisible",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 17,
          "summary": "Unresolved call target retryWhenDocumentBecomesVisible in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:wqabat:call-target",
      "sourceNodeId": "method:1n08b99:handlereconnectstatechanged",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "location.reload",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 19,
          "summary": "Unresolved call target location.reload in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:3slkrk:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "document.removeEventListener",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 24,
          "summary": "Unresolved call target document.removeEventListener in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ulfrfc:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Blazor.reconnect",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 31,
          "summary": "Unresolved call target Blazor.reconnect in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1sxr8qr:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Blazor.resumeCircuit",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 35,
          "summary": "Unresolved call target Blazor.resumeCircuit in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1drhmzn:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "location.reload",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 37,
          "summary": "Unresolved call target location.reload in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:f7i5v:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "reconnectModal.close",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 39,
          "summary": "Unresolved call target reconnectModal.close in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1pbt6sg:call-target",
      "sourceNodeId": "method:mdoq3y:retry",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "retryWhenDocumentBecomesVisible",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 44,
          "summary": "Unresolved call target retryWhenDocumentBecomesVisible in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:66tchk:call-target",
      "sourceNodeId": "method:12nt8as:resume",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "Blazor.resumeCircuit",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 50,
          "summary": "Unresolved call target Blazor.resumeCircuit in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:11ky44a:call-target",
      "sourceNodeId": "method:12nt8as:resume",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "location.reload",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 52,
          "summary": "Unresolved call target location.reload in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1q5jveu:call-target",
      "sourceNodeId": "method:12nt8as:resume",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "reconnectModal.classList.replace",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 55,
          "summary": "Unresolved call target reconnectModal.classList.replace in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1w3gmn3:call-target",
      "sourceNodeId": "method:1js2qbs:retrywhendocumentbecomesvisible",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "retry",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 61,
          "summary": "Unresolved call target retry in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16a6v9o:dependency-target",
      "sourceNodeId": "file:69lwdf:nexusreader-ui-shared-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Application/NexusReader.Application.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Application/NexusReader.Application.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1mredk8:dependency-target",
      "sourceNodeId": "file:csf9l7:login-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService (injected)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IIdentityService (injected).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ikwmja:dependency-target",
      "sourceNodeId": "file:csf9l7:login-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.NavigationManager (injected)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.NavigationManager (injected).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ggy5i1:dependency-target",
      "sourceNodeId": "file:csf9l7:login-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop.IJSRuntime (injected)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "summary": "Unresolved dependency target Microsoft.JSInterop.IJSRuntime (injected).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:leo7bm:dependency-target",
      "sourceNodeId": "file:csf9l7:login-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Atoms.NexusIcon (used in markup)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Atoms.NexusIcon (used in markup).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1b7ud7n:call-target",
      "sourceNodeId": "method:uwsk5z:handlelogin",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "LoginAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 133,
          "summary": "Unresolved call target LoginAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:nialgy:interaction-target",
      "sourceNodeId": "class:1qurvhs:login",
      "kind": "interaction-target",
      "targetHint": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 141,
          "summary": "persistence-read: _errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:181g12z:interaction-target",
      "sourceNodeId": "class:1qurvhs:login",
      "kind": "interaction-target",
      "targetHint": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 133,
          "summary": "external-call: Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards).",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:112phtm:interaction-target",
      "sourceNodeId": "class:1qurvhs:login",
      "kind": "interaction-target",
      "targetHint": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 137,
          "summary": "external-call: Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call).",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1hcxrsz:dependency-target",
      "sourceNodeId": "file:11crtur:profile-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:11cptso:dependency-target",
      "sourceNodeId": "file:11crtur:profile-razor",
      "kind": "dependency-target",
      "targetPath": "UserProfileDto (referenced model)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "summary": "Unresolved dependency target UserProfileDto (referenced model).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ctw7yr:call-target",
      "sourceNodeId": "method:hkgxib:render-markup",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CalculateProgress",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 55,
          "summary": "Unresolved call target CalculateProgress in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1o2g49e:call-target",
      "sourceNodeId": "method:hkgxib:render-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
      "targetHint": "NexusIcon",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 44,
          "summary": "Unresolved call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:sd5ygw:call-target",
      "sourceNodeId": "method:z1n8tn:oninitializedasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 113,
          "summary": "Unresolved call target GetProfileAsync in NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:m82hyv:call-target",
      "sourceNodeId": "method:1jxczws:handlelogout",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "targetHint": "LogoutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 135,
          "summary": "Unresolved call target LogoutAsync in NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1gsymmw:interaction-target",
      "sourceNodeId": "file:11crtur:profile-razor",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.GetProfileAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 113,
          "summary": "external-call: await IdentityService.GetProfileAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1il3ph9:interaction-target",
      "sourceNodeId": "file:11crtur:profile-razor",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.LogoutAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 135,
          "summary": "external-call: await IdentityService.LogoutAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:tp8933:dependency-target",
      "sourceNodeId": "file:1hn70tz:register-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1rtaa2f:call-target",
      "sourceNodeId": "method:mj67eu:handleregister",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "targetHint": "RegisterAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 91,
          "summary": "Unresolved call target RegisterAsync in NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1r49zo3:call-target",
      "sourceNodeId": "method:mj67eu:handleregister",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "targetHint": "LoginAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 94,
          "summary": "Unresolved call target LoginAsync in NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1cgrf4i:interaction-target",
      "sourceNodeId": "file:1hn70tz:register-razor",
      "kind": "interaction-target",
      "targetHint": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 107,
          "summary": "persistence-read: _errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1tsa04x:interaction-target",
      "sourceNodeId": "file:1hn70tz:register-razor",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.RegisterAsync(email, password)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 91,
          "summary": "external-call: await IdentityService.RegisterAsync(email, password)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:nopu59:interaction-target",
      "sourceNodeId": "file:1hn70tz:register-razor",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.LoginAsync(email, password)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 94,
          "summary": "external-call: await IdentityService.LoginAsync(email, password)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:8wct9i:dependency-target",
      "sourceNodeId": "file:1b5rrku:dashboard-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1m34u60:call-target",
      "sourceNodeId": "method:lqrlha:oninitializedasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "line": 92,
          "summary": "Unresolved call target GetProfileAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1w4tpao:interaction-target",
      "sourceNodeId": "class:140cn9s:dashboard",
      "kind": "interaction-target",
      "targetHint": "await IdentityService.GetProfileAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "line": 92,
          "summary": "external-call: await IdentityService.GetProfileAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:hm9zau:dependency-target",
      "sourceNodeId": "file:h6mj95:home-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:tjm5ul:dependency-target",
      "sourceNodeId": "file:h6mj95:home-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Components/ReaderCanvas.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Components/ReaderCanvas.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ftsewk:call-target",
      "sourceNodeId": "method:p5ejmn:onparameterssetasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 55,
          "summary": "Unresolved call target GetProfileAsync in NexusReader.UI.Shared/Services/IIdentityService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:116y6m9:call-target",
      "sourceNodeId": "method:6vyv4w:handlenodeselected",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Components/ReaderCanvas.razor",
      "targetHint": "ScrollToNodeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 88,
          "summary": "Unresolved call target ScrollToNodeAsync in NexusReader.UI.Shared/Components/ReaderCanvas.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ld2maq:call-target",
      "sourceNodeId": "method:99k8q7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
      "targetHint": "OnQuizRequested - event unsubscription",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 102,
          "summary": "Unresolved call target OnQuizRequested - event unsubscription in NexusReader.UI.Shared/Services/IQuizStateService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:dhtaal:call-target",
      "sourceNodeId": "method:99k8q7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
      "targetHint": "OnFocusModeChanged - event unsubscription",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 103,
          "summary": "Unresolved call target OnFocusModeChanged - event unsubscription in NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:40zgiz:call-target",
      "sourceNodeId": "method:99k8q7:disposeasync",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Components/ReaderCanvas.razor",
      "targetHint": "Dispose/interop cleanup (via JS module)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 108,
          "summary": "Unresolved call target Dispose/interop cleanup (via JS module) in NexusReader.UI.Shared/Components/ReaderCanvas.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ibwum9:dependency-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions/Services/IKnowledgeService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13ddis3:dependency-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI/GroundedResponseDto.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI/GroundedResponseDto.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dm6nyz:dependency-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI/CitationDto.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI/CitationDto.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:s8sq3y:dependency-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User/LastReadBookDto.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User/LastReadBookDto.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:17572gj:call-target",
      "sourceNodeId": "method:91tjy5:handlekeyup",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "AskQuestionAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 404,
          "summary": "Unresolved call target AskQuestionAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:k85jvs:call-target",
      "sourceNodeId": "method:c84ulg:askquestionasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
      "targetHint": "AskQuestionAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 425,
          "summary": "Unresolved call target AskQuestionAsync in NexusReader.Application.Abstractions/Services/IKnowledgeService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:11npc0r:interaction-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "interaction-target",
      "targetHint": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 434,
          "summary": "persistence-read: Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\",",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1wagwxf:interaction-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "interaction-target",
      "targetHint": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 392,
          "summary": "external-call: await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1to7exj:interaction-target",
      "sourceNodeId": "file:1kjntt:intelligence-razor",
      "kind": "interaction-target",
      "targetHint": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 425,
          "summary": "external-call: await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:sx2pqg:dependency-target",
      "sourceNodeId": "file:1uhcs2l:library-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User (LastReadBookDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User (LastReadBookDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:10akmek:dependency-target",
      "sourceNodeId": "file:1uhcs2l:library-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Services/IReaderNavigationService.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1qemq3p:dependency-target",
      "sourceNodeId": "file:1uhcs2l:library-razor",
      "kind": "dependency-target",
      "targetPath": "BookIngestionModal component (markup bind at line 23)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "summary": "Unresolved dependency target BookIngestionModal component (markup bind at line 23).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1g7s3zb:dependency-target",
      "sourceNodeId": "file:1uhcs2l:library-razor",
      "kind": "dependency-target",
      "targetPath": "NexusButton component (uses OnClick at line 17)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "summary": "Unresolved dependency target NexusButton component (uses OnClick at line 17).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:fkkw23:call-target",
      "sourceNodeId": "method:bktx49:onafterrenderasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LoadBooksAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 515,
          "summary": "Unresolved call target LoadBooksAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:14z0mrx:call-target",
      "sourceNodeId": "method:1ffpsuv:refreshlibrary",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LoadBooksAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 546,
          "summary": "Unresolved call target LoadBooksAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:iaaoqf:call-target",
      "sourceNodeId": "method:8gksn2:openbook",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService",
      "targetHint": "NavigateToBook",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 551,
          "summary": "Unresolved call target NavigateToBook in NexusReader.UI.Shared/Services/IReaderNavigationService.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1n18eoi:interaction-target",
      "sourceNodeId": "class:g9nkgg:library",
      "kind": "interaction-target",
      "targetHint": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 526,
          "summary": "external-call: await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1vo8drk:dependency-target",
      "sourceNodeId": "file:13jb3vh:notfound-razor",
      "kind": "dependency-target",
      "targetPath": "Components/NexusIcon.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/NotFound.razor",
          "summary": "Unresolved dependency target Components/NexusIcon.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1hwjdmc:dependency-target",
      "sourceNodeId": "file:13jb3vh:notfound-razor",
      "kind": "dependency-target",
      "targetPath": "Components/NexusTypography.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/NotFound.razor",
          "summary": "Unresolved dependency target Components/NexusTypography.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:iw5qrz:dependency-target",
      "sourceNodeId": "file:13jb3vh:notfound-razor",
      "kind": "dependency-target",
      "targetPath": "Layouts/MainHubLayout.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/NotFound.razor",
          "summary": "Unresolved dependency target Layouts/MainHubLayout.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:11ba5xx:dependency-target",
      "sourceNodeId": "file:1sm6kjd:routes-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/RedirectToLogin.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/RedirectToLogin.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:144g471:dependency-target",
      "sourceNodeId": "file:1sm6kjd:routes-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Layouts/MainHubLayout.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Layouts/MainHubLayout.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1vq65vu:dependency-target",
      "sourceNodeId": "file:1sm6kjd:routes-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared/Components/NexusIcon.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared/Components/NexusIcon.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1f2vk8v:call-target",
      "sourceNodeId": "method:1bnazn2:render-component-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/RedirectToLogin.razor",
      "targetHint": "RedirectToLogin",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 7,
          "summary": "Unresolved call target RedirectToLogin in NexusReader.UI.Shared/RedirectToLogin.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:tq0ur7:call-target",
      "sourceNodeId": "method:1bnazn2:render-component-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Layouts/MainHubLayout.razor",
      "targetHint": "MainHubLayout",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 5,
          "summary": "Unresolved call target MainHubLayout in NexusReader.UI.Shared/Layouts/MainHubLayout.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1r4ovr6:call-target",
      "sourceNodeId": "method:1bnazn2:render-component-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Pages/NotFound.razor",
      "targetHint": "NotFound",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 13,
          "summary": "Unresolved call target NotFound in NexusReader.UI.Shared/Pages/NotFound.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:oz0xm:call-target",
      "sourceNodeId": "method:1bnazn2:render-component-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Components/NexusIcon.razor",
      "targetHint": "NexusIcon",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 21,
          "summary": "Unresolved call target NexusIcon in NexusReader.UI.Shared/Components/NexusIcon.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1cnyy5q:dependency-target",
      "sourceNodeId": "file:1953stk:focusmodeservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop (IJSRuntime)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "summary": "Unresolved dependency target Microsoft.JSInterop (IJSRuntime).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:12d84gu:dependency-target",
      "sourceNodeId": "file:1953stk:focusmodeservice-cs",
      "kind": "dependency-target",
      "targetPath": "IFocusModeService (consumer interface)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "summary": "Unresolved dependency target IFocusModeService (consumer interface).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:12ho2u8:call-target",
      "sourceNodeId": "method:1094u9:initializeasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IJSRuntime.InvokeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 20,
          "summary": "Unresolved call target IJSRuntime.InvokeAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1yx28bi:call-target",
      "sourceNodeId": "method:1094u9:initializeasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnFocusModeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 24,
          "summary": "Unresolved call target OnFocusModeChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:147cark:call-target",
      "sourceNodeId": "method:439s8m:toggleasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnFocusModeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 36,
          "summary": "Unresolved call target OnFocusModeChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1i0mp08:call-target",
      "sourceNodeId": "method:439s8m:toggleasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IJSRuntime.InvokeVoidAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 40,
          "summary": "Unresolved call target IJSRuntime.InvokeVoidAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15ublz0:dependency-target",
      "sourceNodeId": "file:b8uv8h:identityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IIdentityService) -> unknown file",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IIdentityService) -> unknown file.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:erngyf:dependency-target",
      "sourceNodeId": "file:b8uv8h:identityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User (UserProfileDto) -> unknown file",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User (UserProfileDto) -> unknown file.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:prgnl:dependency-target",
      "sourceNodeId": "file:b8uv8h:identityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Constants (StorageKeys) -> unknown file",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Constants (StorageKeys) -> unknown file.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1l6y7u4:dependency-target",
      "sourceNodeId": "file:b8uv8h:identityservice-cs",
      "kind": "dependency-target",
      "targetPath": "INativeStorageService -> unknown file",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "Unresolved dependency target INativeStorageService -> unknown file.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:tu6i2d:dependency-target",
      "sourceNodeId": "file:b8uv8h:identityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusAuthenticationStateProvider -> unknown file",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "summary": "Unresolved dependency target NexusAuthenticationStateProvider -> unknown file.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1v3p4g4:call-target",
      "sourceNodeId": "method:b6asoe:loginasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 77,
          "summary": "Unresolved call target GetProfileAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1u6whi4:call-target",
      "sourceNodeId": "method:b6asoe:loginasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.SaveSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 67,
          "summary": "Unresolved call target INativeStorageService.SaveSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7bj2q1:call-target",
      "sourceNodeId": "method:b6asoe:loginasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.ClearCache",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 74,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.ClearCache in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1atdq4u:call-target",
      "sourceNodeId": "method:b6asoe:loginasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnStateInvalidated.Invoke",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 75,
          "summary": "Unresolved call target OnStateInvalidated.Invoke in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1e40o4e:call-target",
      "sourceNodeId": "method:b6asoe:loginasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 87,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:r45bnc:call-target",
      "sourceNodeId": "method:1i33wis:logoutasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.SaveSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 111,
          "summary": "Unresolved call target INativeStorageService.SaveSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7cdvii:call-target",
      "sourceNodeId": "method:1i33wis:logoutasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnStateInvalidated.Invoke",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 118,
          "summary": "Unresolved call target OnStateInvalidated.Invoke in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:wlkdyl:call-target",
      "sourceNodeId": "method:1i33wis:logoutasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.ClearCache",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 119,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.ClearCache in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1h591k0:call-target",
      "sourceNodeId": "method:1i33wis:logoutasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.NotifyUserLogout",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 120,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.NotifyUserLogout in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:iwmd6s:call-target",
      "sourceNodeId": "method:1u6514u:getprofileasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetProfileInternalAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 143,
          "summary": "Unresolved call target GetProfileInternalAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:wkcuys:call-target",
      "sourceNodeId": "method:nyrl9z:getprofileinternalasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogoutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 169,
          "summary": "Unresolved call target LogoutAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:kf4wfl:call-target",
      "sourceNodeId": "method:nyrl9z:getprofileinternalasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.SaveSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 179,
          "summary": "Unresolved call target INativeStorageService.SaveSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1wraerh:call-target",
      "sourceNodeId": "method:nyrl9z:getprofileinternalasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 185,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10fc8rp:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.GetSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 206,
          "summary": "Unresolved call target INativeStorageService.GetSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:19pszpm:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.SaveSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 218,
          "summary": "Unresolved call target INativeStorageService.SaveSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:y9kokj:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.ClearCache",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 225,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.ClearCache in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1gkugkk:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnStateInvalidated.Invoke",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 226,
          "summary": "Unresolved call target OnStateInvalidated.Invoke in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:qhvr5q:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetProfileAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 228,
          "summary": "Unresolved call target GetProfileAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1gvn8f0:call-target",
      "sourceNodeId": "method:nb75z9:refreshtokenasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 238,
          "summary": "Unresolved call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:159kzo2:interaction-target",
      "sourceNodeId": "class:vgua1e:identityservice",
      "kind": "interaction-target",
      "targetHint": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 37,
          "summary": "external-call: Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:sdsrv:interaction-target",
      "sourceNodeId": "class:vgua1e:identityservice",
      "kind": "interaction-target",
      "targetHint": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 165,
          "summary": "external-call: HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1qta35c:interaction-target",
      "sourceNodeId": "class:vgua1e:identityservice",
      "kind": "interaction-target",
      "targetHint": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 211,
          "summary": "external-call: Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1jlnh09:dependency-target",
      "sourceNodeId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Graph (GraphDataDto referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Graph (GraphDataDto referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dl3x0o:interaction-target",
      "sourceNodeId": "class:1y1hevk:iknowledgegraphservice",
      "kind": "interaction-target",
      "targetHint": "Implementation should trigger OnGraphUpdated after updating state.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 15,
          "summary": "event-publish: Implementation should trigger OnGraphUpdated after updating state.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:awm461:interaction-target",
      "sourceNodeId": "class:1y1hevk:iknowledgegraphservice",
      "kind": "interaction-target",
      "targetHint": "Implementation should trigger OnActiveNodeChanged with nodeId after change.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 16,
          "summary": "event-publish: Implementation should trigger OnActiveNodeChanged with nodeId after change.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1un8r5w:interaction-target",
      "sourceNodeId": "class:1y1hevk:iknowledgegraphservice",
      "kind": "interaction-target",
      "targetHint": "Implementation should trigger OnLoadingChanged with the new boolean value.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 17,
          "summary": "event-publish: Implementation should trigger OnLoadingChanged with the new boolean value.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:769k9d:interaction-target",
      "sourceNodeId": "class:1y1hevk:iknowledgegraphservice",
      "kind": "interaction-target",
      "targetHint": "Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 18,
          "summary": "event-publish: Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:snluw:dependency-target",
      "sourceNodeId": "file:savadk:iquizstateservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries (QuizDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries (QuizDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1gxq0ae:dependency-target",
      "sourceNodeId": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IKnowledgeService, IKnowledgeGraphService, IQuizStateService, IPlatformService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IKnowledgeService, IKnowledgeGraphService, IQuizStateService, IPlatformService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1wqn20c:dependency-target",
      "sourceNodeId": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services (IReaderInteractionService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services (IReaderInteractionService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:q0frtb:dependency-target",
      "sourceNodeId": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI (GraphDataDto, KnowledgePacket, QuizDto, QuizQuestionDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI (GraphDataDto, KnowledgePacket, QuizDto, QuizQuestionDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:h1mu5i:dependency-target",
      "sourceNodeId": "file:uvydt4:knowledgecoordinator-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Logging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "summary": "Unresolved dependency target Microsoft.Extensions.Logging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:jn8a9a:call-target",
      "sourceNodeId": "method:1b2nffa:knowledgecoordinator",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IReaderInteractionService.OnNodeSelected += HandleNodeSelected",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 41,
          "summary": "Unresolved call target IReaderInteractionService.OnNodeSelected += HandleNodeSelected in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jeqq7f:call-target",
      "sourceNodeId": "method:t1zuul:handlenodeselected",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.CurrentGraphData",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 48,
          "summary": "Unresolved call target IKnowledgeGraphService.CurrentGraphData in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:6y3yrp:call-target",
      "sourceNodeId": "method:t1zuul:handlenodeselected",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleNodeSelected (internal loop logic)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 55,
          "summary": "Unresolved call target HandleNodeSelected (internal loop logic) in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:rs65i9:call-target",
      "sourceNodeId": "method:t1zuul:handlenodeselected",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IReaderInteractionService.RequestScrollToBlock",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 71,
          "summary": "Unresolved call target IReaderInteractionService.RequestScrollToBlock in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:o570ld:call-target",
      "sourceNodeId": "method:t1zuul:handlenodeselected",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IReaderInteractionService.RequestHighlightBlock",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 72,
          "summary": "Unresolved call target IReaderInteractionService.RequestHighlightBlock in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1uj8fas:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogGeneratingGraph",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 80,
          "summary": "Unresolved call target LogGeneratingGraph in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:19qfwar:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.Clear",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 82,
          "summary": "Unresolved call target IKnowledgeGraphService.Clear in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:oerwvi:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.SetLoading",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 83,
          "summary": "Unresolved call target IKnowledgeGraphService.SetLoading in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:u4oqdw:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeService.GetGraphDataAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 87,
          "summary": "Unresolved call target IKnowledgeService.GetGraphDataAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:d4g5ep:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.UpdateGraph",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 93,
          "summary": "Unresolved call target IKnowledgeGraphService.UpdateGraph in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:gv42wu:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnGraphUpdated.Invoke",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 95,
          "summary": "Unresolved call target OnGraphUpdated.Invoke in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1mb4whl:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IPlatformService.VibrateSuccessAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 96,
          "summary": "Unresolved call target IPlatformService.VibrateSuccessAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jethnu:call-target",
      "sourceNodeId": "method:1x9gjeq:processfullpageasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogGraphError",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 102,
          "summary": "Unresolved call target LogGraphError in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:e519rx:call-target",
      "sourceNodeId": "method:1pdmx9l:onblockreachedasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.SetActiveNode",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 109,
          "summary": "Unresolved call target IKnowledgeGraphService.SetActiveNode in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1x8q8gu:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IQuizStateService.SetHydrating",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 114,
          "summary": "Unresolved call target IQuizStateService.SetHydrating in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1l2fji5:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogRequestingSummary",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 115,
          "summary": "Unresolved call target LogRequestingSummary in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:50r37w:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeService.GetSummaryAndQuizAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 118,
          "summary": "Unresolved call target IKnowledgeService.GetSummaryAndQuizAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xmjhl6:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "QuizQuestionDto..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 123,
          "summary": "Unresolved call target QuizQuestionDto..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:aq6gt7:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IQuizStateService.SetQuiz",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 126,
          "summary": "Unresolved call target IQuizStateService.SetQuiz in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:138ieal:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IPlatformService.VibrateSuccessAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 127,
          "summary": "Unresolved call target IPlatformService.VibrateSuccessAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:jzoxi8:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogSummaryWarning",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 131,
          "summary": "Unresolved call target LogSummaryWarning in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10k0xq2:call-target",
      "sourceNodeId": "method:2y4xzb:requestsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "LogSummaryError",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 136,
          "summary": "Unresolved call target LogSummaryError in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1wzgphe:call-target",
      "sourceNodeId": "method:b6ndo3:clearasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IKnowledgeGraphService.Clear",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 147,
          "summary": "Unresolved call target IKnowledgeGraphService.Clear in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:aqqz88:call-target",
      "sourceNodeId": "method:b6ndo3:clearasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IQuizStateService.SetQuiz",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 148,
          "summary": "Unresolved call target IQuizStateService.SetQuiz in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:e4ysnj:call-target",
      "sourceNodeId": "method:1wlwqp0:dispose",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IReaderInteractionService.OnNodeSelected -= HandleNodeSelected",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 153,
          "summary": "Unresolved call target IReaderInteractionService.OnNodeSelected -= HandleNodeSelected in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:14hsy43:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 51,
          "summary": "persistence-read: var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:9p5jul:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 55,
          "summary": "persistence-read: var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1gdw0l4:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 59,
          "summary": "persistence-read: var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1tot29h:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "calls interaction service to scroll and highlight target block",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 71,
          "summary": "external-call: calls interaction service to scroll and highlight target block",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:195fh9x:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 87,
          "summary": "external-call: await knowledgeService.GetGraphDataAsync(fullContent, tenantId)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:lfjasv:interaction-target",
      "sourceNodeId": "class:1cca8vk:knowledgecoordinator",
      "kind": "interaction-target",
      "targetHint": "await knowledgeService.GetSummaryAndQuizAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 118,
          "summary": "external-call: await knowledgeService.GetSummaryAndQuizAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:6acjld:dependency-target",
      "sourceNodeId": "file:q6pxzf:knowledgegraphservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Graph (GraphDataDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Graph (GraphDataDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:l8ktpm:dependency-target",
      "sourceNodeId": "file:q6pxzf:knowledgegraphservice-cs",
      "kind": "dependency-target",
      "targetPath": "IKnowledgeGraphService (interface - not in this file)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "summary": "Unresolved dependency target IKnowledgeGraphService (interface - not in this file).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:120p162:call-target",
      "sourceNodeId": "method:b27zpe:updategraph",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnLoadingChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 19,
          "summary": "Unresolved call target OnLoadingChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:nqd2ct:call-target",
      "sourceNodeId": "method:b27zpe:updategraph",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnGraphUpdated",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 20,
          "summary": "Unresolved call target OnGraphUpdated in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:6929sq:call-target",
      "sourceNodeId": "method:1ii06co:setactivenode",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnActiveNodeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 27,
          "summary": "Unresolved call target OnActiveNodeChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1d66hoy:call-target",
      "sourceNodeId": "method:90e1ug:setloading",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnLoadingChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 33,
          "summary": "Unresolved call target OnLoadingChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1m63l2b:call-target",
      "sourceNodeId": "method:ekp9ov:clear",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnGraphUpdated",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 41,
          "summary": "Unresolved call target OnGraphUpdated in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1lb90p4:dependency-target",
      "sourceNodeId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services/INativeStorageService.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1dgxmnh:dependency-target",
      "sourceNodeId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Constants/StorageKeys.cs",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Constants/StorageKeys.cs.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7781p2:call-target",
      "sourceNodeId": "method:13yeu7e:getauthenticationstateasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
      "targetHint": "GetSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 37,
          "summary": "Unresolved call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ec7s11:call-target",
      "sourceNodeId": "method:13yeu7e:getauthenticationstateasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CreateState",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 49,
          "summary": "Unresolved call target CreateState in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:k68nw4:call-target",
      "sourceNodeId": "method:1csperg:notifyuserauthentication",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CreateState",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 108,
          "summary": "Unresolved call target CreateState in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ivbye2:interaction-target",
      "sourceNodeId": "class:1yjf0sw:nexusauthenticationstateprovider",
      "kind": "interaction-target",
      "targetHint": "await _storageService.GetSecureString(TokenKey)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 37,
          "summary": "external-call: await _storageService.GetSecureString(TokenKey)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:nkii1s:interaction-target",
      "sourceNodeId": "class:1yjf0sw:nexusauthenticationstateprovider",
      "kind": "interaction-target",
      "targetHint": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 43,
          "summary": "external-call: await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:lw79ao:dependency-target",
      "sourceNodeId": "file:3xx07l:quizstateservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Quiz (provides QuizDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Quiz (provides QuizDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1w0ibsg:dependency-target",
      "sourceNodeId": "file:3xx07l:quizstateservice-cs",
      "kind": "dependency-target",
      "targetPath": "IQuizStateService (interface implemented, file not in scope)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "summary": "Unresolved dependency target IQuizStateService (interface implemented, file not in scope).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:sgvk0u:call-target",
      "sourceNodeId": "method:8psub5:requestquiz",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnQuizRequested (invoke)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 18,
          "summary": "Unresolved call target OnQuizRequested (invoke) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1egtwca:call-target",
      "sourceNodeId": "method:o6n51:setquiz",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnQuizUpdated (invoke)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 27,
          "summary": "Unresolved call target OnQuizUpdated (invoke) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1hcmv1v:call-target",
      "sourceNodeId": "method:gisz9i:sethydrating",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnQuizUpdated (invoke)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 33,
          "summary": "Unresolved call target OnQuizUpdated (invoke) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1cm0tw4:call-target",
      "sourceNodeId": "method:13pj2z1:markquizasseen",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "OnQuizUpdated (invoke)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 40,
          "summary": "Unresolved call target OnQuizUpdated (invoke) in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5ny7vi:dependency-target",
      "sourceNodeId": "file:1jnstne:readerinteractionservice-cs",
      "kind": "dependency-target",
      "targetPath": "IReaderInteractionService (interface, not defined in this file)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "summary": "Unresolved dependency target IReaderInteractionService (interface, not defined in this file).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1fir695:dependency-target",
      "sourceNodeId": "file:1jnstne:readerinteractionservice-cs",
      "kind": "dependency-target",
      "targetPath": "SelectionCoordinates (type, referenced but not declared here)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "summary": "Unresolved dependency target SelectionCoordinates (type, referenced but not declared here).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:33g61b:call-target",
      "sourceNodeId": "method:qegcuf:notifynodeselected",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnNodeSelected",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 12,
          "summary": "Unresolved call target OnNodeSelected in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:12jxtai:call-target",
      "sourceNodeId": "method:nvgthi:requestscrolltoblock",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnScrollToBlockRequested",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 17,
          "summary": "Unresolved call target OnScrollToBlockRequested in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:zz75qd:call-target",
      "sourceNodeId": "method:1om56u0:requesthighlightblock",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnHighlightBlockRequested",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 22,
          "summary": "Unresolved call target OnHighlightBlockRequested in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dmnpxy:call-target",
      "sourceNodeId": "method:15ros9m:notifytextselected",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnTextSelected",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 27,
          "summary": "Unresolved call target OnTextSelected in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dlt07x:dependency-target",
      "sourceNodeId": "file:1aunxq2:readernavigationservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components (NavigationManager)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components (NavigationManager).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1xs8wx:call-target",
      "sourceNodeId": "method:l29i6z:gotochapter",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "NotifyNavigationChangedAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 26,
          "summary": "Unresolved call target NotifyNavigationChangedAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:8k298x:call-target",
      "sourceNodeId": "method:1jsmnk6:gotonextchapter",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GoToChapter",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 33,
          "summary": "Unresolved call target GoToChapter in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:18mqycz:call-target",
      "sourceNodeId": "method:1lzew1d:gotopreviouschapter",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GoToChapter",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 41,
          "summary": "Unresolved call target GoToChapter in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16fqicv:call-target",
      "sourceNodeId": "method:tx9z61:updatemetadataasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "NotifyNavigationChangedAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 54,
          "summary": "Unresolved call target NotifyNavigationChangedAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1no0soz:call-target",
      "sourceNodeId": "method:rb5d4b:notifynavigationchangedasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "handler()",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 78,
          "summary": "Unresolved call target handler() in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:qpytye:interaction-target",
      "sourceNodeId": "class:1baxnes:readernavigationservice",
      "kind": "interaction-target",
      "targetHint": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 62,
          "summary": "external-call: _navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:10uas86:interaction-target",
      "sourceNodeId": "class:1baxnes:readernavigationservice",
      "kind": "interaction-target",
      "targetHint": "await handler() — invokes subscriber code (external to this service)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 78,
          "summary": "external-call: await handler() — invokes subscriber code (external to this service)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:lnbdsv:dependency-target",
      "sourceNodeId": "file:1la6lrw:syncservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:xf6pav:dependency-target",
      "sourceNodeId": "file:1la6lrw:syncservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.SignalR.Client",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.SignalR.Client.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:ofw1tj:dependency-target",
      "sourceNodeId": "file:1la6lrw:syncservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.Extensions.Logging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "summary": "Unresolved dependency target Microsoft.Extensions.Logging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dxqwhl:call-target",
      "sourceNodeId": "method:r2rlv7:initializeasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "GetSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 36,
          "summary": "Unresolved call target GetSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1eu3rn0:call-target",
      "sourceNodeId": "method:r2rlv7:initializeasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnProgressReceived",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 53,
          "summary": "Unresolved call target OnProgressReceived in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1b6k3t3:call-target",
      "sourceNodeId": "method:1w7mi8p:updateprogressasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "InitializeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 85,
          "summary": "Unresolved call target InitializeAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1k9vuzk:call-target",
      "sourceNodeId": "method:1oqk0x0:iasyncdisposable-disposeasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "DisposeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 114,
          "summary": "Unresolved call target DisposeAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:fglrce:interaction-target",
      "sourceNodeId": "class:1jwtkwo:syncservice",
      "kind": "interaction-target",
      "targetHint": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 89,
          "summary": "external-call: await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:k2ym2b:interaction-target",
      "sourceNodeId": "class:1jwtkwo:syncservice",
      "kind": "interaction-target",
      "targetHint": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 89,
          "summary": "external-call: Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1u6oe4q:dependency-target",
      "sourceNodeId": "file:i1pwrm:themeservice-cs",
      "kind": "dependency-target",
      "targetPath": "unknown (IThemeService referenced but implementation/interface file not in this snippet)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "summary": "Unresolved dependency target unknown (IThemeService referenced but implementation/interface file not in this snippet).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:v3fr6i:call-target",
      "sourceNodeId": "method:1fcqnzv:toggletheme",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "OnThemeChanged",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "line": 11,
          "summary": "Unresolved call target OnThemeChanged in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:13tqfjs:dependency-target",
      "sourceNodeId": "file:15km3l4:webstorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (INativeStorageService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (INativeStorageService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19dzkbn:dependency-target",
      "sourceNodeId": "file:15km3l4:webstorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop (IJSRuntime)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "summary": "Unresolved dependency target Microsoft.JSInterop (IJSRuntime).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ue4598:dependency-target",
      "sourceNodeId": "file:15km3l4:webstorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "summary": "Unresolved dependency target FluentResults (Result).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:goqrxi:call-target",
      "sourceNodeId": "method:hj2kxb:saveboolasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 42,
          "summary": "Unresolved call target SaveStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:h6kn8d:call-target",
      "sourceNodeId": "method:ly29k7:savesecurestring",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 71,
          "summary": "Unresolved call target SaveStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1m7ni06:call-target",
      "sourceNodeId": "method:1xwytsy:getsecurestring",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 73,
          "summary": "Unresolved call target GetStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1yjg6nw:call-target",
      "sourceNodeId": "method:1bx0ikl:removesecureasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "RemoveAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 75,
          "summary": "Unresolved call target RemoveAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:zqfpll:interaction-target",
      "sourceNodeId": "class:1uirugg:webstorageservice",
      "kind": "interaction-target",
      "targetHint": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 20,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1oqkmck:interaction-target",
      "sourceNodeId": "class:1uirugg:webstorageservice",
      "kind": "interaction-target",
      "targetHint": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 33,
          "summary": "external-call: _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:115hkr2:interaction-target",
      "sourceNodeId": "class:1uirugg:webstorageservice",
      "kind": "interaction-target",
      "targetHint": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 62,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1v7zs9s:dependency-target",
      "sourceNodeId": "file:17v8pus:authenticationheaderhandler-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (INativeStorageService, IIdentityService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (INativeStorageService, IIdentityService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1frvbdk:dependency-target",
      "sourceNodeId": "file:17v8pus:authenticationheaderhandler-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components (NavigationManager)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components (NavigationManager).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:185x3vf:dependency-target",
      "sourceNodeId": "file:17v8pus:authenticationheaderhandler-cs",
      "kind": "dependency-target",
      "targetPath": "IServiceProvider (DI resolution)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "summary": "Unresolved dependency target IServiceProvider (DI resolution).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1dv4q1s:call-target",
      "sourceNodeId": "method:17fop7p:sendasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "INativeStorageService.GetSecureString",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 47,
          "summary": "Unresolved call target INativeStorageService.GetSecureString in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:m7b2b4:call-target",
      "sourceNodeId": "method:17fop7p:sendasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IIdentityService.RefreshTokenAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 78,
          "summary": "Unresolved call target IIdentityService.RefreshTokenAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:13aa5ye:call-target",
      "sourceNodeId": "method:17fop7p:sendasync",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IIdentityService.LogoutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 87,
          "summary": "Unresolved call target IIdentityService.LogoutAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:cdkxbh:call-target",
      "sourceNodeId": "method:17fop7p:sendasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CloneHttpRequestMessageAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 93,
          "summary": "Unresolved call target CloneHttpRequestMessageAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:dhpayi:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 27,
          "summary": "external-call: protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:em137p:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "Calls INativeStorageService.GetSecureString to obtain JWT",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 47,
          "summary": "external-call: Calls INativeStorageService.GetSecureString to obtain JWT",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:s1379e:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "var response = await base.SendAsync(request, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 55,
          "summary": "external-call: var response = await base.SendAsync(request, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:vl9u9l:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "Delegates to base.SendAsync to perform network call",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 55,
          "summary": "external-call: Delegates to base.SendAsync to perform network call",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ka6gmw:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "identityService.RefreshTokenAsync(); if success, re-read stored token",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 78,
          "summary": "external-call: identityService.RefreshTokenAsync(); if success, re-read stored token",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1yuzqr3:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "identityService.LogoutAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 87,
          "summary": "external-call: identityService.LogoutAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:91bcb5:interaction-target",
      "sourceNodeId": "class:jvil15:authenticationheaderhandler",
      "kind": "interaction-target",
      "targetHint": "return await base.SendAsync(newRequest, cancellationToken);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 95,
          "summary": "external-call: return await base.SendAsync(newRequest, cancellationToken);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1p6gvo9:dependency-target",
      "sourceNodeId": "file:1wvgol7:nexusreader-web-client-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Application/NexusReader.Application.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/NexusReader.Web.Client.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Application/NexusReader.Application.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1pjx28h:dependency-target",
      "sourceNodeId": "file:1wvgol7:nexusreader-web-client-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/NexusReader.Web.Client.csproj",
          "summary": "Unresolved dependency target ../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1m5plzr:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:139ww2k:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:63zwue:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:4v4uhg:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:12jz1hz:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1g18eba:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Messaging",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Messaging.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1bj0cmy:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Domain.Entities",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Domain.Entities.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:m3i6r:dependency-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.WebAssembly.Hosting",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.WebAssembly.Hosting.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:h9xqg7:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "WebAssemblyHostBuilder.CreateDefault",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 15,
          "summary": "Unresolved call target WebAssemblyHostBuilder.CreateDefault in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1i197q2:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ThrowingDbContextFactory..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 49,
          "summary": "Unresolved call target ThrowingDbContextFactory..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:185ga2x:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ThrowingEmbeddingGenerator..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 50,
          "summary": "Unresolved call target ThrowingEmbeddingGenerator..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1cadlie:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ThrowingBookStorageService..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 51,
          "summary": "Unresolved call target ThrowingBookStorageService..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:16fktdf:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ThrowingEbookRepository..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 52,
          "summary": "Unresolved call target ThrowingEbookRepository..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:igkgco:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "ThrowingSyncBroadcaster..ctor",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 53,
          "summary": "Unresolved call target ThrowingSyncBroadcaster..ctor in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ijl9jf:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "NexusReader.Application",
      "targetHint": "ServiceCollectionExtensions.AddApplication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 55,
          "summary": "Unresolved call target ServiceCollectionExtensions.AddApplication in NexusReader.Application.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1xv9ime:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "WebAssemblyHostBuilder.Build",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 59,
          "summary": "Unresolved call target WebAssemblyHostBuilder.Build in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:d2qhgm:call-target",
      "sourceNodeId": "method:1c802h4:program-top-level",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "WebAssemblyHost.RunAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 59,
          "summary": "Unresolved call target WebAssemblyHost.RunAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1c1y3m5:interaction-target",
      "sourceNodeId": "file:1dbwiwx:program-cs",
      "kind": "interaction-target",
      "targetHint": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 88,
          "summary": "persistence-read: public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1xp358w:dependency-target",
      "sourceNodeId": "file:hiutf5:wasmepubservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IEpubReader, IEpubMetadataExtractor referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IEpubReader, IEpubMetadataExtractor referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:uc09k6:dependency-target",
      "sourceNodeId": "file:hiutf5:wasmepubservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.Reader (ReaderPageViewModel referenced)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.Reader (ReaderPageViewModel referenced).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:s7k4wp:dependency-target",
      "sourceNodeId": "file:hiutf5:wasmepubservice-cs",
      "kind": "dependency-target",
      "targetPath": "VersOne.Epub (used for local EPUB parsing)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "Unresolved dependency target VersOne.Epub (used for local EPUB parsing).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1qub2x:dependency-target",
      "sourceNodeId": "file:hiutf5:wasmepubservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result/Error used)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "summary": "Unresolved dependency target FluentResults (Result/Error used).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:y49oul:interaction-target",
      "sourceNodeId": "class:veazt0:wasmepubreader",
      "kind": "interaction-target",
      "targetHint": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 25,
          "summary": "external-call: Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:ubjob5:interaction-target",
      "sourceNodeId": "class:veazt0:wasmepubreader",
      "kind": "interaction-target",
      "targetHint": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 28,
          "summary": "external-call: response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:ds2njs:interaction-target",
      "sourceNodeId": "class:veazt0:wasmepubreader",
      "kind": "interaction-target",
      "targetHint": "response.Content.ReadAsStringAsync(cancellationToken)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 32,
          "summary": "external-call: response.Content.ReadAsStringAsync(cancellationToken)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:i7268p:interaction-target",
      "sourceNodeId": "class:veazt0:wasmepubreader",
      "kind": "interaction-target",
      "targetHint": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 49,
          "summary": "external-call: VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference.",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:155j8sa:interaction-target",
      "sourceNodeId": "class:veazt0:wasmepubreader",
      "kind": "interaction-target",
      "targetHint": "bookRef.ReadCoverAsync()",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 52,
          "summary": "external-call: bookRef.ReadCoverAsync()",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:cpzb35:dependency-target",
      "sourceNodeId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IKnowledgeService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IKnowledgeService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1j1sr9u:dependency-target",
      "sourceNodeId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.AI (KnowledgePacket, RelevantContext, GroundednessResult, SemanticSearchResultDto, GroundedResponseDto)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.AI (KnowledgePacket, RelevantContext, GroundednessResult, SemanticSearchResultDto, GroundedResponseDto).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:yqmhny:call-target",
      "sourceNodeId": "method:1jw3y39:getknowledgeasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CallKnowledgeApiAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 19,
          "summary": "Unresolved call target CallKnowledgeApiAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:10doift:call-target",
      "sourceNodeId": "method:wcjzgl:getgraphdataasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CallKnowledgeApiAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 24,
          "summary": "Unresolved call target CallKnowledgeApiAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1aomd4t:call-target",
      "sourceNodeId": "method:jq1xnu:getknowledgemapasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CallKnowledgeApiAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 29,
          "summary": "Unresolved call target CallKnowledgeApiAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1h8ov95:call-target",
      "sourceNodeId": "method:1oz3km6:getsummaryandquizasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "CallKnowledgeApiAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 34,
          "summary": "Unresolved call target CallKnowledgeApiAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:9z33f5:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 45,
          "summary": "persistence-read: return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ley46:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 41,
          "summary": "external-call: Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1f3wgbt:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 60,
          "summary": "external-call: Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1flrr8g:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 80,
          "summary": "external-call: Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1y8e7le:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 100,
          "summary": "external-call: Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:2a4zw:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 120,
          "summary": "external-call: HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1keqoem:interaction-target",
      "sourceNodeId": "class:rcx5lg:wasmknowledgeservice",
      "kind": "interaction-target",
      "targetHint": "HttpClient.DeleteAsync(\"/api/knowledge\")",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 141,
          "summary": "external-call: HttpClient.DeleteAsync(\"/api/knowledge\")",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1kbwt4x:dependency-target",
      "sourceNodeId": "file:qt46oq:webplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (IPlatformService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (IPlatformService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pqy8ne:dependency-target",
      "sourceNodeId": "file:qt46oq:webplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop (IJSRuntime) - framework",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "Unresolved dependency target Microsoft.JSInterop (IJSRuntime) - framework.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:iqpc7c:dependency-target",
      "sourceNodeId": "file:qt46oq:webplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result) - library",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "Unresolved dependency target FluentResults (Result) - library.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ctxukg:dependency-target",
      "sourceNodeId": "file:qt46oq:webplatformservice-cs",
      "kind": "dependency-target",
      "targetPath": "DeviceContext, DeviceType, DisplayOrientation (types referenced; source not in this file)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "summary": "Unresolved dependency target DeviceContext, DeviceType, DisplayOrientation (types referenced; source not in this file).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:9rmie:call-target",
      "sourceNodeId": "method:ev8hjj:vibratesuccessasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "VibrateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 16,
          "summary": "Unresolved call target VibrateAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:sd6wy6:call-target",
      "sourceNodeId": "method:eown21:vibrateerrorasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "VibrateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 17,
          "summary": "Unresolved call target VibrateAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:8hn5ke:interaction-target",
      "sourceNodeId": "class:fhmi44:webplatformservice",
      "kind": "interaction-target",
      "targetHint": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 23,
          "summary": "external-call: _jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:hn89r7:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "System.Net.Http",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target System.Net.Http.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:pwtsx1:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "System.Net.Http.Json",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target System.Net.Http.Json.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:kf84ue:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Forms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Forms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:iz1ch9:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Routing",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Routing.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:akb9gd:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:13z0xly:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Components.Web.Virtualization",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Components.Web.Virtualization.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:yjcoyf:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target Microsoft.JSInterop.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:10xbtj1:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Web",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.Web.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:dtx77k:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7skj08:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Layout",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Layout.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1h4ce2i:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Atoms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Atoms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19tj87r:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Molecules",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Molecules.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:7xxrwz:dependency-target",
      "sourceNodeId": "file:163bafi:imports-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.UI.Shared.Components.Organisms",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/_Imports.razor",
          "summary": "Unresolved dependency target NexusReader.UI.Shared.Components.Organisms.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1gzquyf:dependency-target",
      "sourceNodeId": "file:qvoxmq:app-razor",
      "kind": "dependency-target",
      "targetPath": "_content/NexusReader.UI.Shared/app.css",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "Unresolved dependency target _content/NexusReader.UI.Shared/app.css.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:k1f8oh:dependency-target",
      "sourceNodeId": "file:qvoxmq:app-razor",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Web.styles.css",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "Unresolved dependency target NexusReader.Web.styles.css.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:10cmjzp:dependency-target",
      "sourceNodeId": "file:qvoxmq:app-razor",
      "kind": "dependency-target",
      "targetPath": "Components/ReconnectModal.razor",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "Unresolved dependency target Components/ReconnectModal.razor.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:bazl91:dependency-target",
      "sourceNodeId": "file:qvoxmq:app-razor",
      "kind": "dependency-target",
      "targetPath": "_framework/blazor.web.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "Unresolved dependency target _framework/blazor.web.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:walqm6:dependency-target",
      "sourceNodeId": "file:qvoxmq:app-razor",
      "kind": "dependency-target",
      "targetPath": "_content/NexusReader.UI.Shared/js/auth.js",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "summary": "Unresolved dependency target _content/NexusReader.UI.Shared/js/auth.js.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ela81a:call-target",
      "sourceNodeId": "method:boip8u:render-razor-markup",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "HeadOutlet",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 12,
          "summary": "Unresolved call target HeadOutlet in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1rfvu30:call-target",
      "sourceNodeId": "method:boip8u:render-razor-markup",
      "kind": "call-target",
      "targetPath": "NexusReader.UI.Shared/Routes.razor",
      "targetHint": "NexusReader.UI.Shared.Routes",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 21,
          "summary": "Unresolved call target NexusReader.UI.Shared.Routes in NexusReader.UI.Shared/Routes.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:fop0gq:call-target",
      "sourceNodeId": "method:boip8u:render-razor-markup",
      "kind": "call-target",
      "targetPath": "Components/ReconnectModal.razor",
      "targetHint": "ReconnectModal",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 22,
          "summary": "Unresolved call target ReconnectModal in Components/ReconnectModal.razor.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1o4c4em:call-target",
      "sourceNodeId": "method:boip8u:render-razor-markup",
      "kind": "call-target",
      "targetPath": "_framework/blazor.web.js",
      "targetHint": "Blazor client runtime (static file)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 23,
          "summary": "Unresolved call target Blazor client runtime (static file) in _framework/blazor.web.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5y3x5d:call-target",
      "sourceNodeId": "method:boip8u:render-razor-markup",
      "kind": "call-target",
      "targetPath": "_content/NexusReader.UI.Shared/js/auth.js",
      "targetHint": "auth.js (static file)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 45,
          "summary": "Unresolved call target auth.js (static file) in _content/NexusReader.UI.Shared/js/auth.js.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1ijupkj:call-target",
      "sourceNodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "hidePreloader",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 36,
          "summary": "Unresolved call target hidePreloader in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:ocdaf1:dependency-target",
      "sourceNodeId": "file:mhxlbr:nexusreader-web-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Web.Client/NexusReader.Web.Client.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/NexusReader.Web.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Web.Client/NexusReader.Web.Client.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:yubb7p:dependency-target",
      "sourceNodeId": "file:mhxlbr:nexusreader-web-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Application/NexusReader.Application.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/NexusReader.Web.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Application/NexusReader.Application.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1ylrlwd:dependency-target",
      "sourceNodeId": "file:mhxlbr:nexusreader-web-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.Infrastructure/NexusReader.Infrastructure.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/NexusReader.Web.csproj",
          "summary": "Unresolved dependency target ../NexusReader.Infrastructure/NexusReader.Infrastructure.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:iedevx:dependency-target",
      "sourceNodeId": "file:mhxlbr:nexusreader-web-csproj",
      "kind": "dependency-target",
      "targetPath": "../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/NexusReader.Web.csproj",
          "summary": "Unresolved dependency target ../NexusReader.UI.Shared/NexusReader.UI.Shared.csproj.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1tkzwl2:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1gy95x9:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Infrastructure",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Infrastructure.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:w3a0df:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Data.Persistence",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Data.Persistence.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:8mvfuf:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1r5fh1:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Commands.Library",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Commands.Library.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:wgvlbn:dependency-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:kt6gb2:call-target",
      "sourceNodeId": "method:1uibcuk:program-top-level",
      "kind": "call-target",
      "targetPath": "NexusReader.Application",
      "targetHint": "AddApplication",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 78,
          "summary": "Unresolved call target AddApplication in NexusReader.Application.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:atcn0w:call-target",
      "sourceNodeId": "method:1uibcuk:program-top-level",
      "kind": "call-target",
      "targetPath": "NexusReader.Infrastructure",
      "targetHint": "AddInfrastructure",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 79,
          "summary": "Unresolved call target AddInfrastructure in NexusReader.Infrastructure.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:af3q5i:call-target",
      "sourceNodeId": "method:1uibcuk:program-top-level",
      "kind": "call-target",
      "targetPath": "NexusReader.Data.Persistence/DbInitializer.cs",
      "targetHint": "DbInitializer.SeedAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 196,
          "summary": "Unresolved call target DbInitializer.SeedAsync in NexusReader.Data.Persistence/DbInitializer.cs.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1jj3gm9:call-target",
      "sourceNodeId": "method:1uibcuk:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleSubscriptionSuccess",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 389,
          "summary": "Unresolved call target HandleSubscriptionSuccess in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1e2zwy5:call-target",
      "sourceNodeId": "method:1uibcuk:program-top-level",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleSubscriptionCancellation",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 399,
          "summary": "Unresolved call target HandleSubscriptionCancellation in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:67uv3t:call-target",
      "sourceNodeId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Persistence",
      "targetHint": "IEpubReader.GetEpubContentAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 253,
          "summary": "Unresolved call target IEpubReader.GetEpubContentAsync in NexusReader.Application.Abstractions.Persistence.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:e8p2w2:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.GetKnowledgeAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 268,
          "summary": "Unresolved call target IKnowledgeService.GetKnowledgeAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1h3uc52:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.GetGraphDataAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 276,
          "summary": "Unresolved call target IKnowledgeService.GetGraphDataAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dnru86:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.GetSummaryAndQuizAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 284,
          "summary": "Unresolved call target IKnowledgeService.GetSummaryAndQuizAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1phjv70:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.GetKnowledgeMapAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 292,
          "summary": "Unresolved call target IKnowledgeService.GetKnowledgeMapAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:eqx362:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.VerifyGroundednessAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 300,
          "summary": "Unresolved call target IKnowledgeService.VerifyGroundednessAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:x4s5k1:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.SearchLibrarySemanticallyAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 308,
          "summary": "Unresolved call target IKnowledgeService.SearchLibrarySemanticallyAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1j7hia1:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.AskQuestionAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 316,
          "summary": "Unresolved call target IKnowledgeService.AskQuestionAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:pegxrp:call-target",
      "sourceNodeId": "method:gc2kp9:knowledge-api-group-mappings",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Abstractions.Services",
      "targetHint": "IKnowledgeService.ClearCacheAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 323,
          "summary": "Unresolved call target IKnowledgeService.ClearCacheAsync in NexusReader.Application.Abstractions.Services.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:9tr9zo:call-target",
      "sourceNodeId": "method:ggo2op:ingestebook-post-api-library-ingest",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Commands.Library",
      "targetHint": "IngestEbookCommand (ctor)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 340,
          "summary": "Unresolved call target IngestEbookCommand (ctor) in NexusReader.Application.Commands.Library.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:fdq985:call-target",
      "sourceNodeId": "method:ggo2op:ingestebook-post-api-library-ingest",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IMediator.Send",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 349,
          "summary": "Unresolved call target IMediator.Send in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:r4nsny:call-target",
      "sourceNodeId": "method:veacg9:getmyebooks-get-api-library-books",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Queries.Library",
      "targetHint": "GetMyEbooksQuery (ctor)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 360,
          "summary": "Unresolved call target GetMyEbooksQuery (ctor) in NexusReader.Application.Queries.Library.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:exg1zf:call-target",
      "sourceNodeId": "method:veacg9:getmyebooks-get-api-library-books",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IMediator.Send",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 360,
          "summary": "Unresolved call target IMediator.Send in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1a9orlv:call-target",
      "sourceNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "EventUtility.ConstructEvent",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 379,
          "summary": "Unresolved call target EventUtility.ConstructEvent in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:d6i7fw:call-target",
      "sourceNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleSubscriptionSuccess",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 389,
          "summary": "Unresolved call target HandleSubscriptionSuccess in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1dkzmru:call-target",
      "sourceNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "HandleSubscriptionCancellation",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 399,
          "summary": "Unresolved call target HandleSubscriptionCancellation in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:elasnz:call-target",
      "sourceNodeId": "method:13xh0j3:handlesubscriptionsuccess",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.FindByEmailAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 418,
          "summary": "Unresolved call target UserManager<NexusUser>.FindByEmailAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:h03m1a:call-target",
      "sourceNodeId": "method:13xh0j3:handlesubscriptionsuccess",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AppDbContext.SubscriptionPlans.FirstOrDefaultAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 422,
          "summary": "Unresolved call target AppDbContext.SubscriptionPlans.FirstOrDefaultAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1almyf8:call-target",
      "sourceNodeId": "method:13xh0j3:handlesubscriptionsuccess",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.UpdateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 430,
          "summary": "Unresolved call target UserManager<NexusUser>.UpdateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:hjm3k7:call-target",
      "sourceNodeId": "method:72bnlj:handlesubscriptioncancellation",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.FindByEmailAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 441,
          "summary": "Unresolved call target UserManager<NexusUser>.FindByEmailAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1yh7mqb:call-target",
      "sourceNodeId": "method:72bnlj:handlesubscriptioncancellation",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "AppDbContext.SubscriptionPlans.FindAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 444,
          "summary": "Unresolved call target AppDbContext.SubscriptionPlans.FindAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:wf27w:call-target",
      "sourceNodeId": "method:72bnlj:handlesubscriptioncancellation",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.UpdateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 447,
          "summary": "Unresolved call target UserManager<NexusUser>.UpdateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:1oyil27:call-target",
      "sourceNodeId": "method:1rb8gnn:map-identity-api-mapgroup-identity",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "MapIdentityApi<NexusUser>",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 451,
          "summary": "Unresolved call target MapIdentityApi<NexusUser> in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:yx1tie:call-target",
      "sourceNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "SignInManager<NexusUser>.GetExternalLoginInfoAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 469,
          "summary": "Unresolved call target SignInManager<NexusUser>.GetExternalLoginInfoAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:178ba5o:call-target",
      "sourceNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "SignInManager<NexusUser>.ExternalLoginSignInAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 476,
          "summary": "Unresolved call target SignInManager<NexusUser>.ExternalLoginSignInAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:14j4tjr:call-target",
      "sourceNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.CreateAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 494,
          "summary": "Unresolved call target UserManager<NexusUser>.CreateAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:15s1v4j:call-target",
      "sourceNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "UserManager<NexusUser>.AddLoginAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 498,
          "summary": "Unresolved call target UserManager<NexusUser>.AddLoginAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:n2f2mw:call-target",
      "sourceNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "SignInManager<NexusUser>.SignInAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 499,
          "summary": "Unresolved call target SignInManager<NexusUser>.SignInAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:145ktv7:call-target",
      "sourceNodeId": "method:8fzkrx:account-login-form-post-account-login-form",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "SignInManager<NexusUser>.PasswordSignInAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 528,
          "summary": "Unresolved call target SignInManager<NexusUser>.PasswordSignInAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:hqf79k:call-target",
      "sourceNodeId": "method:19x6wwx:account-logout-form-get-account-logout-form",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "SignInManager<NexusUser>.SignOutAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 543,
          "summary": "Unresolved call target SignInManager<NexusUser>.SignOutAsync in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:yh2xm1:call-target",
      "sourceNodeId": "method:7u4uld:get-user-profile-get-identity-profile",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Queries.User",
      "targetHint": "GetUserProfileQuery (ctor)",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 553,
          "summary": "Unresolved call target GetUserProfileQuery (ctor) in NexusReader.Application.Queries.User.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5jnkjz:call-target",
      "sourceNodeId": "method:7u4uld:get-user-profile-get-identity-profile",
      "kind": "call-target",
      "targetPath": "unknown",
      "targetHint": "IMediator.Send",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 553,
          "summary": "Unresolved call target IMediator.Send in unknown.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:7xqs7c:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 125,
          "summary": "persistence-read: var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:n0rfbb:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "context.Request.Path.StartsWithSegments(\"/identity\") ||",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 126,
          "summary": "persistence-read: context.Request.Path.StartsWithSegments(\"/identity\") ||",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ez59jg:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 127,
          "summary": "persistence-read: context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:ww7zs3:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 131,
          "summary": "persistence-read: context.Response.StatusCode = StatusCodes.Status401Unauthorized;",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:4zwunc:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "context.Response.Redirect(context.RedirectUri);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 135,
          "summary": "persistence-read: context.Response.Redirect(context.RedirectUri);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:sy1gxb:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 252,
          "summary": "persistence-read: var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1nmuyp5:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 267,
          "summary": "persistence-read: var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1jyxn0y:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "await epubService.GetEpubContentAsync(...)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 253,
          "summary": "external-call: await epubService.GetEpubContentAsync(...)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1op8eta:interaction-target",
      "sourceNodeId": "file:12rhzck:program-cs",
      "kind": "interaction-target",
      "targetHint": "Await PasswordSignInAsync",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 528,
          "summary": "external-call: Await PasswordSignInAsync",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:2drvlp:dependency-target",
      "sourceNodeId": "file:902xey:nativestorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Abstractions.Services (INativeStorageService)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Abstractions.Services (INativeStorageService).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:zr3tio:dependency-target",
      "sourceNodeId": "file:902xey:nativestorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.JSInterop (IJSRuntime)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "summary": "Unresolved dependency target Microsoft.JSInterop (IJSRuntime).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:19tt1zf:dependency-target",
      "sourceNodeId": "file:902xey:nativestorageservice-cs",
      "kind": "dependency-target",
      "targetPath": "FluentResults (Result)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "summary": "Unresolved dependency target FluentResults (Result).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:1adkv8l:call-target",
      "sourceNodeId": "method:19ghosy:saveboolasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 47,
          "summary": "Unresolved call target SaveStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:pffwsg:call-target",
      "sourceNodeId": "method:10perg:savesecurestring",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "SaveStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 76,
          "summary": "Unresolved call target SaveStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:14k7az0:call-target",
      "sourceNodeId": "method:1olwlbd:getsecurestring",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "GetStringAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 78,
          "summary": "Unresolved call target GetStringAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:akhi98:call-target",
      "sourceNodeId": "method:1k49ns3:removesecureasync",
      "kind": "call-target",
      "targetPath": "self",
      "targetHint": "RemoveAsync",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 80,
          "summary": "Unresolved call target RemoveAsync in self.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:4iz4ad:interaction-target",
      "sourceNodeId": "class:vyfiaz:nativestorageservice",
      "kind": "interaction-target",
      "targetHint": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 25,
          "summary": "external-call: await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1ih8lqd:interaction-target",
      "sourceNodeId": "class:vyfiaz:nativestorageservice",
      "kind": "interaction-target",
      "targetHint": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 38,
          "summary": "external-call: var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:11sk4fu:interaction-target",
      "sourceNodeId": "class:vyfiaz:nativestorageservice",
      "kind": "interaction-target",
      "targetHint": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 67,
          "summary": "external-call: await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1l1phx1:dependency-target",
      "sourceNodeId": "file:10axm6l:serveridentityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.Queries.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.Queries.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:b3ad1z:dependency-target",
      "sourceNodeId": "file:10axm6l:serveridentityservice-cs",
      "kind": "dependency-target",
      "targetPath": "NexusReader.Application.DTOs.User",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "summary": "Unresolved dependency target NexusReader.Application.DTOs.User.",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:qfgl87:dependency-target",
      "sourceNodeId": "file:10axm6l:serveridentityservice-cs",
      "kind": "dependency-target",
      "targetPath": "Microsoft.AspNetCore.Identity (framework)",
      "reason": "Dependency path was discovered in the summary but did not resolve to another extracted file artifact.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "summary": "Unresolved dependency target Microsoft.AspNetCore.Identity (framework).",
          "kind": "dependency"
        }
      ]
    },
    {
      "id": "unresolved:r9ylhn:call-target",
      "sourceNodeId": "method:13af2s9:getprofileasync",
      "kind": "call-target",
      "targetPath": "NexusReader.Application.Queries.User",
      "targetHint": "GetUserProfileQuery",
      "reason": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 116,
          "summary": "Unresolved call target GetUserProfileQuery in NexusReader.Application.Queries.User.",
          "kind": "call"
        }
      ]
    },
    {
      "id": "unresolved:5i4yvb:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "var user = await _userManager.FindByEmailAsync(email);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 43,
          "summary": "persistence-read: var user = await _userManager.FindByEmailAsync(email);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1oipl4j:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 98,
          "summary": "persistence-read: return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:asmgjp:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 113,
          "summary": "persistence-read: var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:14uh522:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "_userManager.FindByEmailAsync(email) -- framework identity external call",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 43,
          "summary": "external-call: _userManager.FindByEmailAsync(email) -- framework identity external call",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:by6qd7:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "_userManager.IsLockedOutAsync(user) -- framework identity external call",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 47,
          "summary": "external-call: _userManager.IsLockedOutAsync(user) -- framework identity external call",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1kxilh5:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 50,
          "summary": "external-call: _userManager.CheckPasswordAsync(user, password) -- framework identity external call",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:187tll3:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "await _userManager.ResetAccessFailedCountAsync(user)",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 58,
          "summary": "external-call: await _userManager.ResetAccessFailedCountAsync(user)",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:ys6116:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "_userManager.CreateAsync(user, password) -- framework identity external call",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 90,
          "summary": "external-call: _userManager.CreateAsync(user, password) -- framework identity external call",
          "kind": "interaction"
        }
      ]
    },
    {
      "id": "unresolved:1mz3kzy:interaction-target",
      "sourceNodeId": "class:1l2fmrv:serveridentityservice",
      "kind": "interaction-target",
      "targetHint": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
      "reason": "Interaction was identified in the file summary but does not yet map to a stable V5 target node.",
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 116,
          "summary": "external-call: _mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler",
          "kind": "interaction"
        }
      ]
    }
  ],
  "controlFlowFragments": [
    {
      "fragmentId": "method:7ldigq:handle__fragment",
      "ownerFileId": "file:ayj9r2:iqueryhandler-cs",
      "ownerSymbolId": "method:7ldigq:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:7ldigq:handle__entry",
      "exitNodeIds": [
        "method:7ldigq:handle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:7ldigq:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 6,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Implied contract method for handling a query and returning a Result-wrapped TResponse asynchronously (inherited from MediatR IRequestHandler)."
        },
        {
          "id": "method:7ldigq:handle__action_6_inheritance_6__linear",
          "kind": "statement",
          "label": "Inherits MediatR IRequestHandler contract",
          "line": 6,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.7,
          "detail": "IQueryHandler<TQuery, TResponse> : IRequestHandler<TQuery, Result<TResponse>> - implies Handle(request, CancellationToken) -> Task<Result<TResponse>>"
        },
        {
          "id": "method:7ldigq:handle__action_7_generic_constraint_7__linear",
          "kind": "statement",
          "label": "Query type constraint",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.7,
          "detail": "where TQuery : IQuery<TResponse> enforces that TQuery implements IQuery<TResponse>"
        },
        {
          "id": "method:7ldigq:handle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:7ldigq:handle__entry__method:7ldigq:handle__action_6_inheritance_6__linear",
          "from": "method:7ldigq:handle__entry",
          "to": "method:7ldigq:handle__action_6_inheritance_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7ldigq:handle__action_6_inheritance_6__linear__method:7ldigq:handle__action_7_generic_constraint_7__linear",
          "from": "method:7ldigq:handle__action_6_inheritance_6__linear",
          "to": "method:7ldigq:handle__action_7_generic_constraint_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7ldigq:handle__action_7_generic_constraint_7__linear__implicit_return",
          "from": "method:7ldigq:handle__action_7_generic_constraint_7__linear",
          "to": "method:7ldigq:handle__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 6,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs",
          "line": 6,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:3uewqk:broadcastprogressasync__fragment",
      "ownerFileId": "file:441s21:isyncbroadcaster-cs",
      "ownerSymbolId": "method:3uewqk:broadcastprogressasync",
      "ownerSymbolName": "BroadcastProgressAsync",
      "entryNodeId": "method:3uewqk:broadcastprogressasync__entry",
      "exitNodeIds": [
        "method:3uewqk:broadcastprogressasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:3uewqk:broadcastprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastProgressAsync entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.99,
          "detail": "Declares an asynchronous broadcast of a user's reading progress to that user's devices, optionally excluding a specific connection."
        },
        {
          "id": "method:3uewqk:broadcastprogressasync__action_18_params_18__linear",
          "kind": "statement",
          "label": "Parameters indicate target user, page, server UTC timestamp, optional excluded connection, and cancellation token",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "userId, pageId, timestamp, excludedConnectionId, cancellationToken"
        },
        {
          "id": "method:3uewqk:broadcastprogressasync__action_18_declaration_18__linear",
          "kind": "statement",
          "label": "Abstract async broadcast contract",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Interface method only; implementations will perform real-time broadcasting to clients and may exclude an originating connection via excludedConnectionId."
        },
        {
          "id": "method:3uewqk:broadcastprogressasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 23,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:3uewqk:broadcastprogressasync__entry__method:3uewqk:broadcastprogressasync__action_18_params_18__linear",
          "from": "method:3uewqk:broadcastprogressasync__entry",
          "to": "method:3uewqk:broadcastprogressasync__action_18_params_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3uewqk:broadcastprogressasync__action_18_params_18__linear__method:3uewqk:broadcastprogressasync__action_18_declaration_18__linear",
          "from": "method:3uewqk:broadcastprogressasync__action_18_params_18__linear",
          "to": "method:3uewqk:broadcastprogressasync__action_18_declaration_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3uewqk:broadcastprogressasync__action_18_declaration_18__linear__implicit_return",
          "from": "method:3uewqk:broadcastprogressasync__action_18_declaration_18__linear",
          "to": "method:3uewqk:broadcastprogressasync__implicit_return",
          "kind": "return",
          "line": 23,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 18,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method BroadcastProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:uqgfbl:broadcastingestionprogressasync__fragment",
      "ownerFileId": "file:441s21:isyncbroadcaster-cs",
      "ownerSymbolId": "method:uqgfbl:broadcastingestionprogressasync",
      "ownerSymbolName": "BroadcastIngestionProgressAsync",
      "entryNodeId": "method:uqgfbl:broadcastingestionprogressasync__entry",
      "exitNodeIds": [
        "method:uqgfbl:broadcastingestionprogressasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastIngestionProgressAsync entry",
          "line": 33,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.99,
          "detail": "Declares an asynchronous broadcast of ingestion (background processing) status and progress to a specific user."
        },
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__action_33_params_33__linear",
          "kind": "statement",
          "label": "Parameters convey user, human message, progress fraction, and cancellation token",
          "line": 33,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "userId, message, progress, cancellationToken"
        },
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__action_33_declaration_33__linear",
          "kind": "statement",
          "label": "Abstract async ingestion progress contract",
          "line": 33,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Interface method only; implementations will notify a single user about ingestion status and numeric progress."
        },
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 37,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__entry__method:uqgfbl:broadcastingestionprogressasync__action_33_params_33__linear",
          "from": "method:uqgfbl:broadcastingestionprogressasync__entry",
          "to": "method:uqgfbl:broadcastingestionprogressasync__action_33_params_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__action_33_params_33__linear__method:uqgfbl:broadcastingestionprogressasync__action_33_declaration_33__linear",
          "from": "method:uqgfbl:broadcastingestionprogressasync__action_33_params_33__linear",
          "to": "method:uqgfbl:broadcastingestionprogressasync__action_33_declaration_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:uqgfbl:broadcastingestionprogressasync__action_33_declaration_33__linear__implicit_return",
          "from": "method:uqgfbl:broadcastingestionprogressasync__action_33_declaration_33__linear",
          "to": "method:uqgfbl:broadcastingestionprogressasync__implicit_return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 33,
        "end": 37
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs",
          "line": 33,
          "summary": "Control-flow fragment extracted for method BroadcastIngestionProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:3jcuy:findauthorbynameasync__fragment",
      "ownerFileId": "file:1hlb3r7:iebookrepository-cs",
      "ownerSymbolId": "method:3jcuy:findauthorbynameasync",
      "ownerSymbolName": "FindAuthorByNameAsync",
      "entryNodeId": "method:3jcuy:findauthorbynameasync__entry",
      "exitNodeIds": [
        "method:3jcuy:findauthorbynameasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:3jcuy:findauthorbynameasync__entry",
          "kind": "entry",
          "label": "FindAuthorByNameAsync entry",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.99,
          "detail": "Asynchronously finds an Author by name using a case-insensitive comparison."
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_12_read_12__linear",
          "kind": "statement",
          "label": "Lookup author by name (case-insensitive)",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7,
          "detail": "Described to perform a case-insensitive search and return an optional Author; implementation will call persistence layer."
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_14_findauthorbynameasync_repository_read_14_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.86,
          "detail": "Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default);"
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_14_async_14__linear",
          "kind": "statement",
          "label": "Asynchronous read",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7,
          "detail": "Returns Task<Author?> representing an async persistence read operation."
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:3jcuy:findauthorbynameasync__entry__method:3jcuy:findauthorbynameasync__action_12_read_12__linear",
          "from": "method:3jcuy:findauthorbynameasync__entry",
          "to": "method:3jcuy:findauthorbynameasync__action_12_read_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_12_read_12__linear__method:3jcuy:findauthorbynameasync__action_14_findauthorbynameasync_repository_read_14_0__linear",
          "from": "method:3jcuy:findauthorbynameasync__action_12_read_12__linear",
          "to": "method:3jcuy:findauthorbynameasync__action_14_findauthorbynameasync_repository_read_14_0__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.86
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_14_findauthorbynameasync_repository_read_14_0__linear__method:3jcuy:findauthorbynameasync__action_14_async_14__linear",
          "from": "method:3jcuy:findauthorbynameasync__action_14_findauthorbynameasync_repository_read_14_0__linear",
          "to": "method:3jcuy:findauthorbynameasync__action_14_async_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3jcuy:findauthorbynameasync__action_14_async_14__linear__implicit_return",
          "from": "method:3jcuy:findauthorbynameasync__action_14_async_14__linear",
          "to": "method:3jcuy:findauthorbynameasync__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 14,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method FindAuthorByNameAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:2iyuvn:addauthor__fragment",
      "ownerFileId": "file:1hlb3r7:iebookrepository-cs",
      "ownerSymbolId": "method:2iyuvn:addauthor",
      "ownerSymbolName": "AddAuthor",
      "entryNodeId": "method:2iyuvn:addauthor__entry",
      "exitNodeIds": [
        "method:2iyuvn:addauthor__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:2iyuvn:addauthor__entry",
          "kind": "entry",
          "label": "AddAuthor entry",
          "line": 19,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.99,
          "detail": "Stages a new Author in the repository (adds to the change tracker / in-memory unit-of-work) but does not persist."
        },
        {
          "id": "method:2iyuvn:addauthor__action_17_write_17__linear",
          "kind": "statement",
          "label": "Stage author",
          "line": 17,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7,
          "detail": "Adds an Author to the repository as a staged change; persistence deferred until SaveChangesAsync."
        },
        {
          "id": "method:2iyuvn:addauthor__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:2iyuvn:addauthor__entry__method:2iyuvn:addauthor__action_17_write_17__linear",
          "from": "method:2iyuvn:addauthor__entry",
          "to": "method:2iyuvn:addauthor__action_17_write_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2iyuvn:addauthor__action_17_write_17__linear__implicit_return",
          "from": "method:2iyuvn:addauthor__action_17_write_17__linear",
          "to": "method:2iyuvn:addauthor__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 19,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method AddAuthor.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ij0vl0:addebook__fragment",
      "ownerFileId": "file:1hlb3r7:iebookrepository-cs",
      "ownerSymbolId": "method:ij0vl0:addebook",
      "ownerSymbolName": "AddEbook",
      "entryNodeId": "method:ij0vl0:addebook__entry",
      "exitNodeIds": [
        "method:ij0vl0:addebook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ij0vl0:addebook__entry",
          "kind": "entry",
          "label": "AddEbook entry",
          "line": 24,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.99,
          "detail": "Stages a new Ebook in the repository (adds to the change tracker / in-memory unit-of-work) but does not persist."
        },
        {
          "id": "method:ij0vl0:addebook__action_22_write_22__linear",
          "kind": "statement",
          "label": "Stage ebook",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7,
          "detail": "Adds an Ebook to the repository as a staged change; persistence deferred until SaveChangesAsync."
        },
        {
          "id": "method:ij0vl0:addebook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ij0vl0:addebook__entry__method:ij0vl0:addebook__action_22_write_22__linear",
          "from": "method:ij0vl0:addebook__entry",
          "to": "method:ij0vl0:addebook__action_22_write_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ij0vl0:addebook__action_22_write_22__linear__implicit_return",
          "from": "method:ij0vl0:addebook__action_22_write_22__linear",
          "to": "method:ij0vl0:addebook__implicit_return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 24,
        "end": 24
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 24,
          "summary": "Control-flow fragment extracted for method AddEbook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:grwwrg:savechangesasync__fragment",
      "ownerFileId": "file:1hlb3r7:iebookrepository-cs",
      "ownerSymbolId": "method:grwwrg:savechangesasync",
      "ownerSymbolName": "SaveChangesAsync",
      "entryNodeId": "method:grwwrg:savechangesasync__entry",
      "exitNodeIds": [
        "method:grwwrg:savechangesasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:grwwrg:savechangesasync__entry",
          "kind": "entry",
          "label": "SaveChangesAsync entry",
          "line": 29,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.99,
          "detail": "Persists all staged changes to the underlying store and returns the number of affected entries."
        },
        {
          "id": "method:grwwrg:savechangesasync__action_27_persistence_27__linear",
          "kind": "statement",
          "label": "Persist staged changes",
          "line": 27,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7,
          "detail": "Commits all staged additions/updates/deletes to the underlying store and returns affected row count; asynchronous."
        },
        {
          "id": "method:grwwrg:savechangesasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 29,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:grwwrg:savechangesasync__entry__method:grwwrg:savechangesasync__action_27_persistence_27__linear",
          "from": "method:grwwrg:savechangesasync__entry",
          "to": "method:grwwrg:savechangesasync__action_27_persistence_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:grwwrg:savechangesasync__action_27_persistence_27__linear__implicit_return",
          "from": "method:grwwrg:savechangesasync__action_27_persistence_27__linear",
          "to": "method:grwwrg:savechangesasync__implicit_return",
          "kind": "return",
          "line": 29,
          "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 29,
        "end": 29
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method SaveChangesAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1px2su2:handlesubscriptionupdatedasync__fragment",
      "ownerFileId": "file:rfn6bc:ibillingservice-cs",
      "ownerSymbolId": "method:1px2su2:handlesubscriptionupdatedasync",
      "ownerSymbolName": "HandleSubscriptionUpdatedAsync",
      "entryNodeId": "method:1px2su2:handlesubscriptionupdatedasync__entry",
      "exitNodeIds": [
        "method:1px2su2:handlesubscriptionupdatedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1px2su2:handlesubscriptionupdatedasync__entry",
          "kind": "entry",
          "label": "HandleSubscriptionUpdatedAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.99,
          "detail": "Contract for handling when a customer's subscription is created or updated (by Stripe or equivalent)."
        },
        {
          "id": "method:1px2su2:handlesubscriptionupdatedasync__action_8_abstract_definition_8__linear",
          "kind": "statement",
          "label": "declares handler contract",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.7,
          "detail": "Interface method with no implementation; concrete services implement business behavior (e.g., persistence, notifications, mapping)."
        },
        {
          "id": "method:1px2su2:handlesubscriptionupdatedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1px2su2:handlesubscriptionupdatedasync__entry__method:1px2su2:handlesubscriptionupdatedasync__action_8_abstract_definition_8__linear",
          "from": "method:1px2su2:handlesubscriptionupdatedasync__entry",
          "to": "method:1px2su2:handlesubscriptionupdatedasync__action_8_abstract_definition_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1px2su2:handlesubscriptionupdatedasync__action_8_abstract_definition_8__linear__implicit_return",
          "from": "method:1px2su2:handlesubscriptionupdatedasync__action_8_abstract_definition_8__linear",
          "to": "method:1px2su2:handlesubscriptionupdatedasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionUpdatedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16n7wyr:handlesubscriptiondeletedasync__fragment",
      "ownerFileId": "file:rfn6bc:ibillingservice-cs",
      "ownerSymbolId": "method:16n7wyr:handlesubscriptiondeletedasync",
      "ownerSymbolName": "HandleSubscriptionDeletedAsync",
      "entryNodeId": "method:16n7wyr:handlesubscriptiondeletedasync__entry",
      "exitNodeIds": [
        "method:16n7wyr:handlesubscriptiondeletedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16n7wyr:handlesubscriptiondeletedasync__entry",
          "kind": "entry",
          "label": "HandleSubscriptionDeletedAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.99,
          "detail": "Contract for handling when a customer's subscription is deleted (cleanup or downgrade actions)."
        },
        {
          "id": "method:16n7wyr:handlesubscriptiondeletedasync__action_9_abstract_definition_9__linear",
          "kind": "statement",
          "label": "declares handler contract",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.7,
          "detail": "Interface method with no implementation; concrete services implement removal/fallback logic."
        },
        {
          "id": "method:16n7wyr:handlesubscriptiondeletedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16n7wyr:handlesubscriptiondeletedasync__entry__method:16n7wyr:handlesubscriptiondeletedasync__action_9_abstract_definition_9__linear",
          "from": "method:16n7wyr:handlesubscriptiondeletedasync__entry",
          "to": "method:16n7wyr:handlesubscriptiondeletedasync__action_9_abstract_definition_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16n7wyr:handlesubscriptiondeletedasync__action_9_abstract_definition_9__linear__implicit_return",
          "from": "method:16n7wyr:handlesubscriptiondeletedasync__action_9_abstract_definition_9__linear",
          "to": "method:16n7wyr:handlesubscriptiondeletedasync__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionDeletedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bjnsl7:saveebookasync__fragment",
      "ownerFileId": "file:9fivst:ibookstorageservice-cs",
      "ownerSymbolId": "method:1bjnsl7:saveebookasync",
      "ownerSymbolName": "SaveEbookAsync",
      "entryNodeId": "method:1bjnsl7:saveebookasync__entry",
      "exitNodeIds": [
        "method:1bjnsl7:saveebookasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1bjnsl7:saveebookasync__entry",
          "kind": "entry",
          "label": "SaveEbookAsync entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.99,
          "detail": "Contract to save ebook binary data and return a relative path/URL."
        },
        {
          "id": "method:1bjnsl7:saveebookasync__action_11_contract_11__linear",
          "kind": "statement",
          "label": "async save ebook",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous save that returns a string path/URL"
        },
        {
          "id": "method:1bjnsl7:saveebookasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1bjnsl7:saveebookasync__entry__method:1bjnsl7:saveebookasync__action_11_contract_11__linear",
          "from": "method:1bjnsl7:saveebookasync__entry",
          "to": "method:1bjnsl7:saveebookasync__action_11_contract_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bjnsl7:saveebookasync__action_11_contract_11__linear__implicit_return",
          "from": "method:1bjnsl7:saveebookasync__action_11_contract_11__linear",
          "to": "method:1bjnsl7:saveebookasync__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pww9i7:savecoverasync__fragment",
      "ownerFileId": "file:9fivst:ibookstorageservice-cs",
      "ownerSymbolId": "method:1pww9i7:savecoverasync",
      "ownerSymbolName": "SaveCoverAsync",
      "entryNodeId": "method:1pww9i7:savecoverasync__entry",
      "exitNodeIds": [
        "method:1pww9i7:savecoverasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pww9i7:savecoverasync__entry",
          "kind": "entry",
          "label": "SaveCoverAsync entry",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.99,
          "detail": "Contract to save cover image binary data and return a relative path/URL, or null if no cover provided."
        },
        {
          "id": "method:1pww9i7:savecoverasync__action_22_contract_22__linear",
          "kind": "statement",
          "label": "async save cover",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.7,
          "detail": "May return null when no cover data is provided"
        },
        {
          "id": "method:1pww9i7:savecoverasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pww9i7:savecoverasync__entry__method:1pww9i7:savecoverasync__action_22_contract_22__linear",
          "from": "method:1pww9i7:savecoverasync__entry",
          "to": "method:1pww9i7:savecoverasync__action_22_contract_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pww9i7:savecoverasync__action_22_contract_22__linear__implicit_return",
          "from": "method:1pww9i7:savecoverasync__action_22_contract_22__linear",
          "to": "method:1pww9i7:savecoverasync__implicit_return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 22,
        "end": 22
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:hwn6lg:extractmetadataasync__fragment",
      "ownerFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "ownerSymbolId": "method:hwn6lg:extractmetadataasync",
      "ownerSymbolName": "ExtractMetadataAsync",
      "entryNodeId": "method:hwn6lg:extractmetadataasync__entry",
      "exitNodeIds": [
        "method:hwn6lg:extractmetadataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:hwn6lg:extractmetadataasync__entry",
          "kind": "entry",
          "label": "ExtractMetadataAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "confidence": 0.99,
          "detail": "Asynchronously extracts metadata from the provided EPUB stream and returns it wrapped in a FluentResults Result."
        },
        {
          "id": "method:hwn6lg:extractmetadataasync__body",
          "kind": "statement",
          "label": "Asynchronously extracts metadata from the provided EPUB stream and returns it wrapped in a FluentResults Result.",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "confidence": 0.75
        },
        {
          "id": "method:hwn6lg:extractmetadataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:hwn6lg:extractmetadataasync__entry_body",
          "from": "method:hwn6lg:extractmetadataasync__entry",
          "to": "method:hwn6lg:extractmetadataasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "line": 9,
          "confidence": 0.75
        },
        {
          "id": "method:hwn6lg:extractmetadataasync__body__implicit_return",
          "from": "method:hwn6lg:extractmetadataasync__body",
          "to": "method:hwn6lg:extractmetadataasync__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method ExtractMetadataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:121clyd:getepubcontentasync__fragment",
      "ownerFileId": "file:1mo9e25:iepubreader-cs",
      "ownerSymbolId": "method:121clyd:getepubcontentasync",
      "ownerSymbolName": "GetEpubContentAsync",
      "entryNodeId": "method:121clyd:getepubcontentasync__entry",
      "exitNodeIds": [
        "method:121clyd:getepubcontentasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:121clyd:getepubcontentasync__entry",
          "kind": "entry",
          "label": "GetEpubContentAsync entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.99,
          "detail": "Asynchronously retrieves parsed EPUB content blocks (a ReaderPageViewModel) for the specified ebook and zero-based chapter index, optionally scoped to a user and cancellable."
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_15_validation_hint_15__linear",
          "kind": "statement",
          "label": "Chapter index is zero-based",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7,
          "detail": "Documentation indicates chapterIndex is zero-based; callers should validate bounds"
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_18_async_return_18__linear",
          "kind": "statement",
          "label": "Returns a Result-wrapped ReaderPageViewModel",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7,
          "detail": "Method returns Task<Result<ReaderPageViewModel>>"
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_21_tenant_isolation_21__linear",
          "kind": "statement",
          "label": "User-scoped lookup",
          "line": 21,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7,
          "detail": "userId parameter is documented as used for tenant isolation in DB lookup"
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_21_cancellation_21__linear",
          "kind": "statement",
          "label": "Supports cancellation",
          "line": 21,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7,
          "detail": "cancellationToken parameter allows caller to cancel the operation"
        },
        {
          "id": "method:121clyd:getepubcontentasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:121clyd:getepubcontentasync__entry__method:121clyd:getepubcontentasync__action_15_validation_hint_15__linear",
          "from": "method:121clyd:getepubcontentasync__entry",
          "to": "method:121clyd:getepubcontentasync__action_15_validation_hint_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_15_validation_hint_15__linear__method:121clyd:getepubcontentasync__action_18_async_return_18__linear",
          "from": "method:121clyd:getepubcontentasync__action_15_validation_hint_15__linear",
          "to": "method:121clyd:getepubcontentasync__action_18_async_return_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_18_async_return_18__linear__method:121clyd:getepubcontentasync__action_21_tenant_isolation_21__linear",
          "from": "method:121clyd:getepubcontentasync__action_18_async_return_18__linear",
          "to": "method:121clyd:getepubcontentasync__action_21_tenant_isolation_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_21_tenant_isolation_21__linear__method:121clyd:getepubcontentasync__action_21_cancellation_21__linear",
          "from": "method:121clyd:getepubcontentasync__action_21_tenant_isolation_21__linear",
          "to": "method:121clyd:getepubcontentasync__action_21_cancellation_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.7
        },
        {
          "id": "method:121clyd:getepubcontentasync__action_21_cancellation_21__linear__implicit_return",
          "from": "method:121clyd:getepubcontentasync__action_21_cancellation_21__linear",
          "to": "method:121clyd:getepubcontentasync__implicit_return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 18,
        "end": 22
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method GetEpubContentAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:d5t49u:onstateinvalidated__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:d5t49u:onstateinvalidated",
      "ownerSymbolName": "OnStateInvalidated",
      "entryNodeId": "method:d5t49u:onstateinvalidated__entry",
      "exitNodeIds": [
        "method:d5t49u:onstateinvalidated__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:d5t49u:onstateinvalidated__entry",
          "kind": "entry",
          "label": "OnStateInvalidated entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Event triggered when identity/authentication state becomes invalid and consumers should react (e.g., clear state or re-authenticate)."
        },
        {
          "id": "method:d5t49u:onstateinvalidated__action_8_event_declaration_8__linear",
          "kind": "statement",
          "label": "State invalidation event declared",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "public event Func<Task>? OnStateInvalidated; consumers subscribe to be notified asynchronously"
        },
        {
          "id": "method:d5t49u:onstateinvalidated__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:d5t49u:onstateinvalidated__entry__method:d5t49u:onstateinvalidated__action_8_event_declaration_8__linear",
          "from": "method:d5t49u:onstateinvalidated__entry",
          "to": "method:d5t49u:onstateinvalidated__action_8_event_declaration_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:d5t49u:onstateinvalidated__action_8_event_declaration_8__linear__implicit_return",
          "from": "method:d5t49u:onstateinvalidated__action_8_event_declaration_8__linear",
          "to": "method:d5t49u:onstateinvalidated__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method OnStateInvalidated.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:12nj2l:registerasync__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:12nj2l:registerasync",
      "ownerSymbolName": "RegisterAsync",
      "entryNodeId": "method:12nj2l:registerasync__entry",
      "exitNodeIds": [
        "method:12nj2l:registerasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:12nj2l:registerasync__entry",
          "kind": "entry",
          "label": "RegisterAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Registers a new user account using email and password and returns a success/failure Result."
        },
        {
          "id": "method:12nj2l:registerasync__action_9_contract_9__linear",
          "kind": "statement",
          "label": "Registration operation declared",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous contract that returns a FluentResults.Result indicating success/failure"
        },
        {
          "id": "method:12nj2l:registerasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:12nj2l:registerasync__entry__method:12nj2l:registerasync__action_9_contract_9__linear",
          "from": "method:12nj2l:registerasync__entry",
          "to": "method:12nj2l:registerasync__action_9_contract_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12nj2l:registerasync__action_9_contract_9__linear__implicit_return",
          "from": "method:12nj2l:registerasync__action_9_contract_9__linear",
          "to": "method:12nj2l:registerasync__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method RegisterAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ww1s1:loginasync__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:1ww1s1:loginasync",
      "ownerSymbolName": "LoginAsync",
      "entryNodeId": "method:1ww1s1:loginasync__entry",
      "exitNodeIds": [
        "method:1ww1s1:loginasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ww1s1:loginasync__entry",
          "kind": "entry",
          "label": "LoginAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Authenticates a user with credentials and optional persistence (rememberMe) and returns a Result."
        },
        {
          "id": "method:1ww1s1:loginasync__action_10_contract_10__linear",
          "kind": "statement",
          "label": "Login operation declared",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous authentication contract returning FluentResults.Result"
        },
        {
          "id": "method:1ww1s1:loginasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ww1s1:loginasync__entry__method:1ww1s1:loginasync__action_10_contract_10__linear",
          "from": "method:1ww1s1:loginasync__entry",
          "to": "method:1ww1s1:loginasync__action_10_contract_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ww1s1:loginasync__action_10_contract_10__linear__implicit_return",
          "from": "method:1ww1s1:loginasync__action_10_contract_10__linear",
          "to": "method:1ww1s1:loginasync__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method LoginAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:urpd77:logoutasync__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:urpd77:logoutasync",
      "ownerSymbolName": "LogoutAsync",
      "entryNodeId": "method:urpd77:logoutasync__entry",
      "exitNodeIds": [
        "method:urpd77:logoutasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:urpd77:logoutasync__entry",
          "kind": "entry",
          "label": "LogoutAsync entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Logs out the current user and returns a Result indicating success/failure."
        },
        {
          "id": "method:urpd77:logoutasync__action_11_contract_11__linear",
          "kind": "statement",
          "label": "Logout operation declared",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous logout contract returning FluentResults.Result"
        },
        {
          "id": "method:urpd77:logoutasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:urpd77:logoutasync__entry__method:urpd77:logoutasync__action_11_contract_11__linear",
          "from": "method:urpd77:logoutasync__entry",
          "to": "method:urpd77:logoutasync__action_11_contract_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:urpd77:logoutasync__action_11_contract_11__linear__implicit_return",
          "from": "method:urpd77:logoutasync__action_11_contract_11__linear",
          "to": "method:urpd77:logoutasync__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method LogoutAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:yzr6ph:getprofileasync__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:yzr6ph:getprofileasync",
      "ownerSymbolName": "GetProfileAsync",
      "entryNodeId": "method:yzr6ph:getprofileasync__entry",
      "exitNodeIds": [
        "method:yzr6ph:getprofileasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:yzr6ph:getprofileasync__entry",
          "kind": "entry",
          "label": "GetProfileAsync entry",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Retrieves the current user's profile wrapped in a Result with UserProfileDto on success."
        },
        {
          "id": "method:yzr6ph:getprofileasync__action_12_contract_12__linear",
          "kind": "statement",
          "label": "Profile retrieval operation declared",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous contract returning a typed Result carrying UserProfileDto"
        },
        {
          "id": "method:yzr6ph:getprofileasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:yzr6ph:getprofileasync__entry__method:yzr6ph:getprofileasync__action_12_contract_12__linear",
          "from": "method:yzr6ph:getprofileasync__entry",
          "to": "method:yzr6ph:getprofileasync__action_12_contract_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yzr6ph:getprofileasync__action_12_contract_12__linear__implicit_return",
          "from": "method:yzr6ph:getprofileasync__action_12_contract_12__linear",
          "to": "method:yzr6ph:getprofileasync__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method GetProfileAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1gbqw83:refreshtokenasync__fragment",
      "ownerFileId": "file:1ud0jop:iidentityservice-cs",
      "ownerSymbolId": "method:1gbqw83:refreshtokenasync",
      "ownerSymbolName": "RefreshTokenAsync",
      "entryNodeId": "method:1gbqw83:refreshtokenasync__entry",
      "exitNodeIds": [
        "method:1gbqw83:refreshtokenasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1gbqw83:refreshtokenasync__entry",
          "kind": "entry",
          "label": "RefreshTokenAsync entry",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.99,
          "detail": "Requests a token refresh for the current authentication session and returns a Result indicating success/failure."
        },
        {
          "id": "method:1gbqw83:refreshtokenasync__action_13_contract_13__linear",
          "kind": "statement",
          "label": "Token refresh operation declared",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7,
          "detail": "Asynchronous contract for refreshing authentication tokens"
        },
        {
          "id": "method:1gbqw83:refreshtokenasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1gbqw83:refreshtokenasync__entry__method:1gbqw83:refreshtokenasync__action_13_contract_13__linear",
          "from": "method:1gbqw83:refreshtokenasync__entry",
          "to": "method:1gbqw83:refreshtokenasync__action_13_contract_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gbqw83:refreshtokenasync__action_13_contract_13__linear__implicit_return",
          "from": "method:1gbqw83:refreshtokenasync__action_13_contract_13__linear",
          "to": "method:1gbqw83:refreshtokenasync__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method RefreshTokenAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ckhg6n:getknowledgeasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:1ckhg6n:getknowledgeasync",
      "ownerSymbolName": "GetKnowledgeAsync",
      "entryNodeId": "method:1ckhg6n:getknowledgeasync__entry",
      "exitNodeIds": [
        "method:1ckhg6n:getknowledgeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ckhg6n:getknowledgeasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Return a KnowledgePacket for provided text scoped to a tenant and optional ebook."
        },
        {
          "id": "method:1ckhg6n:getknowledgeasync__body",
          "kind": "statement",
          "label": "Return a KnowledgePacket for provided text scoped to a tenant and optional ebook.",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:1ckhg6n:getknowledgeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ckhg6n:getknowledgeasync__entry_body",
          "from": "method:1ckhg6n:getknowledgeasync__entry",
          "to": "method:1ckhg6n:getknowledgeasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 8,
          "confidence": 0.75
        },
        {
          "id": "method:1ckhg6n:getknowledgeasync__body__implicit_return",
          "from": "method:1ckhg6n:getknowledgeasync__body",
          "to": "method:1ckhg6n:getknowledgeasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method GetKnowledgeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1g8j6qo:getgraphdataasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:1g8j6qo:getgraphdataasync",
      "ownerSymbolName": "GetGraphDataAsync",
      "entryNodeId": "method:1g8j6qo:getgraphdataasync__entry",
      "exitNodeIds": [
        "method:1g8j6qo:getgraphdataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1g8j6qo:getgraphdataasync__entry",
          "kind": "entry",
          "label": "GetGraphDataAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Produce graph-structured knowledge data for the given text and tenant context."
        },
        {
          "id": "method:1g8j6qo:getgraphdataasync__body",
          "kind": "statement",
          "label": "Produce graph-structured knowledge data for the given text and tenant context.",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:1g8j6qo:getgraphdataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1g8j6qo:getgraphdataasync__entry_body",
          "from": "method:1g8j6qo:getgraphdataasync__entry",
          "to": "method:1g8j6qo:getgraphdataasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 9,
          "confidence": 0.75
        },
        {
          "id": "method:1g8j6qo:getgraphdataasync__body__implicit_return",
          "from": "method:1g8j6qo:getgraphdataasync__body",
          "to": "method:1g8j6qo:getgraphdataasync__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method GetGraphDataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cuqhj0:getknowledgemapasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:cuqhj0:getknowledgemapasync",
      "ownerSymbolName": "GetKnowledgeMapAsync",
      "entryNodeId": "method:cuqhj0:getknowledgemapasync__entry",
      "exitNodeIds": [
        "method:cuqhj0:getknowledgemapasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cuqhj0:getknowledgemapasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeMapAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Generate a knowledge map (likely node/edge representation) for the supplied text and tenant."
        },
        {
          "id": "method:cuqhj0:getknowledgemapasync__body",
          "kind": "statement",
          "label": "Generate a knowledge map (likely node/edge representation) for the supplied text and tenant.",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:cuqhj0:getknowledgemapasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cuqhj0:getknowledgemapasync__entry_body",
          "from": "method:cuqhj0:getknowledgemapasync__entry",
          "to": "method:cuqhj0:getknowledgemapasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 10,
          "confidence": 0.75
        },
        {
          "id": "method:cuqhj0:getknowledgemapasync__body__implicit_return",
          "from": "method:cuqhj0:getknowledgemapasync__body",
          "to": "method:cuqhj0:getknowledgemapasync__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method GetKnowledgeMapAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:7pcmld:getsummaryandquizasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:7pcmld:getsummaryandquizasync",
      "ownerSymbolName": "GetSummaryAndQuizAsync",
      "entryNodeId": "method:7pcmld:getsummaryandquizasync__entry",
      "exitNodeIds": [
        "method:7pcmld:getsummaryandquizasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:7pcmld:getsummaryandquizasync__entry",
          "kind": "entry",
          "label": "GetSummaryAndQuizAsync entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Create a summary and quiz (assessment) artifact for given text within tenant/ebook scope."
        },
        {
          "id": "method:7pcmld:getsummaryandquizasync__body",
          "kind": "statement",
          "label": "Create a summary and quiz (assessment) artifact for given text within tenant/ebook scope.",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:7pcmld:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:7pcmld:getsummaryandquizasync__entry_body",
          "from": "method:7pcmld:getsummaryandquizasync__entry",
          "to": "method:7pcmld:getsummaryandquizasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 11,
          "confidence": 0.75
        },
        {
          "id": "method:7pcmld:getsummaryandquizasync__body__implicit_return",
          "from": "method:7pcmld:getsummaryandquizasync__body",
          "to": "method:7pcmld:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method GetSummaryAndQuizAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1yhcrn6:getrelevantcontextasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:1yhcrn6:getrelevantcontextasync",
      "ownerSymbolName": "GetRelevantContextAsync",
      "entryNodeId": "method:1yhcrn6:getrelevantcontextasync__entry",
      "exitNodeIds": [
        "method:1yhcrn6:getrelevantcontextasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1yhcrn6:getrelevantcontextasync__entry",
          "kind": "entry",
          "label": "GetRelevantContextAsync entry",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Retrieve a list of relevant context snippets for a query within a tenant."
        },
        {
          "id": "method:1yhcrn6:getrelevantcontextasync__body",
          "kind": "statement",
          "label": "Retrieve a list of relevant context snippets for a query within a tenant.",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:1yhcrn6:getrelevantcontextasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1yhcrn6:getrelevantcontextasync__entry_body",
          "from": "method:1yhcrn6:getrelevantcontextasync__entry",
          "to": "method:1yhcrn6:getrelevantcontextasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 12,
          "confidence": 0.75
        },
        {
          "id": "method:1yhcrn6:getrelevantcontextasync__body__implicit_return",
          "from": "method:1yhcrn6:getrelevantcontextasync__body",
          "to": "method:1yhcrn6:getrelevantcontextasync__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method GetRelevantContextAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oclqd:verifygroundednessasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:1oclqd:verifygroundednessasync",
      "ownerSymbolName": "VerifyGroundednessAsync",
      "entryNodeId": "method:1oclqd:verifygroundednessasync__entry",
      "exitNodeIds": [
        "method:1oclqd:verifygroundednessasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oclqd:verifygroundednessasync__entry",
          "kind": "entry",
          "label": "VerifyGroundednessAsync entry",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Evaluate whether an answer is grounded in provided context and return a score/rationale."
        },
        {
          "id": "method:1oclqd:verifygroundednessasync__body",
          "kind": "statement",
          "label": "Evaluate whether an answer is grounded in provided context and return a score/rationale.",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:1oclqd:verifygroundednessasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oclqd:verifygroundednessasync__entry_body",
          "from": "method:1oclqd:verifygroundednessasync__entry",
          "to": "method:1oclqd:verifygroundednessasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 13,
          "confidence": 0.75
        },
        {
          "id": "method:1oclqd:verifygroundednessasync__body__implicit_return",
          "from": "method:1oclqd:verifygroundednessasync__body",
          "to": "method:1oclqd:verifygroundednessasync__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method VerifyGroundednessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1odjeej:searchlibrarysemanticallyasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:1odjeej:searchlibrarysemanticallyasync",
      "ownerSymbolName": "SearchLibrarySemanticallyAsync",
      "entryNodeId": "method:1odjeej:searchlibrarysemanticallyasync__entry",
      "exitNodeIds": [
        "method:1odjeej:searchlibrarysemanticallyasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1odjeej:searchlibrarysemanticallyasync__entry",
          "kind": "entry",
          "label": "SearchLibrarySemanticallyAsync entry",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Perform a semantic search over the library for a tenant and return top results up to a limit."
        },
        {
          "id": "method:1odjeej:searchlibrarysemanticallyasync__body",
          "kind": "statement",
          "label": "Perform a semantic search over the library for a tenant and return top results up to a limit.",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:1odjeej:searchlibrarysemanticallyasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1odjeej:searchlibrarysemanticallyasync__entry_body",
          "from": "method:1odjeej:searchlibrarysemanticallyasync__entry",
          "to": "method:1odjeej:searchlibrarysemanticallyasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 14,
          "confidence": 0.75
        },
        {
          "id": "method:1odjeej:searchlibrarysemanticallyasync__body__implicit_return",
          "from": "method:1odjeej:searchlibrarysemanticallyasync__body",
          "to": "method:1odjeej:searchlibrarysemanticallyasync__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method SearchLibrarySemanticallyAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:f76by4:askquestionasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:f76by4:askquestionasync",
      "ownerSymbolName": "AskQuestionAsync",
      "entryNodeId": "method:f76by4:askquestionasync__entry",
      "exitNodeIds": [
        "method:f76by4:askquestionasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:f76by4:askquestionasync__entry",
          "kind": "entry",
          "label": "AskQuestionAsync entry",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Ask a question against tenant (and optional ebook) data and return a grounded response, limited by passed limit."
        },
        {
          "id": "method:f76by4:askquestionasync__body",
          "kind": "statement",
          "label": "Ask a question against tenant (and optional ebook) data and return a grounded response, limited by passed limit.",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:f76by4:askquestionasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:f76by4:askquestionasync__entry_body",
          "from": "method:f76by4:askquestionasync__entry",
          "to": "method:f76by4:askquestionasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 15,
          "confidence": 0.75
        },
        {
          "id": "method:f76by4:askquestionasync__body__implicit_return",
          "from": "method:f76by4:askquestionasync__body",
          "to": "method:f76by4:askquestionasync__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method AskQuestionAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:26njdb:clearcacheasync__fragment",
      "ownerFileId": "file:pvs6tn:iknowledgeservice-cs",
      "ownerSymbolId": "method:26njdb:clearcacheasync",
      "ownerSymbolName": "ClearCacheAsync",
      "entryNodeId": "method:26njdb:clearcacheasync__entry",
      "exitNodeIds": [
        "method:26njdb:clearcacheasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:26njdb:clearcacheasync__entry",
          "kind": "entry",
          "label": "ClearCacheAsync entry",
          "line": 16,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Clear any service-level caches used by the knowledge subsystem."
        },
        {
          "id": "method:26njdb:clearcacheasync__body",
          "kind": "statement",
          "label": "Clear any service-level caches used by the knowledge subsystem.",
          "line": 16,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:26njdb:clearcacheasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:26njdb:clearcacheasync__entry_body",
          "from": "method:26njdb:clearcacheasync__entry",
          "to": "method:26njdb:clearcacheasync__body",
          "kind": "next",
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 16,
          "confidence": 0.75
        },
        {
          "id": "method:26njdb:clearcacheasync__body__implicit_return",
          "from": "method:26njdb:clearcacheasync__body",
          "to": "method:26njdb:clearcacheasync__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 16,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method ClearCacheAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wrq6fu:savestringasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:1wrq6fu:savestringasync",
      "ownerSymbolName": "SaveStringAsync",
      "entryNodeId": "method:1wrq6fu:savestringasync__entry",
      "exitNodeIds": [
        "method:1wrq6fu:savestringasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1wrq6fu:savestringasync__entry",
          "kind": "entry",
          "label": "SaveStringAsync entry",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Persist a non-secure string value under the given key asynchronously."
        },
        {
          "id": "method:1wrq6fu:savestringasync__action_7_persistence_write_7__linear",
          "kind": "statement",
          "label": "Save non-secure string",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Persists key/value to native storage (non-secure)"
        },
        {
          "id": "method:1wrq6fu:savestringasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1wrq6fu:savestringasync__entry__method:1wrq6fu:savestringasync__action_7_persistence_write_7__linear",
          "from": "method:1wrq6fu:savestringasync__entry",
          "to": "method:1wrq6fu:savestringasync__action_7_persistence_write_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wrq6fu:savestringasync__action_7_persistence_write_7__linear__implicit_return",
          "from": "method:1wrq6fu:savestringasync__action_7_persistence_write_7__linear",
          "to": "method:1wrq6fu:savestringasync__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method SaveStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19tpzwe:getstringasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:19tpzwe:getstringasync",
      "ownerSymbolName": "GetStringAsync",
      "entryNodeId": "method:19tpzwe:getstringasync__entry",
      "exitNodeIds": [
        "method:19tpzwe:getstringasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:19tpzwe:getstringasync__entry",
          "kind": "entry",
          "label": "GetStringAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Retrieve a non-secure string value by key asynchronously."
        },
        {
          "id": "method:19tpzwe:getstringasync__action_8_persistence_read_8__linear",
          "kind": "statement",
          "label": "Get non-secure string",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Reads value for key from native storage and returns Result<string?>"
        },
        {
          "id": "method:19tpzwe:getstringasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:19tpzwe:getstringasync__entry__method:19tpzwe:getstringasync__action_8_persistence_read_8__linear",
          "from": "method:19tpzwe:getstringasync__entry",
          "to": "method:19tpzwe:getstringasync__action_8_persistence_read_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19tpzwe:getstringasync__action_8_persistence_read_8__linear__implicit_return",
          "from": "method:19tpzwe:getstringasync__action_8_persistence_read_8__linear",
          "to": "method:19tpzwe:getstringasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method GetStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8lkc9b:saveboolasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:8lkc9b:saveboolasync",
      "ownerSymbolName": "SaveBoolAsync",
      "entryNodeId": "method:8lkc9b:saveboolasync__entry",
      "exitNodeIds": [
        "method:8lkc9b:saveboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8lkc9b:saveboolasync__entry",
          "kind": "entry",
          "label": "SaveBoolAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Persist a boolean value under the given key asynchronously."
        },
        {
          "id": "method:8lkc9b:saveboolasync__action_9_persistence_write_9__linear",
          "kind": "statement",
          "label": "Save boolean",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Persists key/boolean to native storage"
        },
        {
          "id": "method:8lkc9b:saveboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8lkc9b:saveboolasync__entry__method:8lkc9b:saveboolasync__action_9_persistence_write_9__linear",
          "from": "method:8lkc9b:saveboolasync__entry",
          "to": "method:8lkc9b:saveboolasync__action_9_persistence_write_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lkc9b:saveboolasync__action_9_persistence_write_9__linear__implicit_return",
          "from": "method:8lkc9b:saveboolasync__action_9_persistence_write_9__linear",
          "to": "method:8lkc9b:saveboolasync__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method SaveBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oljw52:getboolasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:1oljw52:getboolasync",
      "ownerSymbolName": "GetBoolAsync",
      "entryNodeId": "method:1oljw52:getboolasync__entry",
      "exitNodeIds": [
        "method:1oljw52:getboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oljw52:getboolasync__entry",
          "kind": "entry",
          "label": "GetBoolAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Retrieve a boolean value by key asynchronously, returning a provided default if absent."
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_persistence_read_10__linear",
          "kind": "statement",
          "label": "Get boolean with default",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Reads boolean for key and applies defaultValue when key not present"
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition",
          "kind": "condition",
          "label": "defaultValue parameter present",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Method signature exposes a defaultValue to be used when no stored value exists"
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__true",
          "kind": "branch-true",
          "label": "use-provided-default",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__false",
          "kind": "branch-false",
          "label": "return-read-value",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oljw52:getboolasync__entry__method:1oljw52:getboolasync__action_10_persistence_read_10__linear",
          "from": "method:1oljw52:getboolasync__entry",
          "to": "method:1oljw52:getboolasync__action_10_persistence_read_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_persistence_read_10__linear__method:1oljw52:getboolasync__action_10_guard_clause_10__condition",
          "from": "method:1oljw52:getboolasync__action_10_persistence_read_10__linear",
          "to": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition__method:1oljw52:getboolasync__action_10_guard_clause_10__true",
          "from": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition",
          "to": "method:1oljw52:getboolasync__action_10_guard_clause_10__true",
          "kind": "condition-true",
          "label": "use-provided-default",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition__method:1oljw52:getboolasync__action_10_guard_clause_10__false",
          "from": "method:1oljw52:getboolasync__action_10_guard_clause_10__condition",
          "to": "method:1oljw52:getboolasync__action_10_guard_clause_10__false",
          "kind": "condition-false",
          "label": "return-read-value",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__true__method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "from": "method:1oljw52:getboolasync__action_10_guard_clause_10__true",
          "to": "method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__false__method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "from": "method:1oljw52:getboolasync__action_10_guard_clause_10__false",
          "to": "method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oljw52:getboolasync__action_10_guard_clause_10__merge__implicit_return",
          "from": "method:1oljw52:getboolasync__action_10_guard_clause_10__merge",
          "to": "method:1oljw52:getboolasync__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1oljw52:getboolasync__action_10_guard_clause_10__merge"
      ],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method GetBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ne3mm3:removeasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:ne3mm3:removeasync",
      "ownerSymbolName": "RemoveAsync",
      "entryNodeId": "method:ne3mm3:removeasync__entry",
      "exitNodeIds": [
        "method:ne3mm3:removeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ne3mm3:removeasync__entry",
          "kind": "entry",
          "label": "RemoveAsync entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Remove a non-secure entry by key from native storage asynchronously."
        },
        {
          "id": "method:ne3mm3:removeasync__action_11_persistence_remove_11__linear",
          "kind": "statement",
          "label": "Remove non-secure key",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Deletes the key from native storage"
        },
        {
          "id": "method:ne3mm3:removeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ne3mm3:removeasync__entry__method:ne3mm3:removeasync__action_11_persistence_remove_11__linear",
          "from": "method:ne3mm3:removeasync__entry",
          "to": "method:ne3mm3:removeasync__action_11_persistence_remove_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ne3mm3:removeasync__action_11_persistence_remove_11__linear__implicit_return",
          "from": "method:ne3mm3:removeasync__action_11_persistence_remove_11__linear",
          "to": "method:ne3mm3:removeasync__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method RemoveAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:zxocvw:savesecurestring__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:zxocvw:savesecurestring",
      "ownerSymbolName": "SaveSecureString",
      "entryNodeId": "method:zxocvw:savesecurestring__entry",
      "exitNodeIds": [
        "method:zxocvw:savesecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:zxocvw:savesecurestring__entry",
          "kind": "entry",
          "label": "SaveSecureString entry",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Persist a string securely (platform secure storage) under the given key asynchronously."
        },
        {
          "id": "method:zxocvw:savesecurestring__action_13_persistence_write_13__linear",
          "kind": "statement",
          "label": "Save secure string",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Persists key/value to platform secure storage (e.g., keychain/keystore)"
        },
        {
          "id": "method:zxocvw:savesecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:zxocvw:savesecurestring__entry__method:zxocvw:savesecurestring__action_13_persistence_write_13__linear",
          "from": "method:zxocvw:savesecurestring__entry",
          "to": "method:zxocvw:savesecurestring__action_13_persistence_write_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:zxocvw:savesecurestring__action_13_persistence_write_13__linear__implicit_return",
          "from": "method:zxocvw:savesecurestring__action_13_persistence_write_13__linear",
          "to": "method:zxocvw:savesecurestring__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method SaveSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1070aok:getsecurestring__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:1070aok:getsecurestring",
      "ownerSymbolName": "GetSecureString",
      "entryNodeId": "method:1070aok:getsecurestring__entry",
      "exitNodeIds": [
        "method:1070aok:getsecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1070aok:getsecurestring__entry",
          "kind": "entry",
          "label": "GetSecureString entry",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Retrieve a secure string by key from platform secure storage asynchronously."
        },
        {
          "id": "method:1070aok:getsecurestring__action_14_persistence_read_14__linear",
          "kind": "statement",
          "label": "Get secure string",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Reads secure value for key from platform secure storage and returns Result<string?>"
        },
        {
          "id": "method:1070aok:getsecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1070aok:getsecurestring__entry__method:1070aok:getsecurestring__action_14_persistence_read_14__linear",
          "from": "method:1070aok:getsecurestring__entry",
          "to": "method:1070aok:getsecurestring__action_14_persistence_read_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1070aok:getsecurestring__action_14_persistence_read_14__linear__implicit_return",
          "from": "method:1070aok:getsecurestring__action_14_persistence_read_14__linear",
          "to": "method:1070aok:getsecurestring__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method GetSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:xfwbbe:removesecureasync__fragment",
      "ownerFileId": "file:1it42kj:inativestorageservice-cs",
      "ownerSymbolId": "method:xfwbbe:removesecureasync",
      "ownerSymbolName": "RemoveSecureAsync",
      "entryNodeId": "method:xfwbbe:removesecureasync__entry",
      "exitNodeIds": [
        "method:xfwbbe:removesecureasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:xfwbbe:removesecureasync__entry",
          "kind": "entry",
          "label": "RemoveSecureAsync entry",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Remove a secure entry by key from platform secure storage asynchronously."
        },
        {
          "id": "method:xfwbbe:removesecureasync__action_15_persistence_remove_15__linear",
          "kind": "statement",
          "label": "Remove secure key",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Deletes the key from platform secure storage"
        },
        {
          "id": "method:xfwbbe:removesecureasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:xfwbbe:removesecureasync__entry__method:xfwbbe:removesecureasync__action_15_persistence_remove_15__linear",
          "from": "method:xfwbbe:removesecureasync__entry",
          "to": "method:xfwbbe:removesecureasync__action_15_persistence_remove_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:xfwbbe:removesecureasync__action_15_persistence_remove_15__linear__implicit_return",
          "from": "method:xfwbbe:removesecureasync__action_15_persistence_remove_15__linear",
          "to": "method:xfwbbe:removesecureasync__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method RemoveSecureAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ptkxhj:vibratesuccessasync__fragment",
      "ownerFileId": "file:wb18l0:iplatformservice-cs",
      "ownerSymbolId": "method:ptkxhj:vibratesuccessasync",
      "ownerSymbolName": "VibrateSuccessAsync",
      "entryNodeId": "method:ptkxhj:vibratesuccessasync__entry",
      "exitNodeIds": [
        "method:ptkxhj:vibratesuccessasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ptkxhj:vibratesuccessasync__entry",
          "kind": "entry",
          "label": "VibrateSuccessAsync entry",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.99,
          "detail": "Contract for invoking a short/success vibration on the device."
        },
        {
          "id": "method:ptkxhj:vibratesuccessasync__action_7_contract_7__linear",
          "kind": "statement",
          "label": "interface method - no implementation",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "Declared as Task<Result> VibrateSuccessAsync(); implemented by platform-specific classes."
        },
        {
          "id": "method:ptkxhj:vibratesuccessasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ptkxhj:vibratesuccessasync__entry__method:ptkxhj:vibratesuccessasync__action_7_contract_7__linear",
          "from": "method:ptkxhj:vibratesuccessasync__entry",
          "to": "method:ptkxhj:vibratesuccessasync__action_7_contract_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ptkxhj:vibratesuccessasync__action_7_contract_7__linear__implicit_return",
          "from": "method:ptkxhj:vibratesuccessasync__action_7_contract_7__linear",
          "to": "method:ptkxhj:vibratesuccessasync__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method VibrateSuccessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:qdnq0x:vibrateerrorasync__fragment",
      "ownerFileId": "file:wb18l0:iplatformservice-cs",
      "ownerSymbolId": "method:qdnq0x:vibrateerrorasync",
      "ownerSymbolName": "VibrateErrorAsync",
      "entryNodeId": "method:qdnq0x:vibrateerrorasync__entry",
      "exitNodeIds": [
        "method:qdnq0x:vibrateerrorasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:qdnq0x:vibrateerrorasync__entry",
          "kind": "entry",
          "label": "VibrateErrorAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.99,
          "detail": "Contract for invoking an error/alert vibration on the device."
        },
        {
          "id": "method:qdnq0x:vibrateerrorasync__action_8_contract_8__linear",
          "kind": "statement",
          "label": "interface method - no implementation",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "Declared as Task<Result> VibrateErrorAsync(); implemented by platform-specific classes."
        },
        {
          "id": "method:qdnq0x:vibrateerrorasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:qdnq0x:vibrateerrorasync__entry__method:qdnq0x:vibrateerrorasync__action_8_contract_8__linear",
          "from": "method:qdnq0x:vibrateerrorasync__entry",
          "to": "method:qdnq0x:vibrateerrorasync__action_8_contract_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qdnq0x:vibrateerrorasync__action_8_contract_8__linear__implicit_return",
          "from": "method:qdnq0x:vibrateerrorasync__action_8_contract_8__linear",
          "to": "method:qdnq0x:vibrateerrorasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method VibrateErrorAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:sdo0jm:vibrateasync__fragment",
      "ownerFileId": "file:wb18l0:iplatformservice-cs",
      "ownerSymbolId": "method:sdo0jm:vibrateasync",
      "ownerSymbolName": "VibrateAsync",
      "entryNodeId": "method:sdo0jm:vibrateasync__entry",
      "exitNodeIds": [
        "method:sdo0jm:vibrateasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:sdo0jm:vibrateasync__entry",
          "kind": "entry",
          "label": "VibrateAsync entry",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.99,
          "detail": "Contract for invoking a vibration for a specified duration in milliseconds."
        },
        {
          "id": "method:sdo0jm:vibrateasync__action_9_contract_9__linear",
          "kind": "statement",
          "label": "interface method - no implementation",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "Declared as Task<Result> VibrateAsync(int milliseconds); implemented by platform-specific classes."
        },
        {
          "id": "method:sdo0jm:vibrateasync__action_9_parameter_9__linear",
          "kind": "statement",
          "label": "duration",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "milliseconds parameter controls vibration duration."
        },
        {
          "id": "method:sdo0jm:vibrateasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:sdo0jm:vibrateasync__entry__method:sdo0jm:vibrateasync__action_9_contract_9__linear",
          "from": "method:sdo0jm:vibrateasync__entry",
          "to": "method:sdo0jm:vibrateasync__action_9_contract_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:sdo0jm:vibrateasync__action_9_contract_9__linear__method:sdo0jm:vibrateasync__action_9_parameter_9__linear",
          "from": "method:sdo0jm:vibrateasync__action_9_contract_9__linear",
          "to": "method:sdo0jm:vibrateasync__action_9_parameter_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:sdo0jm:vibrateasync__action_9_parameter_9__linear__implicit_return",
          "from": "method:sdo0jm:vibrateasync__action_9_parameter_9__linear",
          "to": "method:sdo0jm:vibrateasync__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method VibrateAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:w31hua:getdevicecontext__fragment",
      "ownerFileId": "file:wb18l0:iplatformservice-cs",
      "ownerSymbolId": "method:w31hua:getdevicecontext",
      "ownerSymbolName": "GetDeviceContext",
      "entryNodeId": "method:w31hua:getdevicecontext__entry",
      "exitNodeIds": [
        "method:w31hua:getdevicecontext__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:w31hua:getdevicecontext__entry",
          "kind": "entry",
          "label": "GetDeviceContext entry",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.99,
          "detail": "Contract for obtaining device metadata (model, manufacturer, type, orientation) synchronously."
        },
        {
          "id": "method:w31hua:getdevicecontext__action_10_contract_10__linear",
          "kind": "statement",
          "label": "interface method - no implementation",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "Returns a FluentResults.Result wrapping DeviceContext; implemented by platform-specific classes."
        },
        {
          "id": "method:w31hua:getdevicecontext__action_10_return_shape_10__linear",
          "kind": "statement",
          "label": "DeviceContext",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7,
          "detail": "Synchronous Result<DeviceContext> return type indicating success/failure plus payload."
        },
        {
          "id": "method:w31hua:getdevicecontext__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:w31hua:getdevicecontext__entry__method:w31hua:getdevicecontext__action_10_contract_10__linear",
          "from": "method:w31hua:getdevicecontext__entry",
          "to": "method:w31hua:getdevicecontext__action_10_contract_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:w31hua:getdevicecontext__action_10_contract_10__linear__method:w31hua:getdevicecontext__action_10_return_shape_10__linear",
          "from": "method:w31hua:getdevicecontext__action_10_contract_10__linear",
          "to": "method:w31hua:getdevicecontext__action_10_return_shape_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:w31hua:getdevicecontext__action_10_return_shape_10__linear__implicit_return",
          "from": "method:w31hua:getdevicecontext__action_10_return_shape_10__linear",
          "to": "method:w31hua:getdevicecontext__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method GetDeviceContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10jkor8:verifygroundednesscommandhandler__fragment",
      "ownerFileId": "file:2eckht:verifygroundednesscommand-cs",
      "ownerSymbolId": "method:10jkor8:verifygroundednesscommandhandler",
      "ownerSymbolName": "VerifyGroundednessCommandHandler",
      "entryNodeId": "method:10jkor8:verifygroundednesscommandhandler__entry",
      "exitNodeIds": [
        "method:10jkor8:verifygroundednesscommandhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10jkor8:verifygroundednesscommandhandler__entry",
          "kind": "entry",
          "label": "VerifyGroundednessCommandHandler entry",
          "line": 13,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.99,
          "detail": "Constructor that receives and stores the IKnowledgeService dependency via DI."
        },
        {
          "id": "method:10jkor8:verifygroundednesscommandhandler__action_15_assign_15__linear",
          "kind": "statement",
          "label": "Store injected dependency",
          "line": 15,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7,
          "detail": "_knowledgeService = knowledgeService"
        },
        {
          "id": "method:10jkor8:verifygroundednesscommandhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10jkor8:verifygroundednesscommandhandler__entry__method:10jkor8:verifygroundednesscommandhandler__action_15_assign_15__linear",
          "from": "method:10jkor8:verifygroundednesscommandhandler__entry",
          "to": "method:10jkor8:verifygroundednesscommandhandler__action_15_assign_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10jkor8:verifygroundednesscommandhandler__action_15_assign_15__linear__implicit_return",
          "from": "method:10jkor8:verifygroundednesscommandhandler__action_15_assign_15__linear",
          "to": "method:10jkor8:verifygroundednesscommandhandler__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method VerifyGroundednessCommandHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1fl6nt2:handle__fragment",
      "ownerFileId": "file:2eckht:verifygroundednesscommand-cs",
      "ownerSymbolId": "method:1fl6nt2:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:1fl6nt2:handle__entry",
      "exitNodeIds": [
        "method:1fl6nt2:handle__action_20_handle_return_20_1__return",
        "method:1fl6nt2:handle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1fl6nt2:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.99,
          "detail": "Handles the VerifyGroundednessCommand by calling the knowledge service to verify groundedness and returning the service result."
        },
        {
          "id": "method:1fl6nt2:handle__action_20_handle_await_20_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.81,
          "detail": "return await _knowledgeService.VerifyGroundednessAsync(request.Answer, request.Context, request.TenantId, cancellationToken);"
        },
        {
          "id": "method:1fl6nt2:handle__action_20_handle_return_20_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7,
          "detail": "return await _knowledgeService.VerifyGroundednessAsync(request.Answer, request.Context, request.TenantId, cancellationToken);"
        },
        {
          "id": "method:1fl6nt2:handle__action_20_async_return_20__linear",
          "kind": "statement",
          "label": "Return result from external service",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7,
          "detail": "returns Task<Result<GroundednessResult>>"
        },
        {
          "id": "method:1fl6nt2:handle__action_20_external_call_20__linear",
          "kind": "http-call",
          "label": "Delegate groundedness verification to knowledge service",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7,
          "detail": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult>"
        },
        {
          "id": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync",
          "kind": "call",
          "label": "VerifyGroundednessAsync",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.88,
          "detail": "request.Answer, request.Context, request.TenantId, cancellationToken"
        },
        {
          "id": "method:1fl6nt2:handle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1fl6nt2:handle__entry__method:1fl6nt2:handle__action_20_handle_await_20_0__await",
          "from": "method:1fl6nt2:handle__entry",
          "to": "method:1fl6nt2:handle__action_20_handle_await_20_0__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1fl6nt2:handle__action_20_handle_await_20_0__await__method:1fl6nt2:handle__action_20_handle_return_20_1__return",
          "from": "method:1fl6nt2:handle__action_20_handle_await_20_0__await",
          "to": "method:1fl6nt2:handle__action_20_handle_return_20_1__return",
          "kind": "return",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fl6nt2:handle__action_20_handle_return_20_1__return__method:1fl6nt2:handle__action_20_async_return_20__linear",
          "from": "method:1fl6nt2:handle__action_20_handle_return_20_1__return",
          "to": "method:1fl6nt2:handle__action_20_async_return_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fl6nt2:handle__action_20_async_return_20__linear__method:1fl6nt2:handle__action_20_external_call_20__linear",
          "from": "method:1fl6nt2:handle__action_20_async_return_20__linear",
          "to": "method:1fl6nt2:handle__action_20_external_call_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fl6nt2:handle__action_20_external_call_20__linear__call_method:1fl6nt2:handle__call_20_VerifyGroundednessAsync",
          "from": "method:1fl6nt2:handle__action_20_external_call_20__linear",
          "to": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync",
          "kind": "call",
          "label": "request.Answer, request.Context, request.TenantId, cancellationToken",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync__implicit_return",
          "from": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync",
          "to": "method:1fl6nt2:handle__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync__jump_unknown_VerifyGroundednessAsync",
          "fromNodeId": "method:1fl6nt2:handle__call_20_VerifyGroundednessAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "VerifyGroundednessAsync",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "reason": "Call target VerifyGroundednessAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8299999999999998,
      "lineSpan": {
        "start": 18,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jlw375:ingestebookcommandhandler__fragment",
      "ownerFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "ownerSymbolId": "method:jlw375:ingestebookcommandhandler",
      "ownerSymbolName": "IngestEbookCommandHandler",
      "entryNodeId": "method:jlw375:ingestebookcommandhandler__entry",
      "exitNodeIds": [
        "method:jlw375:ingestebookcommandhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:jlw375:ingestebookcommandhandler__entry",
          "kind": "entry",
          "label": "IngestEbookCommandHandler entry",
          "line": 15,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.99,
          "detail": "Constructor; receives repository and storage service via DI and assigns to fields."
        },
        {
          "id": "method:jlw375:ingestebookcommandhandler__action_19_assignment_19__linear",
          "kind": "statement",
          "label": "Assign DI dependencies",
          "line": 19,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "_ebookRepository = ebookRepository; _storageService = storageService;"
        },
        {
          "id": "method:jlw375:ingestebookcommandhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:jlw375:ingestebookcommandhandler__entry__method:jlw375:ingestebookcommandhandler__action_19_assignment_19__linear",
          "from": "method:jlw375:ingestebookcommandhandler__entry",
          "to": "method:jlw375:ingestebookcommandhandler__action_19_assignment_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jlw375:ingestebookcommandhandler__action_19_assignment_19__linear__implicit_return",
          "from": "method:jlw375:ingestebookcommandhandler__action_19_assignment_19__linear",
          "to": "method:jlw375:ingestebookcommandhandler__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method IngestEbookCommandHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:gy7qh:handle__fragment",
      "ownerFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "ownerSymbolId": "method:gy7qh:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:gy7qh:handle__entry",
      "exitNodeIds": [
        "method:gy7qh:handle__action_38_handle_return_38_4__return",
        "method:gy7qh:handle__action_42_handle_return_42_6__return",
        "method:gy7qh:handle__action_75_handle_return_75_12__return",
        "method:gy7qh:handle__action_75_return_75__return",
        "method:gy7qh:handle__action_79_handle_return_79_14__return"
      ],
      "nodes": [
        {
          "id": "method:gy7qh:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 23,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.99,
          "detail": "Orchestrates ebook ingestion: saves epub/cover to storage, resolves or creates author, constructs Ebook entity, persists it and returns the created Ebook Id or failure."
        },
        {
          "id": "method:gy7qh:handle__action_28_try_catch_28__linear",
          "kind": "statement",
          "label": "Storage save with I/O and generic exception handling",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Try saving epub and optional cover; catch IOException -> return storage I/O failure Result.Fail; catch Exception -> return storage failure Result.Fail"
        },
        {
          "id": "method:gy7qh:handle__action_28_handle_try_28_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:gy7qh:handle__action_31_handle_await_31_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81,
          "detail": "epubPath = await _storageService.SaveEbookAsync(request.EpubData, $\"{request.Title}.epub\");"
        },
        {
          "id": "method:gy7qh:handle__call_31_SaveEbookAsync",
          "kind": "call",
          "label": "SaveEbookAsync",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "request.EpubData, filename = \"{request.Title}.epub\""
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__condition",
          "kind": "condition",
          "label": "request.CoverImage != null && request.CoverImage.Length > 0",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Conditional call to SaveCoverAsync when image present"
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__true",
          "kind": "branch-true",
          "label": "save cover and set coverUrl",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__false",
          "kind": "branch-false",
          "label": "no cover (coverUrl = null)",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__merge",
          "kind": "statement",
          "label": "merge",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_33_handle_await_33_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81,
          "detail": "? await _storageService.SaveCoverAsync(request.CoverImage, $\"{request.Title}_cover.jpg\")"
        },
        {
          "id": "method:gy7qh:handle__call_33_SaveCoverAsync",
          "kind": "call",
          "label": "SaveCoverAsync",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "request.CoverImage, filename = \"{request.Title}_cover.jpg\" (called only if CoverImage present)"
        },
        {
          "id": "method:gy7qh:handle__action_36_handle_catch_36_3__catch",
          "kind": "catch",
          "label": "catch IOException ex",
          "line": 36,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86,
          "detail": "catch (IOException ex)"
        },
        {
          "id": "method:gy7qh:handle__action_38_handle_return_38_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 38,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Storage I/O failure: {ex.Message}\").CausedBy(ex));"
        },
        {
          "id": "method:gy7qh:handle__action_40_handle_catch_40_5__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:gy7qh:handle__action_42_handle_return_42_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 42,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Storage failure: {ex.Message}\").CausedBy(ex));"
        },
        {
          "id": "method:gy7qh:handle__action_45_handle_try_45_7__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 45,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.AuthorName)",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Sets authorName to 'Unknown Author' if missing, else trimmed value"
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__true",
          "kind": "branch-true",
          "label": "use 'Unknown Author'",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__false",
          "kind": "branch-false",
          "label": "use trimmed request.AuthorName",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_52_handle_await_52_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81,
          "detail": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);"
        },
        {
          "id": "method:gy7qh:handle__action_52_handle_repository_read_52_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86,
          "detail": "var author = await _ebookRepository.FindAuthorByNameAsync(authorName, cancellationToken);"
        },
        {
          "id": "method:gy7qh:handle__action_52_external_repository_read_52__linear",
          "kind": "statement",
          "label": "Find author case-insensitively (via repository)",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Calls FindAuthorByNameAsync and branches on null"
        },
        {
          "id": "method:gy7qh:handle__call_52_FindAuthorByNameAsync",
          "kind": "call",
          "label": "FindAuthorByNameAsync",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "authorName (trimmed or 'Unknown Author'), cancellationToken"
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__condition",
          "kind": "condition",
          "label": "author == null",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78,
          "detail": "if (author == null)"
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_branch_fallback_53__linear",
          "kind": "statement",
          "label": "Create missing author",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Adds new Author to repository when not found"
        },
        {
          "id": "method:gy7qh:handle__call_56_AddAuthor",
          "kind": "call",
          "label": "AddAuthor",
          "line": 56,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "new Author { Name = authorName } (when author not found)"
        },
        {
          "id": "method:gy7qh:handle__action_60_entity_construction_60__linear",
          "kind": "statement",
          "label": "Construct Ebook entity",
          "line": 60,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Populate Title, Author, FilePath, CoverUrl, Description, UserId, TenantId, AddedDate = DateTime.UtcNow"
        },
        {
          "id": "method:gy7qh:handle__action_72_repository_write_72__linear",
          "kind": "db-write",
          "label": "Add ebook and persist",
          "line": 72,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Calls AddEbook and SaveChangesAsync to persist the new entity"
        },
        {
          "id": "method:gy7qh:handle__call_72_AddEbook",
          "kind": "call",
          "label": "AddEbook",
          "line": 72,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "ebook (Ebook entity constructed from request + paths + metadata)"
        },
        {
          "id": "method:gy7qh:handle__action_73_handle_await_73_11__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81,
          "detail": "await _ebookRepository.SaveChangesAsync(cancellationToken);"
        },
        {
          "id": "method:gy7qh:handle__call_73_SaveChangesAsync",
          "kind": "call",
          "label": "SaveChangesAsync",
          "line": 73,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:gy7qh:handle__action_75_handle_return_75_12__return",
          "kind": "return",
          "label": "Returns result",
          "line": 75,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(ebook.Id);"
        },
        {
          "id": "method:gy7qh:handle__action_75_return_75__return",
          "kind": "return",
          "label": "Return success with Ebook Id",
          "line": 75,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(ebook.Id) returned on successful save"
        },
        {
          "id": "method:gy7qh:handle__action_77_handle_catch_77_13__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 77,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:gy7qh:handle__action_77_try_catch_77__linear",
          "kind": "statement",
          "label": "Database error handling during persistence",
          "line": 77,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "Wraps persistence in try/catch; on Exception returns Result.Fail with database error"
        },
        {
          "id": "method:gy7qh:handle__action_79_handle_return_79_14__return",
          "kind": "return",
          "label": "Returns result",
          "line": 79,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Database error during ingestion: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:gy7qh:handle__entry__method:gy7qh:handle__action_28_try_catch_28__linear",
          "from": "method:gy7qh:handle__entry",
          "to": "method:gy7qh:handle__action_28_try_catch_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_28_try_catch_28__linear__method:gy7qh:handle__action_28_handle_try_28_0__try",
          "from": "method:gy7qh:handle__action_28_try_catch_28__linear",
          "to": "method:gy7qh:handle__action_28_handle_try_28_0__try",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:gy7qh:handle__action_28_handle_try_28_0__try__method:gy7qh:handle__action_31_handle_await_31_1__await",
          "from": "method:gy7qh:handle__action_28_handle_try_28_0__try",
          "to": "method:gy7qh:handle__action_31_handle_await_31_1__await",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gy7qh:handle__action_31_handle_await_31_1__await__call_method:gy7qh:handle__call_31_SaveEbookAsync",
          "from": "method:gy7qh:handle__action_31_handle_await_31_1__await",
          "to": "method:gy7qh:handle__call_31_SaveEbookAsync",
          "kind": "call",
          "label": "request.EpubData, filename = \"{request.Title}.epub\"",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_31_SaveEbookAsync__method:gy7qh:handle__action_32_branch_32__condition",
          "from": "method:gy7qh:handle__call_31_SaveEbookAsync",
          "to": "method:gy7qh:handle__action_32_branch_32__condition",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__condition__method:gy7qh:handle__action_32_branch_32__true",
          "from": "method:gy7qh:handle__action_32_branch_32__condition",
          "to": "method:gy7qh:handle__action_32_branch_32__true",
          "kind": "condition-true",
          "label": "save cover and set coverUrl",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__condition__method:gy7qh:handle__action_32_branch_32__false",
          "from": "method:gy7qh:handle__action_32_branch_32__condition",
          "to": "method:gy7qh:handle__action_32_branch_32__false",
          "kind": "condition-false",
          "label": "no cover (coverUrl = null)",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__true__method:gy7qh:handle__action_32_branch_32__merge",
          "from": "method:gy7qh:handle__action_32_branch_32__true",
          "to": "method:gy7qh:handle__action_32_branch_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__false__method:gy7qh:handle__action_32_branch_32__merge",
          "from": "method:gy7qh:handle__action_32_branch_32__false",
          "to": "method:gy7qh:handle__action_32_branch_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_32_branch_32__merge__method:gy7qh:handle__action_33_handle_await_33_2__await",
          "from": "method:gy7qh:handle__action_32_branch_32__merge",
          "to": "method:gy7qh:handle__action_33_handle_await_33_2__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gy7qh:handle__action_33_handle_await_33_2__await__call_method:gy7qh:handle__call_33_SaveCoverAsync",
          "from": "method:gy7qh:handle__action_33_handle_await_33_2__await",
          "to": "method:gy7qh:handle__call_33_SaveCoverAsync",
          "kind": "call",
          "label": "request.CoverImage, filename = \"{request.Title}_cover.jpg\" (called only if CoverImage present)",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_33_SaveCoverAsync__method:gy7qh:handle__action_36_handle_catch_36_3__catch",
          "from": "method:gy7qh:handle__call_33_SaveCoverAsync",
          "to": "method:gy7qh:handle__action_36_handle_catch_36_3__catch",
          "kind": "exception",
          "line": 36,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gy7qh:handle__action_36_handle_catch_36_3__catch__method:gy7qh:handle__action_38_handle_return_38_4__return",
          "from": "method:gy7qh:handle__action_36_handle_catch_36_3__catch",
          "to": "method:gy7qh:handle__action_38_handle_return_38_4__return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_38_handle_return_38_4__return__method:gy7qh:handle__action_40_handle_catch_40_5__catch",
          "from": "method:gy7qh:handle__action_38_handle_return_38_4__return",
          "to": "method:gy7qh:handle__action_40_handle_catch_40_5__catch",
          "kind": "exception",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gy7qh:handle__action_40_handle_catch_40_5__catch__method:gy7qh:handle__action_42_handle_return_42_6__return",
          "from": "method:gy7qh:handle__action_40_handle_catch_40_5__catch",
          "to": "method:gy7qh:handle__action_42_handle_return_42_6__return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_42_handle_return_42_6__return__method:gy7qh:handle__action_45_handle_try_45_7__try",
          "from": "method:gy7qh:handle__action_42_handle_return_42_6__return",
          "to": "method:gy7qh:handle__action_45_handle_try_45_7__try",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:gy7qh:handle__action_45_handle_try_45_7__try__method:gy7qh:handle__action_48_guard_clause_48__condition",
          "from": "method:gy7qh:handle__action_45_handle_try_45_7__try",
          "to": "method:gy7qh:handle__action_48_guard_clause_48__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__condition__method:gy7qh:handle__action_48_guard_clause_48__true",
          "from": "method:gy7qh:handle__action_48_guard_clause_48__condition",
          "to": "method:gy7qh:handle__action_48_guard_clause_48__true",
          "kind": "condition-true",
          "label": "use 'Unknown Author'",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__condition__method:gy7qh:handle__action_48_guard_clause_48__false",
          "from": "method:gy7qh:handle__action_48_guard_clause_48__condition",
          "to": "method:gy7qh:handle__action_48_guard_clause_48__false",
          "kind": "condition-false",
          "label": "use trimmed request.AuthorName",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__true__method:gy7qh:handle__action_48_guard_clause_48__merge",
          "from": "method:gy7qh:handle__action_48_guard_clause_48__true",
          "to": "method:gy7qh:handle__action_48_guard_clause_48__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__false__method:gy7qh:handle__action_48_guard_clause_48__merge",
          "from": "method:gy7qh:handle__action_48_guard_clause_48__false",
          "to": "method:gy7qh:handle__action_48_guard_clause_48__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_48_guard_clause_48__merge__method:gy7qh:handle__action_52_handle_await_52_9__await",
          "from": "method:gy7qh:handle__action_48_guard_clause_48__merge",
          "to": "method:gy7qh:handle__action_52_handle_await_52_9__await",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gy7qh:handle__action_52_handle_await_52_9__await__method:gy7qh:handle__action_52_handle_repository_read_52_8__linear",
          "from": "method:gy7qh:handle__action_52_handle_await_52_9__await",
          "to": "method:gy7qh:handle__action_52_handle_repository_read_52_8__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gy7qh:handle__action_52_handle_repository_read_52_8__linear__method:gy7qh:handle__action_52_external_repository_read_52__linear",
          "from": "method:gy7qh:handle__action_52_handle_repository_read_52_8__linear",
          "to": "method:gy7qh:handle__action_52_external_repository_read_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_52_external_repository_read_52__linear__call_method:gy7qh:handle__call_52_FindAuthorByNameAsync",
          "from": "method:gy7qh:handle__action_52_external_repository_read_52__linear",
          "to": "method:gy7qh:handle__call_52_FindAuthorByNameAsync",
          "kind": "call",
          "label": "authorName (trimmed or 'Unknown Author'), cancellationToken",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_52_FindAuthorByNameAsync__method:gy7qh:handle__action_53_handle_branch_53_10__condition",
          "from": "method:gy7qh:handle__call_52_FindAuthorByNameAsync",
          "to": "method:gy7qh:handle__action_53_handle_branch_53_10__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__condition__method:gy7qh:handle__action_53_handle_branch_53_10__true",
          "from": "method:gy7qh:handle__action_53_handle_branch_53_10__condition",
          "to": "method:gy7qh:handle__action_53_handle_branch_53_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__condition__method:gy7qh:handle__action_53_handle_branch_53_10__false",
          "from": "method:gy7qh:handle__action_53_handle_branch_53_10__condition",
          "to": "method:gy7qh:handle__action_53_handle_branch_53_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__true__method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "from": "method:gy7qh:handle__action_53_handle_branch_53_10__true",
          "to": "method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__false__method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "from": "method:gy7qh:handle__action_53_handle_branch_53_10__false",
          "to": "method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gy7qh:handle__action_53_handle_branch_53_10__merge__method:gy7qh:handle__action_53_branch_fallback_53__linear",
          "from": "method:gy7qh:handle__action_53_handle_branch_53_10__merge",
          "to": "method:gy7qh:handle__action_53_branch_fallback_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_53_branch_fallback_53__linear__call_method:gy7qh:handle__call_56_AddAuthor",
          "from": "method:gy7qh:handle__action_53_branch_fallback_53__linear",
          "to": "method:gy7qh:handle__call_56_AddAuthor",
          "kind": "call",
          "label": "new Author { Name = authorName } (when author not found)",
          "line": 56,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_56_AddAuthor__method:gy7qh:handle__action_60_entity_construction_60__linear",
          "from": "method:gy7qh:handle__call_56_AddAuthor",
          "to": "method:gy7qh:handle__action_60_entity_construction_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_60_entity_construction_60__linear__method:gy7qh:handle__action_72_repository_write_72__linear",
          "from": "method:gy7qh:handle__action_60_entity_construction_60__linear",
          "to": "method:gy7qh:handle__action_72_repository_write_72__linear",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_72_repository_write_72__linear__call_method:gy7qh:handle__call_72_AddEbook",
          "from": "method:gy7qh:handle__action_72_repository_write_72__linear",
          "to": "method:gy7qh:handle__call_72_AddEbook",
          "kind": "call",
          "label": "ebook (Ebook entity constructed from request + paths + metadata)",
          "line": 72,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_72_AddEbook__method:gy7qh:handle__action_73_handle_await_73_11__await",
          "from": "method:gy7qh:handle__call_72_AddEbook",
          "to": "method:gy7qh:handle__action_73_handle_await_73_11__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gy7qh:handle__action_73_handle_await_73_11__await__call_method:gy7qh:handle__call_73_SaveChangesAsync",
          "from": "method:gy7qh:handle__action_73_handle_await_73_11__await",
          "to": "method:gy7qh:handle__call_73_SaveChangesAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 73,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gy7qh:handle__call_73_SaveChangesAsync__method:gy7qh:handle__action_75_handle_return_75_12__return",
          "from": "method:gy7qh:handle__call_73_SaveChangesAsync",
          "to": "method:gy7qh:handle__action_75_handle_return_75_12__return",
          "kind": "return",
          "line": 75,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_75_handle_return_75_12__return__method:gy7qh:handle__action_75_return_75__return",
          "from": "method:gy7qh:handle__action_75_handle_return_75_12__return",
          "to": "method:gy7qh:handle__action_75_return_75__return",
          "kind": "return",
          "line": 75,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_75_return_75__return__method:gy7qh:handle__action_77_handle_catch_77_13__catch",
          "from": "method:gy7qh:handle__action_75_return_75__return",
          "to": "method:gy7qh:handle__action_77_handle_catch_77_13__catch",
          "kind": "exception",
          "line": 77,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gy7qh:handle__action_77_handle_catch_77_13__catch__method:gy7qh:handle__action_77_try_catch_77__linear",
          "from": "method:gy7qh:handle__action_77_handle_catch_77_13__catch",
          "to": "method:gy7qh:handle__action_77_try_catch_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gy7qh:handle__action_77_try_catch_77__linear__method:gy7qh:handle__action_79_handle_return_79_14__return",
          "from": "method:gy7qh:handle__action_77_try_catch_77__linear",
          "to": "method:gy7qh:handle__action_79_handle_return_79_14__return",
          "kind": "return",
          "line": 79,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:gy7qh:handle__call_31_SaveEbookAsync__jump_NexusReader_Application_Abstractions_Services_IBookStorageService_cs_SaveEbookAsync",
          "fromNodeId": "method:gy7qh:handle__call_31_SaveEbookAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/IBookStorageService.cs",
          "targetHint": "SaveEbookAsync",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target SaveEbookAsync in NexusReader.Application.Abstractions.Services/IBookStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gy7qh:handle__call_33_SaveCoverAsync__jump_NexusReader_Application_Abstractions_Services_IBookStorageService_cs_SaveCoverAsync",
          "fromNodeId": "method:gy7qh:handle__call_33_SaveCoverAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/IBookStorageService.cs",
          "targetHint": "SaveCoverAsync",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target SaveCoverAsync in NexusReader.Application.Abstractions.Services/IBookStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gy7qh:handle__call_52_FindAuthorByNameAsync__jump_NexusReader_Application_Abstractions_Persistence_IEbookRepository_cs_FindAuthorByNameAsync",
          "fromNodeId": "method:gy7qh:handle__call_52_FindAuthorByNameAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
          "targetHint": "FindAuthorByNameAsync",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target FindAuthorByNameAsync in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gy7qh:handle__call_56_AddAuthor__jump_NexusReader_Application_Abstractions_Persistence_IEbookRepository_cs_AddAuthor",
          "fromNodeId": "method:gy7qh:handle__call_56_AddAuthor",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
          "targetHint": "AddAuthor",
          "line": 56,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target AddAuthor in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gy7qh:handle__call_72_AddEbook__jump_NexusReader_Application_Abstractions_Persistence_IEbookRepository_cs_AddEbook",
          "fromNodeId": "method:gy7qh:handle__call_72_AddEbook",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
          "targetHint": "AddEbook",
          "line": 72,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target AddEbook in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gy7qh:handle__call_73_SaveChangesAsync__jump_NexusReader_Application_Abstractions_Persistence_IEbookRepository_cs_SaveChangesAsync",
          "fromNodeId": "method:gy7qh:handle__call_73_SaveChangesAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs",
          "targetHint": "SaveChangesAsync",
          "line": 73,
          "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "reason": "Call target SaveChangesAsync in NexusReader.Application.Abstractions.Persistence/IEbookRepository.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:gy7qh:handle__action_32_branch_32__merge",
        "method:gy7qh:handle__action_48_guard_clause_48__merge",
        "method:gy7qh:handle__action_53_handle_branch_53_10__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 23,
        "end": 81
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:e8akyb:handle__fragment",
      "ownerFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "ownerSymbolId": "method:e8akyb:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:e8akyb:handle__entry",
      "exitNodeIds": [
        "method:e8akyb:handle__action_21_return_21__return",
        "method:e8akyb:handle__action_21_handle_return_21_2__return",
        "method:e8akyb:handle__action_24_handle_return_24_3__return",
        "method:e8akyb:handle__action_24_return_24__return"
      ],
      "nodes": [
        {
          "id": "method:e8akyb:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 16,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.99,
          "detail": "Checks the submitted answer; vibrates the device and returns success if correct, otherwise returns a failure Result."
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__condition",
          "kind": "condition",
          "label": "request.SelectedIndex == request.CorrectIndex",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78,
          "detail": "if (request.SelectedIndex == request.CorrectIndex)"
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__condition",
          "kind": "condition",
          "label": "request.SelectedIndex == request.CorrectIndex",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "if selected equals correct index then vibrate and return Result.Ok(); else return Result.Fail(\"Incorrect answer.\")"
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__true",
          "kind": "branch-true",
          "label": "correct -> vibrate and return success",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__false",
          "kind": "branch-false",
          "label": "incorrect -> return failure",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_20_handle_await_20_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.81,
          "detail": "await _platformService.VibrateAsync(50);"
        },
        {
          "id": "method:e8akyb:handle__action_20_external_call_20__linear",
          "kind": "http-call",
          "label": "platform vibrate",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer"
        },
        {
          "id": "method:e8akyb:handle__call_20_VibrateAsync",
          "kind": "call",
          "label": "VibrateAsync",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.88,
          "detail": "50 (int milliseconds)"
        },
        {
          "id": "method:e8akyb:handle__action_21_return_21__return",
          "kind": "return",
          "label": "success-return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "returns Result.Ok() on correct answer"
        },
        {
          "id": "method:e8akyb:handle__action_21_handle_return_21_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:e8akyb:handle__action_24_handle_return_24_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Incorrect answer.\");"
        },
        {
          "id": "method:e8akyb:handle__action_24_return_24__return",
          "kind": "return",
          "label": "failure-return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail(\"Incorrect answer.\") on incorrect answer"
        }
      ],
      "edges": [
        {
          "id": "method:e8akyb:handle__entry__method:e8akyb:handle__action_18_handle_branch_18_0__condition",
          "from": "method:e8akyb:handle__entry",
          "to": "method:e8akyb:handle__action_18_handle_branch_18_0__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__condition__method:e8akyb:handle__action_18_handle_branch_18_0__true",
          "from": "method:e8akyb:handle__action_18_handle_branch_18_0__condition",
          "to": "method:e8akyb:handle__action_18_handle_branch_18_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__condition__method:e8akyb:handle__action_18_handle_branch_18_0__false",
          "from": "method:e8akyb:handle__action_18_handle_branch_18_0__condition",
          "to": "method:e8akyb:handle__action_18_handle_branch_18_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__true__method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "from": "method:e8akyb:handle__action_18_handle_branch_18_0__true",
          "to": "method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__false__method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "from": "method:e8akyb:handle__action_18_handle_branch_18_0__false",
          "to": "method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:e8akyb:handle__action_18_handle_branch_18_0__merge__method:e8akyb:handle__action_18_guard_clause_18__condition",
          "from": "method:e8akyb:handle__action_18_handle_branch_18_0__merge",
          "to": "method:e8akyb:handle__action_18_guard_clause_18__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__condition__method:e8akyb:handle__action_18_guard_clause_18__true",
          "from": "method:e8akyb:handle__action_18_guard_clause_18__condition",
          "to": "method:e8akyb:handle__action_18_guard_clause_18__true",
          "kind": "condition-true",
          "label": "correct -> vibrate and return success",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__condition__method:e8akyb:handle__action_18_guard_clause_18__false",
          "from": "method:e8akyb:handle__action_18_guard_clause_18__condition",
          "to": "method:e8akyb:handle__action_18_guard_clause_18__false",
          "kind": "condition-false",
          "label": "incorrect -> return failure",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__true__method:e8akyb:handle__action_18_guard_clause_18__merge",
          "from": "method:e8akyb:handle__action_18_guard_clause_18__true",
          "to": "method:e8akyb:handle__action_18_guard_clause_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__false__method:e8akyb:handle__action_18_guard_clause_18__merge",
          "from": "method:e8akyb:handle__action_18_guard_clause_18__false",
          "to": "method:e8akyb:handle__action_18_guard_clause_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_18_guard_clause_18__merge__method:e8akyb:handle__action_20_handle_await_20_1__await",
          "from": "method:e8akyb:handle__action_18_guard_clause_18__merge",
          "to": "method:e8akyb:handle__action_20_handle_await_20_1__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:e8akyb:handle__action_20_handle_await_20_1__await__method:e8akyb:handle__action_20_external_call_20__linear",
          "from": "method:e8akyb:handle__action_20_handle_await_20_1__await",
          "to": "method:e8akyb:handle__action_20_external_call_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_20_external_call_20__linear__call_method:e8akyb:handle__call_20_VibrateAsync",
          "from": "method:e8akyb:handle__action_20_external_call_20__linear",
          "to": "method:e8akyb:handle__call_20_VibrateAsync",
          "kind": "call",
          "label": "50 (int milliseconds)",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:e8akyb:handle__call_20_VibrateAsync__method:e8akyb:handle__action_21_return_21__return",
          "from": "method:e8akyb:handle__call_20_VibrateAsync",
          "to": "method:e8akyb:handle__action_21_return_21__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_21_return_21__return__method:e8akyb:handle__action_21_handle_return_21_2__return",
          "from": "method:e8akyb:handle__action_21_return_21__return",
          "to": "method:e8akyb:handle__action_21_handle_return_21_2__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_21_handle_return_21_2__return__method:e8akyb:handle__action_24_handle_return_24_3__return",
          "from": "method:e8akyb:handle__action_21_handle_return_21_2__return",
          "to": "method:e8akyb:handle__action_24_handle_return_24_3__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e8akyb:handle__action_24_handle_return_24_3__return__method:e8akyb:handle__action_24_return_24__return",
          "from": "method:e8akyb:handle__action_24_handle_return_24_3__return",
          "to": "method:e8akyb:handle__action_24_return_24__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:e8akyb:handle__call_20_VibrateAsync__jump_NexusReader_Application_Abstractions_Services_IPlatformService_cs_VibrateAsync",
          "fromNodeId": "method:e8akyb:handle__call_20_VibrateAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/IPlatformService.cs",
          "targetHint": "VibrateAsync",
          "line": 20,
          "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "reason": "Call target VibrateAsync in NexusReader.Application.Abstractions.Services/IPlatformService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:e8akyb:handle__action_18_handle_branch_18_0__merge",
        "method:e8akyb:handle__action_18_guard_clause_18__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 16,
        "end": 25
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ed5bhs:updatereadingprogresscommandhandler__fragment",
      "ownerFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "ownerSymbolId": "method:1ed5bhs:updatereadingprogresscommandhandler",
      "ownerSymbolName": "UpdateReadingProgressCommandHandler",
      "entryNodeId": "method:1ed5bhs:updatereadingprogresscommandhandler__entry",
      "exitNodeIds": [
        "method:1ed5bhs:updatereadingprogresscommandhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ed5bhs:updatereadingprogresscommandhandler__entry",
          "kind": "entry",
          "label": "UpdateReadingProgressCommandHandler entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.99,
          "detail": "Constructor: injects the AppDbContext factory and an ISyncBroadcaster."
        },
        {
          "id": "method:1ed5bhs:updatereadingprogresscommandhandler__action_22_assign_22__linear",
          "kind": "statement",
          "label": "Store injected dependencies",
          "line": 22,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "_dbContextFactory = dbContextFactory; _broadcaster = broadcaster;"
        },
        {
          "id": "method:1ed5bhs:updatereadingprogresscommandhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ed5bhs:updatereadingprogresscommandhandler__entry__method:1ed5bhs:updatereadingprogresscommandhandler__action_22_assign_22__linear",
          "from": "method:1ed5bhs:updatereadingprogresscommandhandler__entry",
          "to": "method:1ed5bhs:updatereadingprogresscommandhandler__action_22_assign_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ed5bhs:updatereadingprogresscommandhandler__action_22_assign_22__linear__implicit_return",
          "from": "method:1ed5bhs:updatereadingprogresscommandhandler__action_22_assign_22__linear",
          "to": "method:1ed5bhs:updatereadingprogresscommandhandler__implicit_return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 18,
        "end": 24
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method UpdateReadingProgressCommandHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jqlijy:handle__fragment",
      "ownerFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "ownerSymbolId": "method:1jqlijy:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:1jqlijy:handle__entry",
      "exitNodeIds": [
        "method:1jqlijy:handle__action_33_handle_return_33_4__return",
        "method:1jqlijy:handle__action_59_handle_return_59_11__return",
        "method:1jqlijy:handle__action_59_return_59__return"
      ],
      "nodes": [
        {
          "id": "method:1jqlijy:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 26,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.99,
          "detail": "Load user and ebook, update reading progress and timestamps, persist changes, then broadcast the progress to other devices; returns success or failure if user missing."
        },
        {
          "id": "method:1jqlijy:handle__action_28_handle_await_28_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81,
          "detail": "using var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__action_28_resource_acquire_28__linear",
          "kind": "statement",
          "label": "Create DbContext scope",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "using var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory<AppDbContext>.CreateDbContextAsync",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:1jqlijy:handle__action_30_handle_await_30_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81,
          "detail": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__action_30_handle_repository_read_30_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86,
          "detail": "var user = await context.Users.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync",
          "kind": "call",
          "label": "AppDbContext.Users.FirstOrDefaultAsync",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88,
          "detail": "predicate u => u.Id == request.UserId, cancellationToken"
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "if (user == null) return Result.Fail(\"User not found.\");"
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__true",
          "kind": "branch-true",
          "label": "return Fail",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78,
          "detail": "if (user == null)"
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_33_handle_return_33_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"User not found.\");"
        },
        {
          "id": "method:1jqlijy:handle__action_37_field_update_37__linear",
          "kind": "statement",
          "label": "Update user reading pointers/timestamps",
          "line": 37,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "user.LastReadPageId = request.PageId; user.LastReadAt = now;"
        },
        {
          "id": "method:1jqlijy:handle__action_40_handle_await_40_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81,
          "detail": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__action_40_handle_repository_read_40_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86,
          "detail": "var ebook = await context.Ebooks.FirstOrDefaultAsync(e => e.Id == request.EbookId, cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "kind": "call",
          "label": "AppDbContext.Ebooks.FirstOrDefaultAsync",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88,
          "detail": "predicate e => e.Id == request.EbookId, cancellationToken"
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__condition",
          "kind": "condition",
          "label": "ebook != null",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "If ebook found, set Progress, LastChapter, LastChapterIndex, LastReadDate (lines 43-46)."
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__true",
          "kind": "branch-true",
          "label": "update ebook fields",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition",
          "kind": "condition",
          "label": "ebook != null",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78,
          "detail": "if (ebook != null)"
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_49_handle_await_49_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81,
          "detail": "await context.SaveChangesAsync(cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__action_49_handle_repository_read_49_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86,
          "detail": "await context.SaveChangesAsync(cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__action_49_persist_49__linear",
          "kind": "statement",
          "label": "Persist entity changes",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "await context.SaveChangesAsync(cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync",
          "kind": "call",
          "label": "AppDbContext.SaveChangesAsync",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:1jqlijy:handle__action_52_handle_await_52_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81,
          "detail": "await _broadcaster.BroadcastProgressAsync("
        },
        {
          "id": "method:1jqlijy:handle__action_52_external_call_52__linear",
          "kind": "http-call",
          "label": "Broadcast progress to other devices",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken);"
        },
        {
          "id": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync",
          "kind": "call",
          "label": "ISyncBroadcaster.BroadcastProgressAsync",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88,
          "detail": "request.UserId, request.PageId, now (DateTime.UtcNow), request.ExcludedConnectionId, cancellationToken"
        },
        {
          "id": "method:1jqlijy:handle__action_59_handle_return_59_11__return",
          "kind": "return",
          "label": "Returns result",
          "line": 59,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1jqlijy:handle__action_59_return_59__return",
          "kind": "return",
          "label": "Return success result",
          "line": 59,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        }
      ],
      "edges": [
        {
          "id": "method:1jqlijy:handle__entry__method:1jqlijy:handle__action_28_handle_await_28_0__await",
          "from": "method:1jqlijy:handle__entry",
          "to": "method:1jqlijy:handle__action_28_handle_await_28_0__await",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jqlijy:handle__action_28_handle_await_28_0__await__method:1jqlijy:handle__action_28_resource_acquire_28__linear",
          "from": "method:1jqlijy:handle__action_28_handle_await_28_0__await",
          "to": "method:1jqlijy:handle__action_28_resource_acquire_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_28_resource_acquire_28__linear__call_method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "from": "method:1jqlijy:handle__action_28_resource_acquire_28__linear",
          "to": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync__method:1jqlijy:handle__action_30_handle_await_30_2__await",
          "from": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "to": "method:1jqlijy:handle__action_30_handle_await_30_2__await",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jqlijy:handle__action_30_handle_await_30_2__await__method:1jqlijy:handle__action_30_handle_repository_read_30_1__linear",
          "from": "method:1jqlijy:handle__action_30_handle_await_30_2__await",
          "to": "method:1jqlijy:handle__action_30_handle_repository_read_30_1__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jqlijy:handle__action_30_handle_repository_read_30_1__linear__call_method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync",
          "from": "method:1jqlijy:handle__action_30_handle_repository_read_30_1__linear",
          "to": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync",
          "kind": "call",
          "label": "predicate u => u.Id == request.UserId, cancellationToken",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync__method:1jqlijy:handle__action_31_guard_clause_31__condition",
          "from": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync",
          "to": "method:1jqlijy:handle__action_31_guard_clause_31__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__condition__method:1jqlijy:handle__action_31_guard_clause_31__true",
          "from": "method:1jqlijy:handle__action_31_guard_clause_31__condition",
          "to": "method:1jqlijy:handle__action_31_guard_clause_31__true",
          "kind": "condition-true",
          "label": "return Fail",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__condition__method:1jqlijy:handle__action_31_guard_clause_31__false",
          "from": "method:1jqlijy:handle__action_31_guard_clause_31__condition",
          "to": "method:1jqlijy:handle__action_31_guard_clause_31__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__true__method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "from": "method:1jqlijy:handle__action_31_guard_clause_31__true",
          "to": "method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__false__method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "from": "method:1jqlijy:handle__action_31_guard_clause_31__false",
          "to": "method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_31_guard_clause_31__merge__method:1jqlijy:handle__action_31_handle_branch_31_3__condition",
          "from": "method:1jqlijy:handle__action_31_guard_clause_31__merge",
          "to": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition__method:1jqlijy:handle__action_31_handle_branch_31_3__true",
          "from": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition",
          "to": "method:1jqlijy:handle__action_31_handle_branch_31_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition__method:1jqlijy:handle__action_31_handle_branch_31_3__false",
          "from": "method:1jqlijy:handle__action_31_handle_branch_31_3__condition",
          "to": "method:1jqlijy:handle__action_31_handle_branch_31_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__true__method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "from": "method:1jqlijy:handle__action_31_handle_branch_31_3__true",
          "to": "method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__false__method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "from": "method:1jqlijy:handle__action_31_handle_branch_31_3__false",
          "to": "method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_31_handle_branch_31_3__merge__method:1jqlijy:handle__action_33_handle_return_33_4__return",
          "from": "method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
          "to": "method:1jqlijy:handle__action_33_handle_return_33_4__return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_33_handle_return_33_4__return__method:1jqlijy:handle__action_37_field_update_37__linear",
          "from": "method:1jqlijy:handle__action_33_handle_return_33_4__return",
          "to": "method:1jqlijy:handle__action_37_field_update_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_37_field_update_37__linear__method:1jqlijy:handle__action_40_handle_await_40_6__await",
          "from": "method:1jqlijy:handle__action_37_field_update_37__linear",
          "to": "method:1jqlijy:handle__action_40_handle_await_40_6__await",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jqlijy:handle__action_40_handle_await_40_6__await__method:1jqlijy:handle__action_40_handle_repository_read_40_5__linear",
          "from": "method:1jqlijy:handle__action_40_handle_await_40_6__await",
          "to": "method:1jqlijy:handle__action_40_handle_repository_read_40_5__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jqlijy:handle__action_40_handle_repository_read_40_5__linear__call_method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "from": "method:1jqlijy:handle__action_40_handle_repository_read_40_5__linear",
          "to": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "kind": "call",
          "label": "predicate e => e.Id == request.EbookId, cancellationToken",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync__method:1jqlijy:handle__action_41_branch_41__condition",
          "from": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "to": "method:1jqlijy:handle__action_41_branch_41__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__condition__method:1jqlijy:handle__action_41_branch_41__true",
          "from": "method:1jqlijy:handle__action_41_branch_41__condition",
          "to": "method:1jqlijy:handle__action_41_branch_41__true",
          "kind": "condition-true",
          "label": "update ebook fields",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__condition__method:1jqlijy:handle__action_41_branch_41__false",
          "from": "method:1jqlijy:handle__action_41_branch_41__condition",
          "to": "method:1jqlijy:handle__action_41_branch_41__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__true__method:1jqlijy:handle__action_41_branch_41__merge",
          "from": "method:1jqlijy:handle__action_41_branch_41__true",
          "to": "method:1jqlijy:handle__action_41_branch_41__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__false__method:1jqlijy:handle__action_41_branch_41__merge",
          "from": "method:1jqlijy:handle__action_41_branch_41__false",
          "to": "method:1jqlijy:handle__action_41_branch_41__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_41_branch_41__merge__method:1jqlijy:handle__action_41_handle_branch_41_7__condition",
          "from": "method:1jqlijy:handle__action_41_branch_41__merge",
          "to": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition__method:1jqlijy:handle__action_41_handle_branch_41_7__true",
          "from": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition",
          "to": "method:1jqlijy:handle__action_41_handle_branch_41_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition__method:1jqlijy:handle__action_41_handle_branch_41_7__false",
          "from": "method:1jqlijy:handle__action_41_handle_branch_41_7__condition",
          "to": "method:1jqlijy:handle__action_41_handle_branch_41_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__true__method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "from": "method:1jqlijy:handle__action_41_handle_branch_41_7__true",
          "to": "method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__false__method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "from": "method:1jqlijy:handle__action_41_handle_branch_41_7__false",
          "to": "method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jqlijy:handle__action_41_handle_branch_41_7__merge__method:1jqlijy:handle__action_49_handle_await_49_9__await",
          "from": "method:1jqlijy:handle__action_41_handle_branch_41_7__merge",
          "to": "method:1jqlijy:handle__action_49_handle_await_49_9__await",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jqlijy:handle__action_49_handle_await_49_9__await__method:1jqlijy:handle__action_49_handle_repository_read_49_8__linear",
          "from": "method:1jqlijy:handle__action_49_handle_await_49_9__await",
          "to": "method:1jqlijy:handle__action_49_handle_repository_read_49_8__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jqlijy:handle__action_49_handle_repository_read_49_8__linear__method:1jqlijy:handle__action_49_persist_49__linear",
          "from": "method:1jqlijy:handle__action_49_handle_repository_read_49_8__linear",
          "to": "method:1jqlijy:handle__action_49_persist_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_49_persist_49__linear__call_method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync",
          "from": "method:1jqlijy:handle__action_49_persist_49__linear",
          "to": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync__method:1jqlijy:handle__action_52_handle_await_52_10__await",
          "from": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync",
          "to": "method:1jqlijy:handle__action_52_handle_await_52_10__await",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jqlijy:handle__action_52_handle_await_52_10__await__method:1jqlijy:handle__action_52_external_call_52__linear",
          "from": "method:1jqlijy:handle__action_52_handle_await_52_10__await",
          "to": "method:1jqlijy:handle__action_52_external_call_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_52_external_call_52__linear__call_method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync",
          "from": "method:1jqlijy:handle__action_52_external_call_52__linear",
          "to": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync",
          "kind": "call",
          "label": "request.UserId, request.PageId, now (DateTime.UtcNow), request.ExcludedConnectionId, cancellationToken",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync__method:1jqlijy:handle__action_59_handle_return_59_11__return",
          "from": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync",
          "to": "method:1jqlijy:handle__action_59_handle_return_59_11__return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jqlijy:handle__action_59_handle_return_59_11__return__method:1jqlijy:handle__action_59_return_59__return",
          "from": "method:1jqlijy:handle__action_59_handle_return_59_11__return",
          "to": "method:1jqlijy:handle__action_59_return_59__return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync__jump_unknown_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "fromNodeId": "method:1jqlijy:handle__call_28_IDbContextFactory_AppDbContext_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory<AppDbContext>.CreateDbContextAsync",
          "line": 28,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "reason": "Call target IDbContextFactory<AppDbContext>.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync__jump_NexusReader_Data_Persistence_AppDbContext_Users_FirstOrDefaultAsync",
          "fromNodeId": "method:1jqlijy:handle__call_30_AppDbContext_Users_FirstOrDefaultAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.Users.FirstOrDefaultAsync",
          "line": 30,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "reason": "Call target AppDbContext.Users.FirstOrDefaultAsync in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync__jump_NexusReader_Data_Persistence_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "fromNodeId": "method:1jqlijy:handle__call_40_AppDbContext_Ebooks_FirstOrDefaultAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.Ebooks.FirstOrDefaultAsync",
          "line": 40,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "reason": "Call target AppDbContext.Ebooks.FirstOrDefaultAsync in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync__jump_NexusReader_Data_Persistence_AppDbContext_SaveChangesAsync",
          "fromNodeId": "method:1jqlijy:handle__call_49_AppDbContext_SaveChangesAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.SaveChangesAsync",
          "line": 49,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "reason": "Call target AppDbContext.SaveChangesAsync in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync__jump_unknown_ISyncBroadcaster_BroadcastProgressAsync",
          "fromNodeId": "method:1jqlijy:handle__call_52_ISyncBroadcaster_BroadcastProgressAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ISyncBroadcaster.BroadcastProgressAsync",
          "line": 52,
          "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "reason": "Call target ISyncBroadcaster.BroadcastProgressAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1jqlijy:handle__action_31_guard_clause_31__merge",
        "method:1jqlijy:handle__action_31_handle_branch_31_3__merge",
        "method:1jqlijy:handle__action_41_branch_41__merge",
        "method:1jqlijy:handle__action_41_handle_branch_41_7__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 26,
        "end": 60
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs",
          "line": 26,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:zf4i3h:addapplication__fragment",
      "ownerFileId": "file:qieb5i:dependencyinjection-cs",
      "ownerSymbolId": "method:zf4i3h:addapplication",
      "ownerSymbolName": "AddApplication",
      "entryNodeId": "method:zf4i3h:addapplication__entry",
      "exitNodeIds": [
        "method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return",
        "method:zf4i3h:addapplication__action_13_return_13__return"
      ],
      "nodes": [
        {
          "id": "method:zf4i3h:addapplication__entry",
          "kind": "entry",
          "label": "AddApplication entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.99,
          "detail": "Extension method that registers application-layer services: Mapster mapping configuration and MediatR handlers, then returns the IServiceCollection."
        },
        {
          "id": "method:zf4i3h:addapplication__action_10_service_registration_10__linear",
          "kind": "statement",
          "label": "Adds Mapster configuration to DI",
          "line": 10,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "calls AddMapsterConfiguration() to register mapping config/services"
        },
        {
          "id": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration",
          "kind": "call",
          "label": "AddMapsterConfiguration",
          "line": 10,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "this IServiceCollection (extension call to add mapping configuration)"
        },
        {
          "id": "method:zf4i3h:addapplication__action_11_service_registration_11__linear",
          "kind": "statement",
          "label": "Registers MediatR and handlers from this assembly",
          "line": 11,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "calls services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(DependencyInjection).Assembly)) to register MediatR services"
        },
        {
          "id": "method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 13,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "return services;"
        },
        {
          "id": "method:zf4i3h:addapplication__action_13_return_13__return",
          "kind": "return",
          "label": "Returns IServiceCollection",
          "line": 13,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "returns services to allow chaining"
        }
      ],
      "edges": [
        {
          "id": "method:zf4i3h:addapplication__entry__method:zf4i3h:addapplication__action_10_service_registration_10__linear",
          "from": "method:zf4i3h:addapplication__entry",
          "to": "method:zf4i3h:addapplication__action_10_service_registration_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:zf4i3h:addapplication__action_10_service_registration_10__linear__call_method:zf4i3h:addapplication__call_10_AddMapsterConfiguration",
          "from": "method:zf4i3h:addapplication__action_10_service_registration_10__linear",
          "to": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration",
          "kind": "call",
          "label": "this IServiceCollection (extension call to add mapping configuration)",
          "line": 10,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration__method:zf4i3h:addapplication__action_11_service_registration_11__linear",
          "from": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration",
          "to": "method:zf4i3h:addapplication__action_11_service_registration_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:zf4i3h:addapplication__action_11_service_registration_11__linear__method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return",
          "from": "method:zf4i3h:addapplication__action_11_service_registration_11__linear",
          "to": "method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return__method:zf4i3h:addapplication__action_13_return_13__return",
          "from": "method:zf4i3h:addapplication__action_13_addapplication_return_13_0__return",
          "to": "method:zf4i3h:addapplication__action_13_return_13__return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration__jump_NexusReader_Application_Mappings_AddMapsterConfiguration",
          "fromNodeId": "method:zf4i3h:addapplication__call_10_AddMapsterConfiguration",
          "kind": "call-target",
          "targetPath": "NexusReader.Application/Mappings",
          "targetHint": "AddMapsterConfiguration",
          "line": 10,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "reason": "Call target AddMapsterConfiguration in NexusReader.Application/Mappings could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 8,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method AddApplication.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:lhrad4:assembly-property-getter__fragment",
      "ownerFileId": "file:qieb5i:dependencyinjection-cs",
      "ownerSymbolId": "method:lhrad4:assembly-property-getter",
      "ownerSymbolName": "Assembly (property getter)",
      "entryNodeId": "method:lhrad4:assembly-property-getter__entry",
      "exitNodeIds": [
        "method:lhrad4:assembly-property-getter__action_16_return_16__return"
      ],
      "nodes": [
        {
          "id": "method:lhrad4:assembly-property-getter__entry",
          "kind": "entry",
          "label": "Assembly (property getter) entry",
          "line": 16,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.99,
          "detail": "Exposes the assembly containing the DependencyInjection type for registration/discovery."
        },
        {
          "id": "method:lhrad4:assembly-property-getter__action_16_return_16__return",
          "kind": "return",
          "label": "Returns assembly for scanning",
          "line": 16,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "returns typeof(DependencyInjection).Assembly"
        }
      ],
      "edges": [
        {
          "id": "method:lhrad4:assembly-property-getter__entry__method:lhrad4:assembly-property-getter__action_16_return_16__return",
          "from": "method:lhrad4:assembly-property-getter__entry",
          "to": "method:lhrad4:assembly-property-getter__action_16_return_16__return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/DependencyInjection.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.73,
      "lineSpan": {
        "start": 16,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/DependencyInjection.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method Assembly (property getter).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:14hjndb:addmapsterconfiguration__fragment",
      "ownerFileId": "file:w6cklc:mappingconfig-cs",
      "ownerSymbolId": "method:14hjndb:addmapsterconfiguration",
      "ownerSymbolName": "AddMapsterConfiguration",
      "entryNodeId": "method:14hjndb:addmapsterconfiguration__entry",
      "exitNodeIds": [
        "method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return",
        "method:14hjndb:addmapsterconfiguration__action_22_return_22__return"
      ],
      "nodes": [
        {
          "id": "method:14hjndb:addmapsterconfiguration__entry",
          "kind": "entry",
          "label": "AddMapsterConfiguration entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.99,
          "detail": "Creates Mapster TypeAdapterConfig mappings and registers the config and IMapper in the DI container, returning the IServiceCollection for chaining."
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_13_external_call_13__linear",
          "kind": "http-call",
          "label": "Get global TypeAdapterConfig",
          "line": 13,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "var config = TypeAdapterConfig.GlobalSettings (Mapster library global settings accessed)"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_15_map_definition_15__linear",
          "kind": "statement",
          "label": "Register mapping NexusUser -> UserProfileDto",
          "line": 15,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "config.NewConfig<NexusUser, UserProfileDto>()"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_16_map_definition_16__linear",
          "kind": "statement",
          "label": "Register mapping Ebook -> LastReadBookDto with explicit Description map",
          "line": 16,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "config.NewConfig<Ebook, LastReadBookDto>().Map(dest => dest.Description, src => src.Description)"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_17_addmapsterconfiguration_mapping_17_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 17,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.74,
          "detail": ".Map(dest => dest.Description, src => src.Description);"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_19_service_registration_19__linear",
          "kind": "statement",
          "label": "Register TypeAdapterConfig as singleton",
          "line": 19,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "services.AddSingleton(config) registers the Mapster configuration in DI"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_20_service_registration_20__linear",
          "kind": "statement",
          "label": "Register IMapper as scoped",
          "line": 20,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "services.AddScoped<IMapper, ServiceMapper>() registers the Mapster mapper implementation"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 22,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "return services;"
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_22_return_22__return",
          "kind": "return",
          "label": "Return IServiceCollection",
          "line": 22,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7,
          "detail": "return services for call chaining"
        }
      ],
      "edges": [
        {
          "id": "method:14hjndb:addmapsterconfiguration__entry__method:14hjndb:addmapsterconfiguration__action_13_external_call_13__linear",
          "from": "method:14hjndb:addmapsterconfiguration__entry",
          "to": "method:14hjndb:addmapsterconfiguration__action_13_external_call_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_13_external_call_13__linear__method:14hjndb:addmapsterconfiguration__action_15_map_definition_15__linear",
          "from": "method:14hjndb:addmapsterconfiguration__action_13_external_call_13__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_15_map_definition_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_15_map_definition_15__linear__method:14hjndb:addmapsterconfiguration__action_16_map_definition_16__linear",
          "from": "method:14hjndb:addmapsterconfiguration__action_15_map_definition_15__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_16_map_definition_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_16_map_definition_16__linear__method:14hjndb:addmapsterconfiguration__action_17_addmapsterconfiguration_mapping_17_0__linear",
          "from": "method:14hjndb:addmapsterconfiguration__action_16_map_definition_16__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_17_addmapsterconfiguration_mapping_17_0__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.74
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_17_addmapsterconfiguration_mapping_17_0__linear__method:14hjndb:addmapsterconfiguration__action_19_service_registration_19__linear",
          "from": "method:14hjndb:addmapsterconfiguration__action_17_addmapsterconfiguration_mapping_17_0__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_19_service_registration_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_19_service_registration_19__linear__method:14hjndb:addmapsterconfiguration__action_20_service_registration_20__linear",
          "from": "method:14hjndb:addmapsterconfiguration__action_19_service_registration_19__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_20_service_registration_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_20_service_registration_20__linear__method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return",
          "from": "method:14hjndb:addmapsterconfiguration__action_20_service_registration_20__linear",
          "to": "method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return__method:14hjndb:addmapsterconfiguration__action_22_return_22__return",
          "from": "method:14hjndb:addmapsterconfiguration__action_22_addmapsterconfiguration_return_22_1__return",
          "to": "method:14hjndb:addmapsterconfiguration__action_22_return_22__return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.94,
      "lineSpan": {
        "start": 11,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Mappings/MappingConfig.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method AddMapsterConfiguration.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:rci0sa:getknowledgegraphqueryhandler__fragment",
      "ownerFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "ownerSymbolId": "method:rci0sa:getknowledgegraphqueryhandler",
      "ownerSymbolName": "GetKnowledgeGraphQueryHandler",
      "entryNodeId": "method:rci0sa:getknowledgegraphqueryhandler__entry",
      "exitNodeIds": [
        "method:rci0sa:getknowledgegraphqueryhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:rci0sa:getknowledgegraphqueryhandler__entry",
          "kind": "entry",
          "label": "GetKnowledgeGraphQueryHandler entry",
          "line": 11,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Constructor that injects the IKnowledgeService dependency."
        },
        {
          "id": "method:rci0sa:getknowledgegraphqueryhandler__action_13_assignment_13__linear",
          "kind": "statement",
          "label": "store dependency",
          "line": 13,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "_knowledgeService = knowledgeService"
        },
        {
          "id": "method:rci0sa:getknowledgegraphqueryhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:rci0sa:getknowledgegraphqueryhandler__entry__method:rci0sa:getknowledgegraphqueryhandler__action_13_assignment_13__linear",
          "from": "method:rci0sa:getknowledgegraphqueryhandler__entry",
          "to": "method:rci0sa:getknowledgegraphqueryhandler__action_13_assignment_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rci0sa:getknowledgegraphqueryhandler__action_13_assignment_13__linear__implicit_return",
          "from": "method:rci0sa:getknowledgegraphqueryhandler__action_13_assignment_13__linear",
          "to": "method:rci0sa:getknowledgegraphqueryhandler__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method GetKnowledgeGraphQueryHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:tgg1x1:handle__fragment",
      "ownerFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "ownerSymbolId": "method:tgg1x1:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:tgg1x1:handle__entry",
      "exitNodeIds": [
        "method:tgg1x1:handle__action_19_handle_return_19_1__return",
        "method:tgg1x1:handle__action_28_handle_return_28_4__return",
        "method:tgg1x1:handle__action_32_handle_return_32_5__return",
        "method:tgg1x1:handle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:tgg1x1:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 16,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Validates the query text, calls IKnowledgeService.GetGraphDataAsync to obtain graph data, and returns appropriate Result<GraphDataDto> (empty, failed, or the graph)."
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.Text)",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(request.Text))"
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.Text)",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "if (string.IsNullOrWhiteSpace(request.Text)) return Result.Ok(new GraphDataDto());"
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__true",
          "kind": "branch-true",
          "label": "return empty GraphDataDto",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_19_handle_return_19_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 19,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new GraphDataDto());"
        },
        {
          "id": "method:tgg1x1:handle__action_21_handle_await_21_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.81,
          "detail": "var result = await _knowledgeService.GetGraphDataAsync("
        },
        {
          "id": "method:tgg1x1:handle__action_21_external_call_21__linear",
          "kind": "http-call",
          "label": "Fetch graph data",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "await _knowledgeService.GetGraphDataAsync(...)"
        },
        {
          "id": "method:tgg1x1:handle__call_21_GetGraphDataAsync",
          "kind": "call",
          "label": "GetGraphDataAsync",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.88,
          "detail": "request.Text, request.TenantId, ebookId: request.EbookId, cancellationToken: cancellationToken"
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__condition",
          "kind": "condition",
          "label": "result.IsFailed",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "if (result.IsFailed) return Result.Fail<GraphDataDto>(result.Errors);"
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__true",
          "kind": "branch-true",
          "label": "return failure Result<GraphDataDto>",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition",
          "kind": "condition",
          "label": "result.IsFailed",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78,
          "detail": "if (result.IsFailed)"
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_28_handle_return_28_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 28,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail<GraphDataDto>(result.Errors);"
        },
        {
          "id": "method:tgg1x1:handle__action_30_assignment_30__linear",
          "kind": "statement",
          "label": "Extract graph from service result",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "var graph = result.Value.Graph;"
        },
        {
          "id": "method:tgg1x1:handle__action_32_handle_return_32_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 32,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return graph is null ? Result.Ok(new GraphDataDto()) : Result.Ok(graph);"
        },
        {
          "id": "method:tgg1x1:handle__action_32_null_check_32__linear",
          "kind": "statement",
          "label": "Return empty DTO if graph is null",
          "line": 32,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return graph is null ? Result.Ok(new GraphDataDto()) : Result.Ok(graph);"
        },
        {
          "id": "method:tgg1x1:handle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 33,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:tgg1x1:handle__entry__method:tgg1x1:handle__action_18_handle_branch_18_0__condition",
          "from": "method:tgg1x1:handle__entry",
          "to": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition__method:tgg1x1:handle__action_18_handle_branch_18_0__true",
          "from": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition",
          "to": "method:tgg1x1:handle__action_18_handle_branch_18_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition__method:tgg1x1:handle__action_18_handle_branch_18_0__false",
          "from": "method:tgg1x1:handle__action_18_handle_branch_18_0__condition",
          "to": "method:tgg1x1:handle__action_18_handle_branch_18_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__true__method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "from": "method:tgg1x1:handle__action_18_handle_branch_18_0__true",
          "to": "method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__false__method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "from": "method:tgg1x1:handle__action_18_handle_branch_18_0__false",
          "to": "method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_18_handle_branch_18_0__merge__method:tgg1x1:handle__action_18_guard_clause_18__condition",
          "from": "method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
          "to": "method:tgg1x1:handle__action_18_guard_clause_18__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__condition__method:tgg1x1:handle__action_18_guard_clause_18__true",
          "from": "method:tgg1x1:handle__action_18_guard_clause_18__condition",
          "to": "method:tgg1x1:handle__action_18_guard_clause_18__true",
          "kind": "condition-true",
          "label": "return empty GraphDataDto",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__condition__method:tgg1x1:handle__action_18_guard_clause_18__false",
          "from": "method:tgg1x1:handle__action_18_guard_clause_18__condition",
          "to": "method:tgg1x1:handle__action_18_guard_clause_18__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__true__method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "from": "method:tgg1x1:handle__action_18_guard_clause_18__true",
          "to": "method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__false__method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "from": "method:tgg1x1:handle__action_18_guard_clause_18__false",
          "to": "method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_18_guard_clause_18__merge__method:tgg1x1:handle__action_19_handle_return_19_1__return",
          "from": "method:tgg1x1:handle__action_18_guard_clause_18__merge",
          "to": "method:tgg1x1:handle__action_19_handle_return_19_1__return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_19_handle_return_19_1__return__method:tgg1x1:handle__action_21_handle_await_21_2__await",
          "from": "method:tgg1x1:handle__action_19_handle_return_19_1__return",
          "to": "method:tgg1x1:handle__action_21_handle_await_21_2__await",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:tgg1x1:handle__action_21_handle_await_21_2__await__method:tgg1x1:handle__action_21_external_call_21__linear",
          "from": "method:tgg1x1:handle__action_21_handle_await_21_2__await",
          "to": "method:tgg1x1:handle__action_21_external_call_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_21_external_call_21__linear__call_method:tgg1x1:handle__call_21_GetGraphDataAsync",
          "from": "method:tgg1x1:handle__action_21_external_call_21__linear",
          "to": "method:tgg1x1:handle__call_21_GetGraphDataAsync",
          "kind": "call",
          "label": "request.Text, request.TenantId, ebookId: request.EbookId, cancellationToken: cancellationToken",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:tgg1x1:handle__call_21_GetGraphDataAsync__method:tgg1x1:handle__action_27_branch_27__condition",
          "from": "method:tgg1x1:handle__call_21_GetGraphDataAsync",
          "to": "method:tgg1x1:handle__action_27_branch_27__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__condition__method:tgg1x1:handle__action_27_branch_27__true",
          "from": "method:tgg1x1:handle__action_27_branch_27__condition",
          "to": "method:tgg1x1:handle__action_27_branch_27__true",
          "kind": "condition-true",
          "label": "return failure Result<GraphDataDto>",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__condition__method:tgg1x1:handle__action_27_branch_27__false",
          "from": "method:tgg1x1:handle__action_27_branch_27__condition",
          "to": "method:tgg1x1:handle__action_27_branch_27__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__true__method:tgg1x1:handle__action_27_branch_27__merge",
          "from": "method:tgg1x1:handle__action_27_branch_27__true",
          "to": "method:tgg1x1:handle__action_27_branch_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__false__method:tgg1x1:handle__action_27_branch_27__merge",
          "from": "method:tgg1x1:handle__action_27_branch_27__false",
          "to": "method:tgg1x1:handle__action_27_branch_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_27_branch_27__merge__method:tgg1x1:handle__action_27_handle_branch_27_3__condition",
          "from": "method:tgg1x1:handle__action_27_branch_27__merge",
          "to": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition__method:tgg1x1:handle__action_27_handle_branch_27_3__true",
          "from": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition",
          "to": "method:tgg1x1:handle__action_27_handle_branch_27_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition__method:tgg1x1:handle__action_27_handle_branch_27_3__false",
          "from": "method:tgg1x1:handle__action_27_handle_branch_27_3__condition",
          "to": "method:tgg1x1:handle__action_27_handle_branch_27_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__true__method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "from": "method:tgg1x1:handle__action_27_handle_branch_27_3__true",
          "to": "method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__false__method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "from": "method:tgg1x1:handle__action_27_handle_branch_27_3__false",
          "to": "method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tgg1x1:handle__action_27_handle_branch_27_3__merge__method:tgg1x1:handle__action_28_handle_return_28_4__return",
          "from": "method:tgg1x1:handle__action_27_handle_branch_27_3__merge",
          "to": "method:tgg1x1:handle__action_28_handle_return_28_4__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_28_handle_return_28_4__return__method:tgg1x1:handle__action_30_assignment_30__linear",
          "from": "method:tgg1x1:handle__action_28_handle_return_28_4__return",
          "to": "method:tgg1x1:handle__action_30_assignment_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_30_assignment_30__linear__method:tgg1x1:handle__action_32_handle_return_32_5__return",
          "from": "method:tgg1x1:handle__action_30_assignment_30__linear",
          "to": "method:tgg1x1:handle__action_32_handle_return_32_5__return",
          "kind": "return",
          "line": 32,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_32_handle_return_32_5__return__method:tgg1x1:handle__action_32_null_check_32__linear",
          "from": "method:tgg1x1:handle__action_32_handle_return_32_5__return",
          "to": "method:tgg1x1:handle__action_32_null_check_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tgg1x1:handle__action_32_null_check_32__linear__implicit_return",
          "from": "method:tgg1x1:handle__action_32_null_check_32__linear",
          "to": "method:tgg1x1:handle__implicit_return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:tgg1x1:handle__call_21_GetGraphDataAsync__jump_unknown_GetGraphDataAsync",
          "fromNodeId": "method:tgg1x1:handle__call_21_GetGraphDataAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetGraphDataAsync",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "reason": "Call target GetGraphDataAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:tgg1x1:handle__action_18_handle_branch_18_0__merge",
        "method:tgg1x1:handle__action_18_guard_clause_18__merge",
        "method:tgg1x1:handle__action_27_branch_27__merge",
        "method:tgg1x1:handle__action_27_handle_branch_27_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 16,
        "end": 33
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:r0ndyk:asklibraryquestionqueryhandler__fragment",
      "ownerFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "ownerSymbolId": "method:r0ndyk:asklibraryquestionqueryhandler",
      "ownerSymbolName": "AskLibraryQuestionQueryHandler",
      "entryNodeId": "method:r0ndyk:asklibraryquestionqueryhandler__entry",
      "exitNodeIds": [
        "method:r0ndyk:asklibraryquestionqueryhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:r0ndyk:asklibraryquestionqueryhandler__entry",
          "kind": "entry",
          "label": "AskLibraryQuestionQueryHandler entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.99,
          "detail": "Constructs the handler and captures the injected IKnowledgeService."
        },
        {
          "id": "method:r0ndyk:asklibraryquestionqueryhandler__action_20_assignment_20__linear",
          "kind": "statement",
          "label": "Store injected dependency",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "_knowledgeService = knowledgeService"
        },
        {
          "id": "method:r0ndyk:asklibraryquestionqueryhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:r0ndyk:asklibraryquestionqueryhandler__entry__method:r0ndyk:asklibraryquestionqueryhandler__action_20_assignment_20__linear",
          "from": "method:r0ndyk:asklibraryquestionqueryhandler__entry",
          "to": "method:r0ndyk:asklibraryquestionqueryhandler__action_20_assignment_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r0ndyk:asklibraryquestionqueryhandler__action_20_assignment_20__linear__implicit_return",
          "from": "method:r0ndyk:asklibraryquestionqueryhandler__action_20_assignment_20__linear",
          "to": "method:r0ndyk:asklibraryquestionqueryhandler__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 18,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method AskLibraryQuestionQueryHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17jlxw0:handle__fragment",
      "ownerFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "ownerSymbolId": "method:17jlxw0:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:17jlxw0:handle__entry",
      "exitNodeIds": [
        "method:17jlxw0:handle__action_27_handle_return_27_1__return",
        "method:17jlxw0:handle__action_30_handle_return_30_3__return",
        "method:17jlxw0:handle__action_35_return_35__return"
      ],
      "nodes": [
        {
          "id": "method:17jlxw0:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 23,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.99,
          "detail": "Validates the incoming question and forwards it to the knowledge service to obtain a grounded AI response."
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.Question)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "if empty -> return Result.Fail(\"Question cannot be empty.\")"
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__true",
          "kind": "branch-true",
          "label": "invalid",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.Question)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(request.Question))"
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_27_handle_return_27_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Question cannot be empty.\");"
        },
        {
          "id": "method:17jlxw0:handle__action_30_handle_await_30_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.81,
          "detail": "return await _knowledgeService.AskQuestionAsync("
        },
        {
          "id": "method:17jlxw0:handle__action_30_handle_return_30_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "return await _knowledgeService.AskQuestionAsync("
        },
        {
          "id": "method:17jlxw0:handle__action_30_external_call_30__linear",
          "kind": "http-call",
          "label": "Delegate to knowledge service",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "Returns result of _knowledgeService.AskQuestionAsync(...)"
        },
        {
          "id": "method:17jlxw0:handle__call_30_AskQuestionAsync",
          "kind": "call",
          "label": "AskQuestionAsync",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.88,
          "detail": "request.Question, request.TenantId, request.EbookId, request.Limit, cancellationToken"
        },
        {
          "id": "method:17jlxw0:handle__action_35_return_35__return",
          "kind": "return",
          "label": "Return service result",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7,
          "detail": "await _knowledgeService.AskQuestionAsync(...) is returned to caller"
        }
      ],
      "edges": [
        {
          "id": "method:17jlxw0:handle__entry__method:17jlxw0:handle__action_25_guard_clause_25__condition",
          "from": "method:17jlxw0:handle__entry",
          "to": "method:17jlxw0:handle__action_25_guard_clause_25__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__condition__method:17jlxw0:handle__action_25_guard_clause_25__true",
          "from": "method:17jlxw0:handle__action_25_guard_clause_25__condition",
          "to": "method:17jlxw0:handle__action_25_guard_clause_25__true",
          "kind": "condition-true",
          "label": "invalid",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__condition__method:17jlxw0:handle__action_25_guard_clause_25__false",
          "from": "method:17jlxw0:handle__action_25_guard_clause_25__condition",
          "to": "method:17jlxw0:handle__action_25_guard_clause_25__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__true__method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "from": "method:17jlxw0:handle__action_25_guard_clause_25__true",
          "to": "method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__false__method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "from": "method:17jlxw0:handle__action_25_guard_clause_25__false",
          "to": "method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_25_guard_clause_25__merge__method:17jlxw0:handle__action_25_handle_branch_25_0__condition",
          "from": "method:17jlxw0:handle__action_25_guard_clause_25__merge",
          "to": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition__method:17jlxw0:handle__action_25_handle_branch_25_0__true",
          "from": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition",
          "to": "method:17jlxw0:handle__action_25_handle_branch_25_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition__method:17jlxw0:handle__action_25_handle_branch_25_0__false",
          "from": "method:17jlxw0:handle__action_25_handle_branch_25_0__condition",
          "to": "method:17jlxw0:handle__action_25_handle_branch_25_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__true__method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "from": "method:17jlxw0:handle__action_25_handle_branch_25_0__true",
          "to": "method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__false__method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "from": "method:17jlxw0:handle__action_25_handle_branch_25_0__false",
          "to": "method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17jlxw0:handle__action_25_handle_branch_25_0__merge__method:17jlxw0:handle__action_27_handle_return_27_1__return",
          "from": "method:17jlxw0:handle__action_25_handle_branch_25_0__merge",
          "to": "method:17jlxw0:handle__action_27_handle_return_27_1__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_27_handle_return_27_1__return__method:17jlxw0:handle__action_30_handle_await_30_2__await",
          "from": "method:17jlxw0:handle__action_27_handle_return_27_1__return",
          "to": "method:17jlxw0:handle__action_30_handle_await_30_2__await",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17jlxw0:handle__action_30_handle_await_30_2__await__method:17jlxw0:handle__action_30_handle_return_30_3__return",
          "from": "method:17jlxw0:handle__action_30_handle_await_30_2__await",
          "to": "method:17jlxw0:handle__action_30_handle_return_30_3__return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_30_handle_return_30_3__return__method:17jlxw0:handle__action_30_external_call_30__linear",
          "from": "method:17jlxw0:handle__action_30_handle_return_30_3__return",
          "to": "method:17jlxw0:handle__action_30_external_call_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jlxw0:handle__action_30_external_call_30__linear__call_method:17jlxw0:handle__call_30_AskQuestionAsync",
          "from": "method:17jlxw0:handle__action_30_external_call_30__linear",
          "to": "method:17jlxw0:handle__call_30_AskQuestionAsync",
          "kind": "call",
          "label": "request.Question, request.TenantId, request.EbookId, request.Limit, cancellationToken",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17jlxw0:handle__call_30_AskQuestionAsync__method:17jlxw0:handle__action_35_return_35__return",
          "from": "method:17jlxw0:handle__call_30_AskQuestionAsync",
          "to": "method:17jlxw0:handle__action_35_return_35__return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:17jlxw0:handle__call_30_AskQuestionAsync__jump_unknown_AskQuestionAsync",
          "fromNodeId": "method:17jlxw0:handle__call_30_AskQuestionAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AskQuestionAsync",
          "line": 30,
          "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "reason": "Call target AskQuestionAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:17jlxw0:handle__action_25_guard_clause_25__merge",
        "method:17jlxw0:handle__action_25_handle_branch_25_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 23,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1epuq0y:handle__fragment",
      "ownerFileId": "file:16axv5i:getmyebooksquery-cs",
      "ownerSymbolId": "method:1epuq0y:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:1epuq0y:handle__entry",
      "exitNodeIds": [
        "method:1epuq0y:handle__action_44_return_44__return",
        "method:1epuq0y:handle__action_44_handle_return_44_4__return"
      ],
      "nodes": [
        {
          "id": "method:1epuq0y:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.99,
          "detail": "Opens a DbContext, queries ebooks for the given user id, projects results to LastReadBookDto list, and returns Result.Ok(list)."
        },
        {
          "id": "method:1epuq0y:handle__action_22_handle_await_22_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:1epuq0y:handle__action_22_resource_scope_22__linear",
          "kind": "statement",
          "label": "Create and scope DbContext",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); (creates a scoped AppDbContext)"
        },
        {
          "id": "method:1epuq0y:handle__action_24_handle_await_24_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 24,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.81,
          "detail": "var ebooks = await dbContext.Ebooks"
        },
        {
          "id": "method:1epuq0y:handle__action_24_persistence_query_24__linear",
          "kind": "statement",
          "label": "Filter ebooks by user",
          "line": 24,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "dbContext.Ebooks.Where(e => e.UserId == request.UserId) - applies filter by user id"
        },
        {
          "id": "method:1epuq0y:handle__action_25_handle_repository_read_25_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.86,
          "detail": ".Where(e => e.UserId == request.UserId)"
        },
        {
          "id": "method:1epuq0y:handle__action_26_ordering_26__linear",
          "kind": "statement",
          "label": "Order by last read or added date desc",
          "line": 26,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "OrderByDescending(e => e.LastReadDate ?? e.AddedDate)"
        },
        {
          "id": "method:1epuq0y:handle__action_27_handle_mapping_27_3__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.74,
          "detail": ".Select(e => new LastReadBookDto"
        },
        {
          "id": "method:1epuq0y:handle__action_27_projection_27__linear",
          "kind": "statement",
          "label": "Map entity to LastReadBookDto",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "Select(...) constructs LastReadBookDto and nested AuthorDto from entity fields (lines 27-41)"
        },
        {
          "id": "method:1epuq0y:handle__action_42_external_call_42__linear",
          "kind": "http-call",
          "label": "Execute query async",
          "line": 42,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "ToListAsync(cancellationToken) - EF Core async materialization"
        },
        {
          "id": "method:1epuq0y:handle__action_44_return_44__return",
          "kind": "return",
          "label": "Wrap and return result",
          "line": 44,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(ebooks);"
        },
        {
          "id": "method:1epuq0y:handle__action_44_handle_return_44_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 44,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(ebooks);"
        }
      ],
      "edges": [
        {
          "id": "method:1epuq0y:handle__entry__method:1epuq0y:handle__action_22_handle_await_22_0__await",
          "from": "method:1epuq0y:handle__entry",
          "to": "method:1epuq0y:handle__action_22_handle_await_22_0__await",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1epuq0y:handle__action_22_handle_await_22_0__await__method:1epuq0y:handle__action_22_resource_scope_22__linear",
          "from": "method:1epuq0y:handle__action_22_handle_await_22_0__await",
          "to": "method:1epuq0y:handle__action_22_resource_scope_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_22_resource_scope_22__linear__method:1epuq0y:handle__action_24_handle_await_24_1__await",
          "from": "method:1epuq0y:handle__action_22_resource_scope_22__linear",
          "to": "method:1epuq0y:handle__action_24_handle_await_24_1__await",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1epuq0y:handle__action_24_handle_await_24_1__await__method:1epuq0y:handle__action_24_persistence_query_24__linear",
          "from": "method:1epuq0y:handle__action_24_handle_await_24_1__await",
          "to": "method:1epuq0y:handle__action_24_persistence_query_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_24_persistence_query_24__linear__method:1epuq0y:handle__action_25_handle_repository_read_25_2__linear",
          "from": "method:1epuq0y:handle__action_24_persistence_query_24__linear",
          "to": "method:1epuq0y:handle__action_25_handle_repository_read_25_2__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1epuq0y:handle__action_25_handle_repository_read_25_2__linear__method:1epuq0y:handle__action_26_ordering_26__linear",
          "from": "method:1epuq0y:handle__action_25_handle_repository_read_25_2__linear",
          "to": "method:1epuq0y:handle__action_26_ordering_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_26_ordering_26__linear__method:1epuq0y:handle__action_27_handle_mapping_27_3__linear",
          "from": "method:1epuq0y:handle__action_26_ordering_26__linear",
          "to": "method:1epuq0y:handle__action_27_handle_mapping_27_3__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1epuq0y:handle__action_27_handle_mapping_27_3__linear__method:1epuq0y:handle__action_27_projection_27__linear",
          "from": "method:1epuq0y:handle__action_27_handle_mapping_27_3__linear",
          "to": "method:1epuq0y:handle__action_27_projection_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_27_projection_27__linear__method:1epuq0y:handle__action_42_external_call_42__linear",
          "from": "method:1epuq0y:handle__action_27_projection_27__linear",
          "to": "method:1epuq0y:handle__action_42_external_call_42__linear",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_42_external_call_42__linear__method:1epuq0y:handle__action_44_return_44__return",
          "from": "method:1epuq0y:handle__action_42_external_call_42__linear",
          "to": "method:1epuq0y:handle__action_44_return_44__return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1epuq0y:handle__action_44_return_44__return__method:1epuq0y:handle__action_44_handle_return_44_4__return",
          "from": "method:1epuq0y:handle__action_44_return_44__return",
          "to": "method:1epuq0y:handle__action_44_handle_return_44_4__return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 45
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:527vme:getmyebooksqueryhandler-ctor__fragment",
      "ownerFileId": "file:16axv5i:getmyebooksquery-cs",
      "ownerSymbolId": "method:527vme:getmyebooksqueryhandler-ctor",
      "ownerSymbolName": "GetMyEbooksQueryHandler (ctor)",
      "entryNodeId": "method:527vme:getmyebooksqueryhandler-ctor__entry",
      "exitNodeIds": [
        "method:527vme:getmyebooksqueryhandler-ctor__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:527vme:getmyebooksqueryhandler-ctor__entry",
          "kind": "entry",
          "label": "GetMyEbooksQueryHandler (ctor) entry",
          "line": 15,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.99,
          "detail": "Stores injected IDbContextFactory<AppDbContext> to a readonly field."
        },
        {
          "id": "method:527vme:getmyebooksqueryhandler-ctor__action_17_assign_17__linear",
          "kind": "statement",
          "label": "Assign DI dependency",
          "line": 17,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7,
          "detail": "_dbContextFactory = dbContextFactory"
        },
        {
          "id": "method:527vme:getmyebooksqueryhandler-ctor__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:527vme:getmyebooksqueryhandler-ctor__entry__method:527vme:getmyebooksqueryhandler-ctor__action_17_assign_17__linear",
          "from": "method:527vme:getmyebooksqueryhandler-ctor__entry",
          "to": "method:527vme:getmyebooksqueryhandler-ctor__action_17_assign_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:527vme:getmyebooksqueryhandler-ctor__action_17_assign_17__linear__implicit_return",
          "from": "method:527vme:getmyebooksqueryhandler-ctor__action_17_assign_17__linear",
          "to": "method:527vme:getmyebooksqueryhandler-ctor__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method GetMyEbooksQueryHandler (ctor).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__fragment",
      "ownerFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "ownerSymbolId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "ownerSymbolName": "SearchLibrarySemanticallyQueryHandler",
      "entryNodeId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__entry",
      "exitNodeIds": [
        "method:17jd9c8:searchlibrarysemanticallyqueryhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__entry",
          "kind": "entry",
          "label": "SearchLibrarySemanticallyQueryHandler entry",
          "line": 29,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.99,
          "detail": "Constructor that stores injected services and obtains a named resilience pipeline for retries."
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_35_field_assignment_35__linear",
          "kind": "statement",
          "label": "Assigns injected dependencies",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "_embeddingGenerator, _dbContextFactory, _mapper assignments"
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_37_external_call_37__linear",
          "kind": "http-call",
          "label": "Resilience pipeline lookup",
          "line": 37,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "pipelineProvider.GetPipeline(\"ai-retry\") used to set _retryPipeline"
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline",
          "kind": "call",
          "label": "GetPipeline",
          "line": 37,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88,
          "detail": "string \"ai-retry\""
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 39,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__entry__method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_35_field_assignment_35__linear",
          "from": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__entry",
          "to": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_35_field_assignment_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_35_field_assignment_35__linear__method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_37_external_call_37__linear",
          "from": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_35_field_assignment_35__linear",
          "to": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_37_external_call_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_37_external_call_37__linear__call_method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline",
          "from": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__action_37_external_call_37__linear",
          "to": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline",
          "kind": "call",
          "label": "string \"ai-retry\"",
          "line": 37,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline__implicit_return",
          "from": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline",
          "to": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__implicit_return",
          "kind": "return",
          "line": 39,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline__jump_unknown_GetPipeline",
          "fromNodeId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler__call_37_GetPipeline",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetPipeline",
          "line": 37,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "reason": "Call target GetPipeline in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 29,
        "end": 39
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method SearchLibrarySemanticallyQueryHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bus1hn:handle__fragment",
      "ownerFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "ownerSymbolId": "method:1bus1hn:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:1bus1hn:handle__entry",
      "exitNodeIds": [
        "method:1bus1hn:handle__action_45_handle_return_45_1__return",
        "method:1bus1hn:handle__action_61_handle_return_61_7__return",
        "method:1bus1hn:handle__action_61_return_61__return"
      ],
      "nodes": [
        {
          "id": "method:1bus1hn:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 41,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.99,
          "detail": "Executes a semantic search: validates input, obtains an embedding with retry, queries the DB for nearest cached vectors for the tenant, maps to DTOs and returns a Result."
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.QueryText)",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Fail when request.QueryText is empty (line 45)"
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__true",
          "kind": "branch-true",
          "label": "invalid",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "kind": "statement",
          "label": "merge",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(request.QueryText)",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(request.QueryText))"
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_45_handle_return_45_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 45,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Query text cannot be empty.\");"
        },
        {
          "id": "method:1bus1hn:handle__action_49_handle_await_49_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81,
          "detail": "var embeddingResponse = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "kind": "loop-entry",
          "label": "Generate embedding with resilience pipeline",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "_retryPipeline.ExecuteAsync wraps _embeddingGenerator.GenerateAsync to obtain embedding"
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_body",
          "kind": "loop-body",
          "label": "_retryPipeline.ExecuteAsync wraps _embeddingGenerator.GenerateAsync to obtain embedding",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__call_49_ExecuteAsync",
          "kind": "call",
          "label": "ExecuteAsync",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88,
          "detail": "Func<CancellationToken, Task<Embedding[]>> that calls _embeddingGenerator.GenerateAsync"
        },
        {
          "id": "method:1bus1hn:handle__action_50_handle_await_50_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81,
          "detail": "await _embeddingGenerator.GenerateAsync(new[] { request.QueryText }, cancellationToken: ct), cancellationToken);"
        },
        {
          "id": "method:1bus1hn:handle__action_50_external_call_50__linear",
          "kind": "http-call",
          "label": "Embedding generation",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "_embeddingGenerator.GenerateAsync called with request.QueryText"
        },
        {
          "id": "method:1bus1hn:handle__call_50_GenerateAsync",
          "kind": "call",
          "label": "GenerateAsync",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88,
          "detail": "string[] { request.QueryText } (cancellation token forwarded)"
        },
        {
          "id": "method:1bus1hn:handle__action_53_handle_await_53_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81,
          "detail": "await using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:1bus1hn:handle__call_53_CreateDbContextAsync",
          "kind": "call",
          "label": "CreateDbContextAsync",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:1bus1hn:handle__action_54_handle_await_54_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81,
          "detail": "var cacheEntries = await dbContext.SemanticKnowledgeCache"
        },
        {
          "id": "method:1bus1hn:handle__action_54_persistence_read_54__linear",
          "kind": "statement",
          "label": "Query SemanticKnowledgeCache for tenant and compute cosine distance",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "Filters by TenantId and non-null Embedding, orders by Embedding!.CosineDistance(queryVector), takes request.Limit, then ToListAsync (lines 54-58)"
        },
        {
          "id": "method:1bus1hn:handle__action_55_handle_repository_read_55_6__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 55,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.86,
          "detail": ".Where(c => c.TenantId == request.TenantId && c.Embedding != null)"
        },
        {
          "id": "method:1bus1hn:handle__action_60_mapping_60__linear",
          "kind": "statement",
          "label": "Map entities to DTOs",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "_mapper.Map<List<SemanticSearchResultDto>>(cacheEntries)"
        },
        {
          "id": "method:1bus1hn:handle__call_60_Map",
          "kind": "call",
          "label": "Map",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88,
          "detail": "List<SemanticKnowledgeCache> -> List<SemanticSearchResultDto>"
        },
        {
          "id": "method:1bus1hn:handle__action_61_handle_return_61_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 61,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(dtos);"
        },
        {
          "id": "method:1bus1hn:handle__action_61_return_61__return",
          "kind": "return",
          "label": "Return successful Result with mapped DTOs",
          "line": 61,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(dtos)"
        }
      ],
      "edges": [
        {
          "id": "method:1bus1hn:handle__entry__method:1bus1hn:handle__action_43_guard_clause_43__condition",
          "from": "method:1bus1hn:handle__entry",
          "to": "method:1bus1hn:handle__action_43_guard_clause_43__condition",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__condition__method:1bus1hn:handle__action_43_guard_clause_43__true",
          "from": "method:1bus1hn:handle__action_43_guard_clause_43__condition",
          "to": "method:1bus1hn:handle__action_43_guard_clause_43__true",
          "kind": "condition-true",
          "label": "invalid",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__condition__method:1bus1hn:handle__action_43_guard_clause_43__false",
          "from": "method:1bus1hn:handle__action_43_guard_clause_43__condition",
          "to": "method:1bus1hn:handle__action_43_guard_clause_43__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__true__method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "from": "method:1bus1hn:handle__action_43_guard_clause_43__true",
          "to": "method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__false__method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "from": "method:1bus1hn:handle__action_43_guard_clause_43__false",
          "to": "method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_43_guard_clause_43__merge__method:1bus1hn:handle__action_43_handle_branch_43_0__condition",
          "from": "method:1bus1hn:handle__action_43_guard_clause_43__merge",
          "to": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition__method:1bus1hn:handle__action_43_handle_branch_43_0__true",
          "from": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition",
          "to": "method:1bus1hn:handle__action_43_handle_branch_43_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition__method:1bus1hn:handle__action_43_handle_branch_43_0__false",
          "from": "method:1bus1hn:handle__action_43_handle_branch_43_0__condition",
          "to": "method:1bus1hn:handle__action_43_handle_branch_43_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__true__method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "from": "method:1bus1hn:handle__action_43_handle_branch_43_0__true",
          "to": "method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__false__method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "from": "method:1bus1hn:handle__action_43_handle_branch_43_0__false",
          "to": "method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1bus1hn:handle__action_43_handle_branch_43_0__merge__method:1bus1hn:handle__action_45_handle_return_45_1__return",
          "from": "method:1bus1hn:handle__action_43_handle_branch_43_0__merge",
          "to": "method:1bus1hn:handle__action_45_handle_return_45_1__return",
          "kind": "return",
          "line": 45,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_45_handle_return_45_1__return__method:1bus1hn:handle__action_49_handle_await_49_2__await",
          "from": "method:1bus1hn:handle__action_45_handle_return_45_1__return",
          "to": "method:1bus1hn:handle__action_49_handle_await_49_2__await",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1bus1hn:handle__action_49_handle_await_49_2__await__method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "from": "method:1bus1hn:handle__action_49_handle_await_49_2__await",
          "to": "method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_entry__method:1bus1hn:handle__action_49_retry_49__loop_body",
          "from": "method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "to": "method:1bus1hn:handle__action_49_retry_49__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_body__method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "from": "method:1bus1hn:handle__action_49_retry_49__loop_body",
          "to": "method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_entry__method:1bus1hn:handle__action_49_retry_49__loop_exit",
          "from": "method:1bus1hn:handle__action_49_retry_49__loop_entry",
          "to": "method:1bus1hn:handle__action_49_retry_49__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_49_retry_49__loop_exit__call_method:1bus1hn:handle__call_49_ExecuteAsync",
          "from": "method:1bus1hn:handle__action_49_retry_49__loop_exit",
          "to": "method:1bus1hn:handle__call_49_ExecuteAsync",
          "kind": "call",
          "label": "Func<CancellationToken, Task<Embedding[]>> that calls _embeddingGenerator.GenerateAsync",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1bus1hn:handle__call_49_ExecuteAsync__method:1bus1hn:handle__action_50_handle_await_50_3__await",
          "from": "method:1bus1hn:handle__call_49_ExecuteAsync",
          "to": "method:1bus1hn:handle__action_50_handle_await_50_3__await",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1bus1hn:handle__action_50_handle_await_50_3__await__method:1bus1hn:handle__action_50_external_call_50__linear",
          "from": "method:1bus1hn:handle__action_50_handle_await_50_3__await",
          "to": "method:1bus1hn:handle__action_50_external_call_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_50_external_call_50__linear__call_method:1bus1hn:handle__call_50_GenerateAsync",
          "from": "method:1bus1hn:handle__action_50_external_call_50__linear",
          "to": "method:1bus1hn:handle__call_50_GenerateAsync",
          "kind": "call",
          "label": "string[] { request.QueryText } (cancellation token forwarded)",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1bus1hn:handle__call_50_GenerateAsync__method:1bus1hn:handle__action_53_handle_await_53_4__await",
          "from": "method:1bus1hn:handle__call_50_GenerateAsync",
          "to": "method:1bus1hn:handle__action_53_handle_await_53_4__await",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1bus1hn:handle__action_53_handle_await_53_4__await__call_method:1bus1hn:handle__call_53_CreateDbContextAsync",
          "from": "method:1bus1hn:handle__action_53_handle_await_53_4__await",
          "to": "method:1bus1hn:handle__call_53_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1bus1hn:handle__call_53_CreateDbContextAsync__method:1bus1hn:handle__action_54_handle_await_54_5__await",
          "from": "method:1bus1hn:handle__call_53_CreateDbContextAsync",
          "to": "method:1bus1hn:handle__action_54_handle_await_54_5__await",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1bus1hn:handle__action_54_handle_await_54_5__await__method:1bus1hn:handle__action_54_persistence_read_54__linear",
          "from": "method:1bus1hn:handle__action_54_handle_await_54_5__await",
          "to": "method:1bus1hn:handle__action_54_persistence_read_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_54_persistence_read_54__linear__method:1bus1hn:handle__action_55_handle_repository_read_55_6__linear",
          "from": "method:1bus1hn:handle__action_54_persistence_read_54__linear",
          "to": "method:1bus1hn:handle__action_55_handle_repository_read_55_6__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1bus1hn:handle__action_55_handle_repository_read_55_6__linear__method:1bus1hn:handle__action_60_mapping_60__linear",
          "from": "method:1bus1hn:handle__action_55_handle_repository_read_55_6__linear",
          "to": "method:1bus1hn:handle__action_60_mapping_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_60_mapping_60__linear__call_method:1bus1hn:handle__call_60_Map",
          "from": "method:1bus1hn:handle__action_60_mapping_60__linear",
          "to": "method:1bus1hn:handle__call_60_Map",
          "kind": "call",
          "label": "List<SemanticKnowledgeCache> -> List<SemanticSearchResultDto>",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1bus1hn:handle__call_60_Map__method:1bus1hn:handle__action_61_handle_return_61_7__return",
          "from": "method:1bus1hn:handle__call_60_Map",
          "to": "method:1bus1hn:handle__action_61_handle_return_61_7__return",
          "kind": "return",
          "line": 61,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bus1hn:handle__action_61_handle_return_61_7__return__method:1bus1hn:handle__action_61_return_61__return",
          "from": "method:1bus1hn:handle__action_61_handle_return_61_7__return",
          "to": "method:1bus1hn:handle__action_61_return_61__return",
          "kind": "return",
          "line": 61,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1bus1hn:handle__call_49_ExecuteAsync__jump_unknown_ExecuteAsync",
          "fromNodeId": "method:1bus1hn:handle__call_49_ExecuteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ExecuteAsync",
          "line": 49,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "reason": "Call target ExecuteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bus1hn:handle__call_50_GenerateAsync__jump_unknown_GenerateAsync",
          "fromNodeId": "method:1bus1hn:handle__call_50_GenerateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GenerateAsync",
          "line": 50,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "reason": "Call target GenerateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bus1hn:handle__call_53_CreateDbContextAsync__jump_unknown_CreateDbContextAsync",
          "fromNodeId": "method:1bus1hn:handle__call_53_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "CreateDbContextAsync",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "reason": "Call target CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bus1hn:handle__call_60_Map__jump_unknown_Map",
          "fromNodeId": "method:1bus1hn:handle__call_60_Map",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Map",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "reason": "Call target Map in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1bus1hn:handle__action_49_retry_49__loop_body__method:1bus1hn:handle__action_49_retry_49__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1bus1hn:handle__action_43_guard_clause_43__merge",
        "method:1bus1hn:handle__action_43_handle_branch_43_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 41,
        "end": 62
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs",
          "line": 41,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1al0hre:handle__fragment",
      "ownerFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "ownerSymbolId": "method:1al0hre:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:1al0hre:handle__entry",
      "exitNodeIds": [
        "method:1al0hre:handle__action_18_handle_return_18_0__return",
        "method:1al0hre:handle__action_18_return_18__return",
        "method:1al0hre:handle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1al0hre:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 16,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Handles GetReaderPageQuery by calling the epub reader to fetch the requested page content and returns the Result-wrapped ReaderPageViewModel."
        },
        {
          "id": "method:1al0hre:handle__action_18_handle_return_18_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return _epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken);"
        },
        {
          "id": "method:1al0hre:handle__action_18_return_18__return",
          "kind": "return",
          "label": "Return epub reader result",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Returns the Task<Result<ReaderPageViewModel>> produced by IEpubReader without additional mapping"
        },
        {
          "id": "method:1al0hre:handle__action_18_external_call_18__linear",
          "kind": "http-call",
          "label": "Delegate to epub reader",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7,
          "detail": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken)"
        },
        {
          "id": "method:1al0hre:handle__call_18_GetEpubContentAsync",
          "kind": "call",
          "label": "GetEpubContentAsync",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.88,
          "detail": "request.EbookId, request.ChapterIndex, request.UserId, cancellationToken"
        },
        {
          "id": "method:1al0hre:handle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1al0hre:handle__entry__method:1al0hre:handle__action_18_handle_return_18_0__return",
          "from": "method:1al0hre:handle__entry",
          "to": "method:1al0hre:handle__action_18_handle_return_18_0__return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1al0hre:handle__action_18_handle_return_18_0__return__method:1al0hre:handle__action_18_return_18__return",
          "from": "method:1al0hre:handle__action_18_handle_return_18_0__return",
          "to": "method:1al0hre:handle__action_18_return_18__return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1al0hre:handle__action_18_return_18__return__method:1al0hre:handle__action_18_external_call_18__linear",
          "from": "method:1al0hre:handle__action_18_return_18__return",
          "to": "method:1al0hre:handle__action_18_external_call_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1al0hre:handle__action_18_external_call_18__linear__call_method:1al0hre:handle__call_18_GetEpubContentAsync",
          "from": "method:1al0hre:handle__action_18_external_call_18__linear",
          "to": "method:1al0hre:handle__call_18_GetEpubContentAsync",
          "kind": "call",
          "label": "request.EbookId, request.ChapterIndex, request.UserId, cancellationToken",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1al0hre:handle__call_18_GetEpubContentAsync__implicit_return",
          "from": "method:1al0hre:handle__call_18_GetEpubContentAsync",
          "to": "method:1al0hre:handle__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1al0hre:handle__call_18_GetEpubContentAsync__jump_unknown_GetEpubContentAsync",
          "fromNodeId": "method:1al0hre:handle__call_18_GetEpubContentAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetEpubContentAsync",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "reason": "Call target GetEpubContentAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 16,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:11mh753:handle__fragment",
      "ownerFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "ownerSymbolId": "method:11mh753:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:11mh753:handle__entry",
      "exitNodeIds": [
        "method:11mh753:handle__action_10_handle_return_10_0__return",
        "method:11mh753:handle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:11mh753:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 8,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Handles the GetInitializationStatusQuery by returning a successful Result<string> containing a static initialization message."
        },
        {
          "id": "method:11mh753:handle__action_6_implements_interface_6__linear",
          "kind": "statement",
          "label": "Implements IQueryHandler.Handle",
          "line": 6,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7,
          "detail": "This method fulfills the IQueryHandler<GetInitializationStatusQuery, string> contract."
        },
        {
          "id": "method:11mh753:handle__action_8_no_branches_8__linear",
          "kind": "statement",
          "label": "No branching or error paths",
          "line": 8,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Method always returns a successful Result; no validation, loops, retries, or external calls."
        },
        {
          "id": "method:11mh753:handle__action_10_handle_return_10_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 10,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok(\"Nexus E-Reader Application is fully initialized and operational.\"));"
        },
        {
          "id": "method:11mh753:handle__action_10_constant_return_10__linear",
          "kind": "statement",
          "label": "Returns constant initialization message",
          "line": 10,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Returns Task.FromResult(Result.Ok(\"Nexus E-Reader Application is fully initialized and operational.\"))"
        },
        {
          "id": "method:11mh753:handle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:11mh753:handle__entry__method:11mh753:handle__action_6_implements_interface_6__linear",
          "from": "method:11mh753:handle__entry",
          "to": "method:11mh753:handle__action_6_implements_interface_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:11mh753:handle__action_6_implements_interface_6__linear__method:11mh753:handle__action_8_no_branches_8__linear",
          "from": "method:11mh753:handle__action_6_implements_interface_6__linear",
          "to": "method:11mh753:handle__action_8_no_branches_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:11mh753:handle__action_8_no_branches_8__linear__method:11mh753:handle__action_10_handle_return_10_0__return",
          "from": "method:11mh753:handle__action_8_no_branches_8__linear",
          "to": "method:11mh753:handle__action_10_handle_return_10_0__return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:11mh753:handle__action_10_handle_return_10_0__return__method:11mh753:handle__action_10_constant_return_10__linear",
          "from": "method:11mh753:handle__action_10_handle_return_10_0__return",
          "to": "method:11mh753:handle__action_10_constant_return_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:11mh753:handle__action_10_constant_return_10__linear__implicit_return",
          "from": "method:11mh753:handle__action_10_constant_return_10__linear",
          "to": "method:11mh753:handle__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 8,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1t48k4l:getuserprofilequeryhandler__fragment",
      "ownerFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "ownerSymbolId": "method:1t48k4l:getuserprofilequeryhandler",
      "ownerSymbolName": "GetUserProfileQueryHandler",
      "entryNodeId": "method:1t48k4l:getuserprofilequeryhandler__entry",
      "exitNodeIds": [
        "method:1t48k4l:getuserprofilequeryhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1t48k4l:getuserprofilequeryhandler__entry",
          "kind": "entry",
          "label": "GetUserProfileQueryHandler entry",
          "line": 13,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Constructor that captures the IDbContextFactory dependency."
        },
        {
          "id": "method:1t48k4l:getuserprofilequeryhandler__action_15_assignment_15__linear",
          "kind": "statement",
          "label": "Stores dbContextFactory",
          "line": 15,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "_dbContextFactory = dbContextFactory"
        },
        {
          "id": "method:1t48k4l:getuserprofilequeryhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1t48k4l:getuserprofilequeryhandler__entry__method:1t48k4l:getuserprofilequeryhandler__action_15_assignment_15__linear",
          "from": "method:1t48k4l:getuserprofilequeryhandler__entry",
          "to": "method:1t48k4l:getuserprofilequeryhandler__action_15_assignment_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1t48k4l:getuserprofilequeryhandler__action_15_assignment_15__linear__implicit_return",
          "from": "method:1t48k4l:getuserprofilequeryhandler__action_15_assignment_15__linear",
          "to": "method:1t48k4l:getuserprofilequeryhandler__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method GetUserProfileQueryHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16gxcfa:handle__fragment",
      "ownerFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "ownerSymbolId": "method:16gxcfa:handle",
      "ownerSymbolName": "Handle",
      "entryNodeId": "method:16gxcfa:handle__entry",
      "exitNodeIds": [
        "method:16gxcfa:handle__action_62_handle_return_62_9__return",
        "method:16gxcfa:handle__action_65_handle_return_65_10__return",
        "method:16gxcfa:handle__action_65_return_65__return"
      ],
      "nodes": [
        {
          "id": "method:16gxcfa:handle__entry",
          "kind": "entry",
          "label": "Handle entry",
          "line": 18,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.99,
          "detail": "Loads a single user's profile from the database, maps nested DTOs (plan, last read book, roles, quiz score) and returns Result.Ok(profile) or Result.Fail when not found."
        },
        {
          "id": "method:16gxcfa:handle__action_20_handle_await_20_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:16gxcfa:handle__action_20_resource_acquisition_20__linear",
          "kind": "statement",
          "label": "Create DbContext",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken)"
        },
        {
          "id": "method:16gxcfa:handle__action_21_handle_await_21_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.81,
          "detail": "var profile = await dbContext.Users"
        },
        {
          "id": "method:16gxcfa:handle__action_21_db_read_21__linear",
          "kind": "statement",
          "label": "Query Users and project into UserProfileDto",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Single query with Select projection mapping many nested properties and navigation collections"
        },
        {
          "id": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet_",
          "kind": "call",
          "label": "AppDbContext.Users (DbSet)",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88,
          "detail": "LINQ: filter u.Id == request.UserId; projection into UserProfileDto"
        },
        {
          "id": "method:16gxcfa:handle__action_22_handle_repository_read_22_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86,
          "detail": ".Where(u => u.Id == request.UserId)"
        },
        {
          "id": "method:16gxcfa:handle__action_23_handle_mapping_23_3__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 23,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.74,
          "detail": ".Select(u => new UserProfileDto"
        },
        {
          "id": "method:16gxcfa:handle__action_23_projection_23__linear",
          "kind": "statement",
          "label": "Map primitive fields and nested DTOs",
          "line": 23,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Maps Email, AITokensUsed, Plan (SubscriptionPlanDto), LastReadBook (LastReadBookDto), Roles array, AverageQuizScore"
        },
        {
          "id": "method:16gxcfa:handle__action_27_branch_fallback_27__linear",
          "kind": "statement",
          "label": "TenantId parse with fallback",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Parses TenantId string to Guid when length==36, otherwise Guid.Empty"
        },
        {
          "id": "method:16gxcfa:handle__action_28_branch_fallback_28__linear",
          "kind": "statement",
          "label": "Subscription plan projection with fallback",
          "line": 28,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Maps SubscriptionPlan when present, otherwise returns empty DTO"
        },
        {
          "id": "method:16gxcfa:handle__action_35_conditional_computation_35__linear",
          "kind": "statement",
          "label": "Average quiz score calculation with guard on total questions",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Computes average percentage across quiz results that have TotalQuestions>0, otherwise 0"
        },
        {
          "id": "method:16gxcfa:handle__action_36_handle_repository_read_36_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 36,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86,
          "detail": "? (int)u.QuizResults.Where(q => q.TotalQuestions > 0).Average(q => (double)q.Score / q.TotalQuestions * 100)"
        },
        {
          "id": "method:16gxcfa:handle__action_38_collection_selection_38__linear",
          "kind": "statement",
          "label": "Select last read book or null",
          "line": 38,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Orders Ebooks by LastReadDate descending, projects LastReadBookDto and takes FirstOrDefault"
        },
        {
          "id": "method:16gxcfa:handle__action_38_handle_mapping_38_5__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 38,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.74,
          "detail": "LastReadBook = u.Ebooks.OrderByDescending(e => e.LastReadDate).Select(e => new LastReadBookDto"
        },
        {
          "id": "method:16gxcfa:handle__action_52_handle_repository_read_52_6__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 52,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86,
          "detail": "}).FirstOrDefault(),"
        },
        {
          "id": "method:16gxcfa:handle__action_53_join_53__linear",
          "kind": "statement",
          "label": "Build roles array via join",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Filters UserRoles by user id, joins with Roles to select role names and converts to array"
        },
        {
          "id": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet_",
          "kind": "call",
          "label": "AppDbContext.UserRoles (DbSet)",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88,
          "detail": "Used to filter roles by ur.UserId == u.Id and join with Roles"
        },
        {
          "id": "method:16gxcfa:handle__action_54_handle_repository_read_54_7__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86,
          "detail": ".Where(ur => ur.UserId == u.Id)"
        },
        {
          "id": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet_",
          "kind": "call",
          "label": "AppDbContext.Roles (DbSet)",
          "line": 55,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88,
          "detail": "Joined with UserRoles to select role names"
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__condition",
          "kind": "condition",
          "label": "profile == null",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "If query yields null, returns a failing FluentResults Result"
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__true",
          "kind": "branch-true",
          "label": "Result.Fail(\"Profile not found.\")",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition",
          "kind": "condition",
          "label": "profile == null",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78,
          "detail": "if (profile == null)"
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__true",
          "kind": "branch-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__false",
          "kind": "branch-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_62_handle_return_62_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 62,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Profile not found.\");"
        },
        {
          "id": "method:16gxcfa:handle__action_65_handle_return_65_10__return",
          "kind": "return",
          "label": "Returns result",
          "line": 65,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(profile);"
        },
        {
          "id": "method:16gxcfa:handle__action_65_return_65__return",
          "kind": "return",
          "label": "Return successful result",
          "line": 65,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(profile)"
        }
      ],
      "edges": [
        {
          "id": "method:16gxcfa:handle__entry__method:16gxcfa:handle__action_20_handle_await_20_0__await",
          "from": "method:16gxcfa:handle__entry",
          "to": "method:16gxcfa:handle__action_20_handle_await_20_0__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:16gxcfa:handle__action_20_handle_await_20_0__await__method:16gxcfa:handle__action_20_resource_acquisition_20__linear",
          "from": "method:16gxcfa:handle__action_20_handle_await_20_0__await",
          "to": "method:16gxcfa:handle__action_20_resource_acquisition_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_20_resource_acquisition_20__linear__method:16gxcfa:handle__action_21_handle_await_21_1__await",
          "from": "method:16gxcfa:handle__action_20_resource_acquisition_20__linear",
          "to": "method:16gxcfa:handle__action_21_handle_await_21_1__await",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:16gxcfa:handle__action_21_handle_await_21_1__await__method:16gxcfa:handle__action_21_db_read_21__linear",
          "from": "method:16gxcfa:handle__action_21_handle_await_21_1__await",
          "to": "method:16gxcfa:handle__action_21_db_read_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_21_db_read_21__linear__call_method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet_",
          "from": "method:16gxcfa:handle__action_21_db_read_21__linear",
          "to": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet_",
          "kind": "call",
          "label": "LINQ: filter u.Id == request.UserId; projection into UserProfileDto",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet___method:16gxcfa:handle__action_22_handle_repository_read_22_2__linear",
          "from": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet_",
          "to": "method:16gxcfa:handle__action_22_handle_repository_read_22_2__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16gxcfa:handle__action_22_handle_repository_read_22_2__linear__method:16gxcfa:handle__action_23_handle_mapping_23_3__linear",
          "from": "method:16gxcfa:handle__action_22_handle_repository_read_22_2__linear",
          "to": "method:16gxcfa:handle__action_23_handle_mapping_23_3__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.74
        },
        {
          "id": "method:16gxcfa:handle__action_23_handle_mapping_23_3__linear__method:16gxcfa:handle__action_23_projection_23__linear",
          "from": "method:16gxcfa:handle__action_23_handle_mapping_23_3__linear",
          "to": "method:16gxcfa:handle__action_23_projection_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_23_projection_23__linear__method:16gxcfa:handle__action_27_branch_fallback_27__linear",
          "from": "method:16gxcfa:handle__action_23_projection_23__linear",
          "to": "method:16gxcfa:handle__action_27_branch_fallback_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_27_branch_fallback_27__linear__method:16gxcfa:handle__action_28_branch_fallback_28__linear",
          "from": "method:16gxcfa:handle__action_27_branch_fallback_27__linear",
          "to": "method:16gxcfa:handle__action_28_branch_fallback_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_28_branch_fallback_28__linear__method:16gxcfa:handle__action_35_conditional_computation_35__linear",
          "from": "method:16gxcfa:handle__action_28_branch_fallback_28__linear",
          "to": "method:16gxcfa:handle__action_35_conditional_computation_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_35_conditional_computation_35__linear__method:16gxcfa:handle__action_36_handle_repository_read_36_4__linear",
          "from": "method:16gxcfa:handle__action_35_conditional_computation_35__linear",
          "to": "method:16gxcfa:handle__action_36_handle_repository_read_36_4__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16gxcfa:handle__action_36_handle_repository_read_36_4__linear__method:16gxcfa:handle__action_38_collection_selection_38__linear",
          "from": "method:16gxcfa:handle__action_36_handle_repository_read_36_4__linear",
          "to": "method:16gxcfa:handle__action_38_collection_selection_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_38_collection_selection_38__linear__method:16gxcfa:handle__action_38_handle_mapping_38_5__linear",
          "from": "method:16gxcfa:handle__action_38_collection_selection_38__linear",
          "to": "method:16gxcfa:handle__action_38_handle_mapping_38_5__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.74
        },
        {
          "id": "method:16gxcfa:handle__action_38_handle_mapping_38_5__linear__method:16gxcfa:handle__action_52_handle_repository_read_52_6__linear",
          "from": "method:16gxcfa:handle__action_38_handle_mapping_38_5__linear",
          "to": "method:16gxcfa:handle__action_52_handle_repository_read_52_6__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16gxcfa:handle__action_52_handle_repository_read_52_6__linear__method:16gxcfa:handle__action_53_join_53__linear",
          "from": "method:16gxcfa:handle__action_52_handle_repository_read_52_6__linear",
          "to": "method:16gxcfa:handle__action_53_join_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_53_join_53__linear__call_method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet_",
          "from": "method:16gxcfa:handle__action_53_join_53__linear",
          "to": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet_",
          "kind": "call",
          "label": "Used to filter roles by ur.UserId == u.Id and join with Roles",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet___method:16gxcfa:handle__action_54_handle_repository_read_54_7__linear",
          "from": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet_",
          "to": "method:16gxcfa:handle__action_54_handle_repository_read_54_7__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16gxcfa:handle__action_54_handle_repository_read_54_7__linear__call_method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet_",
          "from": "method:16gxcfa:handle__action_54_handle_repository_read_54_7__linear",
          "to": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet_",
          "kind": "call",
          "label": "Joined with UserRoles to select role names",
          "line": 55,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet___method:16gxcfa:handle__action_60_guard_clause_60__condition",
          "from": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet_",
          "to": "method:16gxcfa:handle__action_60_guard_clause_60__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__condition__method:16gxcfa:handle__action_60_guard_clause_60__true",
          "from": "method:16gxcfa:handle__action_60_guard_clause_60__condition",
          "to": "method:16gxcfa:handle__action_60_guard_clause_60__true",
          "kind": "condition-true",
          "label": "Result.Fail(\"Profile not found.\")",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__condition__method:16gxcfa:handle__action_60_guard_clause_60__false",
          "from": "method:16gxcfa:handle__action_60_guard_clause_60__condition",
          "to": "method:16gxcfa:handle__action_60_guard_clause_60__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__true__method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "from": "method:16gxcfa:handle__action_60_guard_clause_60__true",
          "to": "method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__false__method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "from": "method:16gxcfa:handle__action_60_guard_clause_60__false",
          "to": "method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_60_guard_clause_60__merge__method:16gxcfa:handle__action_60_handle_branch_60_8__condition",
          "from": "method:16gxcfa:handle__action_60_guard_clause_60__merge",
          "to": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition__method:16gxcfa:handle__action_60_handle_branch_60_8__true",
          "from": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition",
          "to": "method:16gxcfa:handle__action_60_handle_branch_60_8__true",
          "kind": "condition-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition__method:16gxcfa:handle__action_60_handle_branch_60_8__false",
          "from": "method:16gxcfa:handle__action_60_handle_branch_60_8__condition",
          "to": "method:16gxcfa:handle__action_60_handle_branch_60_8__false",
          "kind": "condition-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__true__method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "from": "method:16gxcfa:handle__action_60_handle_branch_60_8__true",
          "to": "method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__false__method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "from": "method:16gxcfa:handle__action_60_handle_branch_60_8__false",
          "to": "method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16gxcfa:handle__action_60_handle_branch_60_8__merge__method:16gxcfa:handle__action_62_handle_return_62_9__return",
          "from": "method:16gxcfa:handle__action_60_handle_branch_60_8__merge",
          "to": "method:16gxcfa:handle__action_62_handle_return_62_9__return",
          "kind": "return",
          "line": 62,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_62_handle_return_62_9__return__method:16gxcfa:handle__action_65_handle_return_65_10__return",
          "from": "method:16gxcfa:handle__action_62_handle_return_62_9__return",
          "to": "method:16gxcfa:handle__action_65_handle_return_65_10__return",
          "kind": "return",
          "line": 65,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16gxcfa:handle__action_65_handle_return_65_10__return__method:16gxcfa:handle__action_65_return_65__return",
          "from": "method:16gxcfa:handle__action_65_handle_return_65_10__return",
          "to": "method:16gxcfa:handle__action_65_return_65__return",
          "kind": "return",
          "line": 65,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet___jump_NexusReader_Data_Persistence_AppDbContext_Users_DbSet_",
          "fromNodeId": "method:16gxcfa:handle__call_21_AppDbContext_Users_DbSet_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.Users (DbSet)",
          "line": 21,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "reason": "Call target AppDbContext.Users (DbSet) in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet___jump_NexusReader_Data_Persistence_AppDbContext_UserRoles_DbSet_",
          "fromNodeId": "method:16gxcfa:handle__call_53_AppDbContext_UserRoles_DbSet_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.UserRoles (DbSet)",
          "line": 53,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "reason": "Call target AppDbContext.UserRoles (DbSet) in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet___jump_NexusReader_Data_Persistence_AppDbContext_Roles_DbSet_",
          "fromNodeId": "method:16gxcfa:handle__call_55_AppDbContext_Roles_DbSet_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence",
          "targetHint": "AppDbContext.Roles (DbSet)",
          "line": 55,
          "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "reason": "Call target AppDbContext.Roles (DbSet) in NexusReader.Data.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:16gxcfa:handle__action_60_guard_clause_60__merge",
        "method:16gxcfa:handle__action_60_handle_branch_60_8__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 18,
        "end": 66
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method Handle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1va0nah:prouserhandler__fragment",
      "ownerFileId": "file:1hyu1ez:prouserhandler-cs",
      "ownerSymbolId": "method:1va0nah:prouserhandler",
      "ownerSymbolName": "ProUserHandler",
      "entryNodeId": "method:1va0nah:prouserhandler__entry",
      "exitNodeIds": [
        "method:1va0nah:prouserhandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1va0nah:prouserhandler__entry",
          "kind": "entry",
          "label": "ProUserHandler entry",
          "line": 15,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.99,
          "detail": "Constructor: receives and stores a DbContext factory for use by the handler."
        },
        {
          "id": "method:1va0nah:prouserhandler__action_17_assign_17__linear",
          "kind": "statement",
          "label": "Store injected dependency",
          "line": 17,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "Assigns _dbContextFactory = dbContextFactory"
        },
        {
          "id": "method:1va0nah:prouserhandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1va0nah:prouserhandler__entry__method:1va0nah:prouserhandler__action_17_assign_17__linear",
          "from": "method:1va0nah:prouserhandler__entry",
          "to": "method:1va0nah:prouserhandler__action_17_assign_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1va0nah:prouserhandler__action_17_assign_17__linear__implicit_return",
          "from": "method:1va0nah:prouserhandler__action_17_assign_17__linear",
          "to": "method:1va0nah:prouserhandler__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method ProUserHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:14jdxkg:handlerequirementasync__fragment",
      "ownerFileId": "file:1hyu1ez:prouserhandler-cs",
      "ownerSymbolId": "method:14jdxkg:handlerequirementasync",
      "ownerSymbolName": "HandleRequirementAsync",
      "entryNodeId": "method:14jdxkg:handlerequirementasync__entry",
      "exitNodeIds": [
        "method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return",
        "method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return",
        "method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return",
        "method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return",
        "method:14jdxkg:handlerequirementasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:14jdxkg:handlerequirementasync__entry",
          "kind": "entry",
          "label": "HandleRequirementAsync entry",
          "line": 20,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.99,
          "detail": "Core authorization logic: loads the current user from the DB and grants the requirement when the user has unlimited tokens or remaining AI token quota."
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_24_handlerequirementasync_repository_read_24_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 24,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86,
          "detail": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_24_claim_read_24__linear",
          "kind": "statement",
          "label": "Read user id from ClaimsPrincipal",
          "line": 24,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier)"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "If no NameIdentifier claim, method returns early"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__true",
          "kind": "branch-true",
          "label": "return (no authorization attempt)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrEmpty(userId))"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 27,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_30_db_context_create_30__linear",
          "kind": "statement",
          "label": "Create DbContext from factory (scoped local using)",
          "line": 30,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "using var db = _dbContextFactory.CreateDbContext(); ensures disposal at end of block"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_31_handlerequirementasync_await_31_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 31,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.81,
          "detail": "var user = await db.Users"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_31_db_query_31__linear",
          "kind": "statement",
          "label": "Load user with subscription",
          "line": 31,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "var user = await db.Users.Include(u => u.SubscriptionPlan).FirstOrDefaultAsync(u => u.Id == userId); — reads user and subscription from persistence"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_null_check_35__linear",
          "kind": "statement",
          "label": "Return if user not found",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "No requirement evaluation when the user record cannot be found"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78,
          "detail": "if (user == null)"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 37,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition",
          "kind": "condition",
          "label": "user.SubscriptionPlan?.IsUnlimitedTokens == true",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "If subscription marks unlimited tokens, the requirement is succeeded and method returns"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__true",
          "kind": "branch-true",
          "label": "context.Succeed(requirement)",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__false",
          "kind": "branch-false",
          "label": "return",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition",
          "kind": "condition",
          "label": "user.SubscriptionPlan?.IsUnlimitedTokens == true",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78,
          "detail": "if (user.SubscriptionPlan?.IsUnlimitedTokens == true)"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_43_handlerequirementasync_repository_read_43_7__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 43,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86,
          "detail": "context.Succeed(requirement);"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 44,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition",
          "kind": "condition",
          "label": "user.AITokensUsed < user.AITokenLimit",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "If user is still under their AI token limit, succeed requirement and return"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__true",
          "kind": "branch-true",
          "label": "context.Succeed(requirement)",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__false",
          "kind": "branch-false",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition",
          "kind": "condition",
          "label": "user.AITokensUsed < user.AITokenLimit",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78,
          "detail": "if (user.AITokensUsed < user.AITokenLimit)"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_50_handlerequirementasync_repository_read_50_10__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 50,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86,
          "detail": "context.Succeed(requirement);"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return",
          "kind": "return",
          "label": "Returns result",
          "line": 51,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_52_implicit_fallback_52__linear",
          "kind": "statement",
          "label": "Deny by omission",
          "line": 52,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7,
          "detail": "If neither rule matched, method completes without calling context.Succeed — requirement is not granted"
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 53,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:14jdxkg:handlerequirementasync__entry__method:14jdxkg:handlerequirementasync__action_24_handlerequirementasync_repository_read_24_0__linear",
          "from": "method:14jdxkg:handlerequirementasync__entry",
          "to": "method:14jdxkg:handlerequirementasync__action_24_handlerequirementasync_repository_read_24_0__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_24_handlerequirementasync_repository_read_24_0__linear__method:14jdxkg:handlerequirementasync__action_24_claim_read_24__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_24_handlerequirementasync_repository_read_24_0__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_24_claim_read_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_24_claim_read_24__linear__method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_24_claim_read_24__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition__method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__true",
          "from": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__true",
          "kind": "condition-true",
          "label": "return (no authorization attempt)",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition__method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__false",
          "from": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__true__method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__true",
          "to": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__false__method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__false",
          "to": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge__method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition__method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__true",
          "from": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition__method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__false",
          "from": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__true__method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__true",
          "to": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__false__method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__false",
          "to": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge__method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return",
          "from": "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return__method:14jdxkg:handlerequirementasync__action_30_db_context_create_30__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_27_handlerequirementasync_return_27_2__return",
          "to": "method:14jdxkg:handlerequirementasync__action_30_db_context_create_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_30_db_context_create_30__linear__method:14jdxkg:handlerequirementasync__action_31_handlerequirementasync_await_31_3__await",
          "from": "method:14jdxkg:handlerequirementasync__action_30_db_context_create_30__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_31_handlerequirementasync_await_31_3__await",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_31_handlerequirementasync_await_31_3__await__method:14jdxkg:handlerequirementasync__action_31_db_query_31__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_31_handlerequirementasync_await_31_3__await",
          "to": "method:14jdxkg:handlerequirementasync__action_31_db_query_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_31_db_query_31__linear__method:14jdxkg:handlerequirementasync__action_35_null_check_35__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_31_db_query_31__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_35_null_check_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_null_check_35__linear__method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_35_null_check_35__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition__method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__true",
          "from": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition__method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__false",
          "from": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__true__method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__true",
          "to": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__false__method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__false",
          "to": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge__method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return",
          "from": "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return__method:14jdxkg:handlerequirementasync__action_40_branch_40__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_37_handlerequirementasync_return_37_5__return",
          "to": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition__method:14jdxkg:handlerequirementasync__action_40_branch_40__true",
          "from": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_40_branch_40__true",
          "kind": "condition-true",
          "label": "context.Succeed(requirement)",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition__method:14jdxkg:handlerequirementasync__action_40_branch_40__false",
          "from": "method:14jdxkg:handlerequirementasync__action_40_branch_40__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_40_branch_40__false",
          "kind": "condition-false",
          "label": "return",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__true__method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_40_branch_40__true",
          "to": "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__false__method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_40_branch_40__false",
          "to": "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge__method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition__method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__true",
          "from": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition__method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__false",
          "from": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__true__method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__true",
          "to": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__false__method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__false",
          "to": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge__method:14jdxkg:handlerequirementasync__action_43_handlerequirementasync_repository_read_43_7__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_43_handlerequirementasync_repository_read_43_7__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_43_handlerequirementasync_repository_read_43_7__linear__method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return",
          "from": "method:14jdxkg:handlerequirementasync__action_43_handlerequirementasync_repository_read_43_7__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return__method:14jdxkg:handlerequirementasync__action_47_branch_47__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_44_handlerequirementasync_return_44_8__return",
          "to": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition__method:14jdxkg:handlerequirementasync__action_47_branch_47__true",
          "from": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_47_branch_47__true",
          "kind": "condition-true",
          "label": "context.Succeed(requirement)",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition__method:14jdxkg:handlerequirementasync__action_47_branch_47__false",
          "from": "method:14jdxkg:handlerequirementasync__action_47_branch_47__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_47_branch_47__false",
          "kind": "condition-false",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__true__method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_47_branch_47__true",
          "to": "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__false__method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_47_branch_47__false",
          "to": "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge__method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition",
          "from": "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition__method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__true",
          "from": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition__method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__false",
          "from": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__condition",
          "to": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__true__method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__true",
          "to": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__false__method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "from": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__false",
          "to": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge__method:14jdxkg:handlerequirementasync__action_50_handlerequirementasync_repository_read_50_10__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge",
          "to": "method:14jdxkg:handlerequirementasync__action_50_handlerequirementasync_repository_read_50_10__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_50_handlerequirementasync_repository_read_50_10__linear__method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return",
          "from": "method:14jdxkg:handlerequirementasync__action_50_handlerequirementasync_repository_read_50_10__linear",
          "to": "method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return",
          "kind": "return",
          "line": 51,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return__method:14jdxkg:handlerequirementasync__action_52_implicit_fallback_52__linear",
          "from": "method:14jdxkg:handlerequirementasync__action_51_handlerequirementasync_return_51_11__return",
          "to": "method:14jdxkg:handlerequirementasync__action_52_implicit_fallback_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14jdxkg:handlerequirementasync__action_52_implicit_fallback_52__linear__implicit_return",
          "from": "method:14jdxkg:handlerequirementasync__action_52_implicit_fallback_52__linear",
          "to": "method:14jdxkg:handlerequirementasync__implicit_return",
          "kind": "return",
          "line": 53,
          "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:14jdxkg:handlerequirementasync__action_25_guard_clause_25__merge",
        "method:14jdxkg:handlerequirementasync__action_25_handlerequirementasync_branch_25_1__merge",
        "method:14jdxkg:handlerequirementasync__action_35_handlerequirementasync_branch_35_4__merge",
        "method:14jdxkg:handlerequirementasync__action_40_branch_40__merge",
        "method:14jdxkg:handlerequirementasync__action_41_handlerequirementasync_branch_41_6__merge",
        "method:14jdxkg:handlerequirementasync__action_47_branch_47__merge",
        "method:14jdxkg:handlerequirementasync__action_48_handlerequirementasync_branch_48_9__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 53
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method HandleRequirementAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19ym4q4:up__fragment",
      "ownerFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "ownerSymbolId": "method:19ym4q4:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:19ym4q4:up__entry",
      "exitNodeIds": [
        "method:19ym4q4:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:19ym4q4:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.99,
          "detail": "Creates database tables, constraints and indexes needed for initial application schema on Postgres (identity tables, semantic cache, ebooks) during migration up."
        },
        {
          "id": "method:19ym4q4:up__action_15_create_table_15__linear",
          "kind": "statement",
          "label": "Create AspNetRoles",
          "line": 15,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetRoles\", columns: { Id, Name, NormalizedName, ConcurrencyStamp }, primary key Id)"
        },
        {
          "id": "method:19ym4q4:up__action_29_create_table_29__linear",
          "kind": "statement",
          "label": "Create AspNetUsers",
          "line": 29,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetUsers\", columns include AITokenLimit, AITokensUsed, TenantId, CurrentPlan, identity fields..., primary key Id)"
        },
        {
          "id": "method:19ym4q4:up__action_58_create_table_58__linear",
          "kind": "statement",
          "label": "Create SemanticKnowledgeCache",
          "line": 58,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"SemanticKnowledgeCache\", columns: ContentHash (PK), JsonData, ModelId, PromptVersion, CreatedAt)"
        },
        {
          "id": "method:19ym4q4:up__action_73_create_table_73__linear",
          "kind": "statement",
          "label": "Create AspNetRoleClaims",
          "line": 73,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetRoleClaims\", Id (identity), RoleId, ClaimType, ClaimValue) with FK -> AspNetRoles(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_94_create_table_94__linear",
          "kind": "statement",
          "label": "Create AspNetUserClaims",
          "line": 94,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetUserClaims\", Id (identity), UserId, ClaimType, ClaimValue) with FK -> AspNetUsers(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_115_create_table_115__linear",
          "kind": "statement",
          "label": "Create AspNetUserLogins",
          "line": 115,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetUserLogins\", composite PK(LoginProvider, ProviderKey), UserId) with FK -> AspNetUsers(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_135_create_table_135__linear",
          "kind": "statement",
          "label": "Create AspNetUserRoles",
          "line": 135,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetUserRoles\", composite PK(UserId, RoleId)) with FKs -> AspNetRoles(Id), AspNetUsers(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_159_create_table_159__linear",
          "kind": "statement",
          "label": "Create AspNetUserTokens",
          "line": 159,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"AspNetUserTokens\", composite PK(UserId, LoginProvider, Name)) with FK -> AspNetUsers(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_179_create_table_179__linear",
          "kind": "statement",
          "label": "Create Ebooks",
          "line": 179,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"Ebooks\", columns: Id (PK, Guid), Title, Author, FilePath, CoverUrl, AddedDate, LastReadDate, UserId) with FK -> AspNetUsers(Id)"
        },
        {
          "id": "method:19ym4q4:up__action_203_create_index_203__linear",
          "kind": "statement",
          "label": "Indexes on identity and domain tables",
          "line": 203,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "CreateIndex calls for RoleId, NormalizedName (unique), UserId, NormalizedEmail, NormalizedUserName (unique), Ebooks.UserId, SemanticKnowledgeCache.ContentHash (unique)"
        },
        {
          "id": "method:19ym4q4:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 250,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:19ym4q4:up__entry__method:19ym4q4:up__action_15_create_table_15__linear",
          "from": "method:19ym4q4:up__entry",
          "to": "method:19ym4q4:up__action_15_create_table_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_15_create_table_15__linear__method:19ym4q4:up__action_29_create_table_29__linear",
          "from": "method:19ym4q4:up__action_15_create_table_15__linear",
          "to": "method:19ym4q4:up__action_29_create_table_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_29_create_table_29__linear__method:19ym4q4:up__action_58_create_table_58__linear",
          "from": "method:19ym4q4:up__action_29_create_table_29__linear",
          "to": "method:19ym4q4:up__action_58_create_table_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_58_create_table_58__linear__method:19ym4q4:up__action_73_create_table_73__linear",
          "from": "method:19ym4q4:up__action_58_create_table_58__linear",
          "to": "method:19ym4q4:up__action_73_create_table_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_73_create_table_73__linear__method:19ym4q4:up__action_94_create_table_94__linear",
          "from": "method:19ym4q4:up__action_73_create_table_73__linear",
          "to": "method:19ym4q4:up__action_94_create_table_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_94_create_table_94__linear__method:19ym4q4:up__action_115_create_table_115__linear",
          "from": "method:19ym4q4:up__action_94_create_table_94__linear",
          "to": "method:19ym4q4:up__action_115_create_table_115__linear",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_115_create_table_115__linear__method:19ym4q4:up__action_135_create_table_135__linear",
          "from": "method:19ym4q4:up__action_115_create_table_115__linear",
          "to": "method:19ym4q4:up__action_135_create_table_135__linear",
          "kind": "next",
          "line": 135,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_135_create_table_135__linear__method:19ym4q4:up__action_159_create_table_159__linear",
          "from": "method:19ym4q4:up__action_135_create_table_135__linear",
          "to": "method:19ym4q4:up__action_159_create_table_159__linear",
          "kind": "next",
          "line": 159,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_159_create_table_159__linear__method:19ym4q4:up__action_179_create_table_179__linear",
          "from": "method:19ym4q4:up__action_159_create_table_159__linear",
          "to": "method:19ym4q4:up__action_179_create_table_179__linear",
          "kind": "next",
          "line": 179,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_179_create_table_179__linear__method:19ym4q4:up__action_203_create_index_203__linear",
          "from": "method:19ym4q4:up__action_179_create_table_179__linear",
          "to": "method:19ym4q4:up__action_203_create_index_203__linear",
          "kind": "next",
          "line": 203,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ym4q4:up__action_203_create_index_203__linear__implicit_return",
          "from": "method:19ym4q4:up__action_203_create_index_203__linear",
          "to": "method:19ym4q4:up__implicit_return",
          "kind": "return",
          "line": 250,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 13,
        "end": 250
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1kuci8n:down__fragment",
      "ownerFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "ownerSymbolId": "method:1kuci8n:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:1kuci8n:down__entry",
      "exitNodeIds": [
        "method:1kuci8n:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1kuci8n:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 253,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.99,
          "detail": "Drops the tables created by Up in reverse order to roll back the migration."
        },
        {
          "id": "method:1kuci8n:down__action_255_drop_table_255__linear",
          "kind": "statement",
          "label": "Drop AspNetRoleClaims",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetRoleClaims\")"
        },
        {
          "id": "method:1kuci8n:down__action_258_drop_table_258__linear",
          "kind": "statement",
          "label": "Drop AspNetUserClaims",
          "line": 258,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetUserClaims\")"
        },
        {
          "id": "method:1kuci8n:down__action_261_drop_table_261__linear",
          "kind": "statement",
          "label": "Drop AspNetUserLogins",
          "line": 261,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetUserLogins\")"
        },
        {
          "id": "method:1kuci8n:down__action_264_drop_table_264__linear",
          "kind": "statement",
          "label": "Drop AspNetUserRoles",
          "line": 264,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetUserRoles\")"
        },
        {
          "id": "method:1kuci8n:down__action_267_drop_table_267__linear",
          "kind": "statement",
          "label": "Drop AspNetUserTokens",
          "line": 267,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetUserTokens\")"
        },
        {
          "id": "method:1kuci8n:down__action_270_drop_table_270__linear",
          "kind": "statement",
          "label": "Drop Ebooks",
          "line": 270,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"Ebooks\")"
        },
        {
          "id": "method:1kuci8n:down__action_273_drop_table_273__linear",
          "kind": "statement",
          "label": "Drop SemanticKnowledgeCache",
          "line": 273,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"SemanticKnowledgeCache\")"
        },
        {
          "id": "method:1kuci8n:down__action_276_drop_table_276__linear",
          "kind": "statement",
          "label": "Drop AspNetRoles",
          "line": 276,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetRoles\")"
        },
        {
          "id": "method:1kuci8n:down__action_279_drop_table_279__linear",
          "kind": "statement",
          "label": "Drop AspNetUsers",
          "line": 279,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"AspNetUsers\")"
        },
        {
          "id": "method:1kuci8n:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 281,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1kuci8n:down__entry__method:1kuci8n:down__action_255_drop_table_255__linear",
          "from": "method:1kuci8n:down__entry",
          "to": "method:1kuci8n:down__action_255_drop_table_255__linear",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_255_drop_table_255__linear__method:1kuci8n:down__action_258_drop_table_258__linear",
          "from": "method:1kuci8n:down__action_255_drop_table_255__linear",
          "to": "method:1kuci8n:down__action_258_drop_table_258__linear",
          "kind": "next",
          "line": 258,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_258_drop_table_258__linear__method:1kuci8n:down__action_261_drop_table_261__linear",
          "from": "method:1kuci8n:down__action_258_drop_table_258__linear",
          "to": "method:1kuci8n:down__action_261_drop_table_261__linear",
          "kind": "next",
          "line": 261,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_261_drop_table_261__linear__method:1kuci8n:down__action_264_drop_table_264__linear",
          "from": "method:1kuci8n:down__action_261_drop_table_261__linear",
          "to": "method:1kuci8n:down__action_264_drop_table_264__linear",
          "kind": "next",
          "line": 264,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_264_drop_table_264__linear__method:1kuci8n:down__action_267_drop_table_267__linear",
          "from": "method:1kuci8n:down__action_264_drop_table_264__linear",
          "to": "method:1kuci8n:down__action_267_drop_table_267__linear",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_267_drop_table_267__linear__method:1kuci8n:down__action_270_drop_table_270__linear",
          "from": "method:1kuci8n:down__action_267_drop_table_267__linear",
          "to": "method:1kuci8n:down__action_270_drop_table_270__linear",
          "kind": "next",
          "line": 270,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_270_drop_table_270__linear__method:1kuci8n:down__action_273_drop_table_273__linear",
          "from": "method:1kuci8n:down__action_270_drop_table_270__linear",
          "to": "method:1kuci8n:down__action_273_drop_table_273__linear",
          "kind": "next",
          "line": 273,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_273_drop_table_273__linear__method:1kuci8n:down__action_276_drop_table_276__linear",
          "from": "method:1kuci8n:down__action_273_drop_table_273__linear",
          "to": "method:1kuci8n:down__action_276_drop_table_276__linear",
          "kind": "next",
          "line": 276,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_276_drop_table_276__linear__method:1kuci8n:down__action_279_drop_table_279__linear",
          "from": "method:1kuci8n:down__action_276_drop_table_276__linear",
          "to": "method:1kuci8n:down__action_279_drop_table_279__linear",
          "kind": "next",
          "line": 279,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1kuci8n:down__action_279_drop_table_279__linear__implicit_return",
          "from": "method:1kuci8n:down__action_279_drop_table_279__linear",
          "to": "method:1kuci8n:down__implicit_return",
          "kind": "return",
          "line": 281,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 253,
        "end": 281
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs",
          "line": 253,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4nawp0:buildtargetmodel__fragment",
      "ownerFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "ownerSymbolId": "method:4nawp0:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:4nawp0:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:4nawp0:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4nawp0:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 19,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model for the InitialPostgres migration (annotations, entities, properties, keys, indexes, relationships, and navigations)."
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_21_pragma_21__linear",
          "kind": "statement",
          "label": "Suppress obsolete warnings around the model building block",
          "line": 21,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning disable 612, 618 and restore at line 374"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_22_annotation_22__linear",
          "kind": "statement",
          "label": "Set product version and MaxIdentifierLength",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\",\"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_26_provider_extension_26__linear",
          "kind": "statement",
          "label": "Configure Postgres identity column strategy",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_28_schema_definition_28__linear",
          "kind": "statement",
          "label": "Defines AspNetRoles entity",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Properties: Id (text), ConcurrencyStamp (concurrency token), Name, NormalizedName; primary key on Id; unique index on NormalizedName; maps to AspNetRoles table"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_54_schema_definition_54__linear",
          "kind": "statement",
          "label": "Defines AspNetRoleClaims entity",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Id integer identity, ClaimType/ClaimValue text, RoleId text required; PK Id; index on RoleId; maps to AspNetRoleClaims"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_79_schema_definition_79__linear",
          "kind": "statement",
          "label": "Defines AspNetUserClaims entity",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Id integer identity, ClaimType/ClaimValue text, UserId text required; PK Id; index on UserId; maps to AspNetUserClaims"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_104_schema_definition_104__linear",
          "kind": "statement",
          "label": "Defines AspNetUserLogins entity",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Composite PK (LoginProvider, ProviderKey); ProviderDisplayName, UserId required; index on UserId; maps to AspNetUserLogins"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_126_schema_definition_126__linear",
          "kind": "statement",
          "label": "Defines AspNetUserRoles entity",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Composite PK (UserId, RoleId); index on RoleId; maps to AspNetUserRoles"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_141_schema_definition_141__linear",
          "kind": "statement",
          "label": "Defines AspNetUserTokens entity",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Composite PK (UserId, LoginProvider, Name); Value text; maps to AspNetUserTokens"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_160_schema_definition_160__linear",
          "kind": "statement",
          "label": "Defines Ebooks table for NexusReader.Domain.Entities.Ebook",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Id uuid identity PK, AddedDate timestamptz, Author text required max 255, CoverUrl text, FilePath text required, LastReadDate nullable timestamptz, Title text required max 255, UserId text required; index on UserId; maps to Ebooks"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_200_schema_definition_200__linear",
          "kind": "statement",
          "label": "Defines NexusUser (AspNetUsers) entity",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "User properties for identity + domain fields: AITokenLimit, AITokensUsed, CurrentPlan required, TenantId uuid, other identity columns; PK Id; indexes on NormalizedEmail and unique NormalizedUserName; maps to AspNetUsers"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_277_schema_definition_277__linear",
          "kind": "statement",
          "label": "Defines SemanticKnowledgeCache table",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "ContentHash (PK) varchar(64), CreatedAt timestamptz, JsonData text required, ModelId varchar(50) required, PromptVersion varchar(10) required; unique index on ContentHash; maps to SemanticKnowledgeCache"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_308_relationship_308__linear",
          "kind": "statement",
          "label": "Configure Identity relationships (role claims, user claims, logins, roles, tokens)",
          "line": 308,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Sets HasOne/WithMany/HasForeignKey for Identity tables with cascade delete to their role/user parents (e.g., RoleClaim->IdentityRole, UserClaim->NexusUser, UserLogin->NexusUser, UserRole->IdentityRole & NexusUser, UserToken->NexusUser)"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_359_relationship_359__linear",
          "kind": "statement",
          "label": "Ebook -> NexusUser relationship and navigation",
          "line": 359,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.HasOne(User).WithMany(Ebooks).HasForeignKey(UserId).OnDelete(DeleteBehavior.Cascade).IsRequired(); adds navigation 'User'"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_370_navigation_370__linear",
          "kind": "statement",
          "label": "Expose NexusUser.Ebooks navigation property",
          "line": 370,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder configures NexusUser to have a navigation collection 'Ebooks'"
        },
        {
          "id": "method:4nawp0:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 375,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4nawp0:buildtargetmodel__entry__method:4nawp0:buildtargetmodel__action_21_pragma_21__linear",
          "from": "method:4nawp0:buildtargetmodel__entry",
          "to": "method:4nawp0:buildtargetmodel__action_21_pragma_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_21_pragma_21__linear__method:4nawp0:buildtargetmodel__action_22_annotation_22__linear",
          "from": "method:4nawp0:buildtargetmodel__action_21_pragma_21__linear",
          "to": "method:4nawp0:buildtargetmodel__action_22_annotation_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_22_annotation_22__linear__method:4nawp0:buildtargetmodel__action_26_provider_extension_26__linear",
          "from": "method:4nawp0:buildtargetmodel__action_22_annotation_22__linear",
          "to": "method:4nawp0:buildtargetmodel__action_26_provider_extension_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_26_provider_extension_26__linear__method:4nawp0:buildtargetmodel__action_28_schema_definition_28__linear",
          "from": "method:4nawp0:buildtargetmodel__action_26_provider_extension_26__linear",
          "to": "method:4nawp0:buildtargetmodel__action_28_schema_definition_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_28_schema_definition_28__linear__method:4nawp0:buildtargetmodel__action_54_schema_definition_54__linear",
          "from": "method:4nawp0:buildtargetmodel__action_28_schema_definition_28__linear",
          "to": "method:4nawp0:buildtargetmodel__action_54_schema_definition_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_54_schema_definition_54__linear__method:4nawp0:buildtargetmodel__action_79_schema_definition_79__linear",
          "from": "method:4nawp0:buildtargetmodel__action_54_schema_definition_54__linear",
          "to": "method:4nawp0:buildtargetmodel__action_79_schema_definition_79__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_79_schema_definition_79__linear__method:4nawp0:buildtargetmodel__action_104_schema_definition_104__linear",
          "from": "method:4nawp0:buildtargetmodel__action_79_schema_definition_79__linear",
          "to": "method:4nawp0:buildtargetmodel__action_104_schema_definition_104__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_104_schema_definition_104__linear__method:4nawp0:buildtargetmodel__action_126_schema_definition_126__linear",
          "from": "method:4nawp0:buildtargetmodel__action_104_schema_definition_104__linear",
          "to": "method:4nawp0:buildtargetmodel__action_126_schema_definition_126__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_126_schema_definition_126__linear__method:4nawp0:buildtargetmodel__action_141_schema_definition_141__linear",
          "from": "method:4nawp0:buildtargetmodel__action_126_schema_definition_126__linear",
          "to": "method:4nawp0:buildtargetmodel__action_141_schema_definition_141__linear",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_141_schema_definition_141__linear__method:4nawp0:buildtargetmodel__action_160_schema_definition_160__linear",
          "from": "method:4nawp0:buildtargetmodel__action_141_schema_definition_141__linear",
          "to": "method:4nawp0:buildtargetmodel__action_160_schema_definition_160__linear",
          "kind": "next",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_160_schema_definition_160__linear__method:4nawp0:buildtargetmodel__action_200_schema_definition_200__linear",
          "from": "method:4nawp0:buildtargetmodel__action_160_schema_definition_160__linear",
          "to": "method:4nawp0:buildtargetmodel__action_200_schema_definition_200__linear",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_200_schema_definition_200__linear__method:4nawp0:buildtargetmodel__action_277_schema_definition_277__linear",
          "from": "method:4nawp0:buildtargetmodel__action_200_schema_definition_200__linear",
          "to": "method:4nawp0:buildtargetmodel__action_277_schema_definition_277__linear",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_277_schema_definition_277__linear__method:4nawp0:buildtargetmodel__action_308_relationship_308__linear",
          "from": "method:4nawp0:buildtargetmodel__action_277_schema_definition_277__linear",
          "to": "method:4nawp0:buildtargetmodel__action_308_relationship_308__linear",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_308_relationship_308__linear__method:4nawp0:buildtargetmodel__action_359_relationship_359__linear",
          "from": "method:4nawp0:buildtargetmodel__action_308_relationship_308__linear",
          "to": "method:4nawp0:buildtargetmodel__action_359_relationship_359__linear",
          "kind": "next",
          "line": 359,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_359_relationship_359__linear__method:4nawp0:buildtargetmodel__action_370_navigation_370__linear",
          "from": "method:4nawp0:buildtargetmodel__action_359_relationship_359__linear",
          "to": "method:4nawp0:buildtargetmodel__action_370_navigation_370__linear",
          "kind": "next",
          "line": 370,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4nawp0:buildtargetmodel__action_370_navigation_370__linear__implicit_return",
          "from": "method:4nawp0:buildtargetmodel__action_370_navigation_370__linear",
          "to": "method:4nawp0:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 375,
          "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 19,
        "end": 375
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1x7fw9j:up__fragment",
      "ownerFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "ownerSymbolId": "method:1x7fw9j:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1x7fw9j:up__entry",
      "exitNodeIds": [
        "method:1x7fw9j:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1x7fw9j:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 12,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.99,
          "detail": "Apply schema changes: alter several columns (timestamps and the ContentHash length) to new types/constraints."
        },
        {
          "id": "method:1x7fw9j:up__action_14_external_call_14__linear",
          "kind": "http-call",
          "label": "AlterColumn SemanticKnowledgeCache.CreatedAt",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");"
        },
        {
          "id": "method:1x7fw9j:up__action_22_external_call_22__linear",
          "kind": "http-call",
          "label": "AlterColumn SemanticKnowledgeCache.ContentHash (increase length)",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(128)\", maxLength: 128, nullable: false, oldClrType: typeof(string), oldType: \"character varying(64)\", oldMaxLength: 64);"
        },
        {
          "id": "method:1x7fw9j:up__action_32_external_call_32__linear",
          "kind": "http-call",
          "label": "AlterColumn Ebooks.LastReadDate (nullable timestamp)",
          "line": 32,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\", oldNullable: true);"
        },
        {
          "id": "method:1x7fw9j:up__action_41_external_call_41__linear",
          "kind": "http-call",
          "label": "AlterColumn Ebooks.AddedDate",
          "line": 41,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp without time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp with time zone\");"
        },
        {
          "id": "method:1x7fw9j:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 48,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1x7fw9j:up__entry__method:1x7fw9j:up__action_14_external_call_14__linear",
          "from": "method:1x7fw9j:up__entry",
          "to": "method:1x7fw9j:up__action_14_external_call_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x7fw9j:up__action_14_external_call_14__linear__method:1x7fw9j:up__action_22_external_call_22__linear",
          "from": "method:1x7fw9j:up__action_14_external_call_14__linear",
          "to": "method:1x7fw9j:up__action_22_external_call_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x7fw9j:up__action_22_external_call_22__linear__method:1x7fw9j:up__action_32_external_call_32__linear",
          "from": "method:1x7fw9j:up__action_22_external_call_22__linear",
          "to": "method:1x7fw9j:up__action_32_external_call_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x7fw9j:up__action_32_external_call_32__linear__method:1x7fw9j:up__action_41_external_call_41__linear",
          "from": "method:1x7fw9j:up__action_32_external_call_32__linear",
          "to": "method:1x7fw9j:up__action_41_external_call_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x7fw9j:up__action_41_external_call_41__linear__implicit_return",
          "from": "method:1x7fw9j:up__action_41_external_call_41__linear",
          "to": "method:1x7fw9j:up__implicit_return",
          "kind": "return",
          "line": 48,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 12,
        "end": 48
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:pkbr0t:down__fragment",
      "ownerFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "ownerSymbolId": "method:pkbr0t:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:pkbr0t:down__entry",
      "exitNodeIds": [
        "method:pkbr0t:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:pkbr0t:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 51,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.99,
          "detail": "Revert schema changes made in Up: restore previous timestamp types and ContentHash length."
        },
        {
          "id": "method:pkbr0t:down__action_53_external_call_53__linear",
          "kind": "http-call",
          "label": "Revert AlterColumn SemanticKnowledgeCache.CreatedAt",
          "line": 53,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"CreatedAt\", table: \"SemanticKnowledgeCache\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");"
        },
        {
          "id": "method:pkbr0t:down__action_61_external_call_61__linear",
          "kind": "http-call",
          "label": "Revert AlterColumn SemanticKnowledgeCache.ContentHash (reduce length)",
          "line": 61,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<string>(name: \"ContentHash\", table: \"SemanticKnowledgeCache\", type: \"character varying(64)\", maxLength: 64, nullable: false, oldClrType: typeof(string), oldType: \"character varying(128)\", oldMaxLength: 128);"
        },
        {
          "id": "method:pkbr0t:down__action_71_external_call_71__linear",
          "kind": "http-call",
          "label": "Revert AlterColumn Ebooks.LastReadDate (nullable timestamp)",
          "line": 71,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"LastReadDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: true, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\", oldNullable: true);"
        },
        {
          "id": "method:pkbr0t:down__action_80_external_call_80__linear",
          "kind": "http-call",
          "label": "Revert AlterColumn Ebooks.AddedDate",
          "line": 80,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<DateTime>(name: \"AddedDate\", table: \"Ebooks\", type: \"timestamp with time zone\", nullable: false, oldClrType: typeof(DateTime), oldType: \"timestamp without time zone\");"
        },
        {
          "id": "method:pkbr0t:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 87,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:pkbr0t:down__entry__method:pkbr0t:down__action_53_external_call_53__linear",
          "from": "method:pkbr0t:down__entry",
          "to": "method:pkbr0t:down__action_53_external_call_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pkbr0t:down__action_53_external_call_53__linear__method:pkbr0t:down__action_61_external_call_61__linear",
          "from": "method:pkbr0t:down__action_53_external_call_53__linear",
          "to": "method:pkbr0t:down__action_61_external_call_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pkbr0t:down__action_61_external_call_61__linear__method:pkbr0t:down__action_71_external_call_71__linear",
          "from": "method:pkbr0t:down__action_61_external_call_61__linear",
          "to": "method:pkbr0t:down__action_71_external_call_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pkbr0t:down__action_71_external_call_71__linear__method:pkbr0t:down__action_80_external_call_80__linear",
          "from": "method:pkbr0t:down__action_71_external_call_71__linear",
          "to": "method:pkbr0t:down__action_80_external_call_80__linear",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pkbr0t:down__action_80_external_call_80__linear__implicit_return",
          "from": "method:pkbr0t:down__action_80_external_call_80__linear",
          "to": "method:pkbr0t:down__implicit_return",
          "kind": "return",
          "line": 87,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 51,
        "end": 87
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs",
          "line": 51,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wohrks:buildtargetmodel__fragment",
      "ownerFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "ownerSymbolId": "method:1wohrks:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:1wohrks:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:1wohrks:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1wohrks:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 19,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.99,
          "detail": "Populates the EF Core ModelBuilder with entity configurations, annotations, columns, indexes and relationships representing the target schema for this migration."
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_22_model_annotation_22__linear",
          "kind": "statement",
          "label": "Set product version and max identifier length",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_26_external_call_26__linear",
          "kind": "http-call",
          "label": "Enable postgresql identity by default columns",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) (external Npgsql EF provider)"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_28_entity_definition_28__linear",
          "kind": "statement",
          "label": "AspNetRoles (IdentityRole) entity defined",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines properties Id, ConcurrencyStamp, Name, NormalizedName; key Id; unique index NormalizedName; maps to table AspNetRoles"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_54_entity_definition_54__linear",
          "kind": "statement",
          "label": "AspNetRoleClaims (IdentityRoleClaim<string>) entity defined",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id as identity integer, ClaimType, ClaimValue, RoleId (required); key Id; index RoleId; maps to AspNetRoleClaims"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_79_entity_definition_79__linear",
          "kind": "statement",
          "label": "AspNetUserClaims (IdentityUserClaim<string>) entity defined",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id as identity integer, ClaimType, ClaimValue, UserId (required); key Id; index UserId; maps to AspNetUserClaims"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_104_entity_definition_104__linear",
          "kind": "statement",
          "label": "AspNetUserLogins (IdentityUserLogin<string>) entity defined",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines composite key LoginProvider+ProviderKey, ProviderDisplayName, UserId (required); index UserId; maps to AspNetUserLogins"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_126_entity_definition_126__linear",
          "kind": "statement",
          "label": "AspNetUserRoles (IdentityUserRole<string>) entity defined",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines composite key UserId+RoleId; index RoleId; maps to AspNetUserRoles"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_141_entity_definition_141__linear",
          "kind": "statement",
          "label": "AspNetUserTokens (IdentityUserToken<string>) entity defined",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines composite key UserId+LoginProvider+Name and Value; maps to AspNetUserTokens"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_160_entity_definition_160__linear",
          "kind": "statement",
          "label": "Ebook entity defined",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Ebook.Id (Guid, identity on add), AddedDate, Author (required, max 255), CoverUrl, FilePath (required), LastReadDate (nullable), Title (required, max 255), UserId (required); key Id; index UserId; maps to Ebooks"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_200_entity_definition_200__linear",
          "kind": "statement",
          "label": "NexusUser entity defined (AspNetUsers customization)",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines properties including AIToken fields, CurrentPlan (required), Email/NormalizedEmail, PasswordHash, TenantId (Guid), UserName/NormalizedUserName; key Id; indexes on NormalizedEmail and unique NormalizedUserName; maps to AspNetUsers"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_277_entity_definition_277__linear",
          "kind": "statement",
          "label": "SemanticKnowledgeCache entity defined",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines ContentHash (max length 128) as primary key and unique index, CreatedAt, JsonData (required), ModelId (required,max 50), PromptVersion (required,max 10); maps to SemanticKnowledgeCache"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_279_property_definition_279__linear",
          "kind": "statement",
          "label": "SemanticKnowledgeCache.ContentHash max length",
          "line": 279,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Property<string>(\"ContentHash\").HasMaxLength(128).HasColumnType(\"character varying(128)\")"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_308_relationship_308__linear",
          "kind": "statement",
          "label": "Role claim -> Role relationship (FK RoleId)",
          "line": 308,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityRoleClaim.RoleId -> IdentityRole.Id, OnDelete Cascade, required"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_317_relationship_317__linear",
          "kind": "statement",
          "label": "User claim -> NexusUser relationship (FK UserId)",
          "line": 317,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserClaim.UserId -> NexusUser.Id, OnDelete Cascade, required"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_326_relationship_326__linear",
          "kind": "statement",
          "label": "User login -> NexusUser relationship (FK UserId)",
          "line": 326,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserLogin.UserId -> NexusUser.Id, OnDelete Cascade, required"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_335_relationship_335__linear",
          "kind": "statement",
          "label": "User roles -> Role and NexusUser relationships (FK RoleId, UserId)",
          "line": 335,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserRole.RoleId -> IdentityRole.Id and IdentityUserRole.UserId -> NexusUser.Id, OnDelete Cascade, required"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_350_relationship_350__linear",
          "kind": "statement",
          "label": "User tokens -> NexusUser relationship (FK UserId)",
          "line": 350,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserToken.UserId -> NexusUser.Id, OnDelete Cascade, required"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_359_relationship_359__linear",
          "kind": "statement",
          "label": "Ebook -> NexusUser (UserId FK) with navigation",
          "line": 359,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.HasOne(NexusUser, \"User\").WithMany(\"Ebooks\").HasForeignKey(\"UserId\").OnDelete Cascade; includes navigation User"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_370_navigation_370__linear",
          "kind": "statement",
          "label": "NexusUser.Ebooks navigation declared",
          "line": 370,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Navigation(\"Ebooks\") on NexusUser"
        },
        {
          "id": "method:1wohrks:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 375,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1wohrks:buildtargetmodel__entry__method:1wohrks:buildtargetmodel__action_22_model_annotation_22__linear",
          "from": "method:1wohrks:buildtargetmodel__entry",
          "to": "method:1wohrks:buildtargetmodel__action_22_model_annotation_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_22_model_annotation_22__linear__method:1wohrks:buildtargetmodel__action_26_external_call_26__linear",
          "from": "method:1wohrks:buildtargetmodel__action_22_model_annotation_22__linear",
          "to": "method:1wohrks:buildtargetmodel__action_26_external_call_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_26_external_call_26__linear__method:1wohrks:buildtargetmodel__action_28_entity_definition_28__linear",
          "from": "method:1wohrks:buildtargetmodel__action_26_external_call_26__linear",
          "to": "method:1wohrks:buildtargetmodel__action_28_entity_definition_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_28_entity_definition_28__linear__method:1wohrks:buildtargetmodel__action_54_entity_definition_54__linear",
          "from": "method:1wohrks:buildtargetmodel__action_28_entity_definition_28__linear",
          "to": "method:1wohrks:buildtargetmodel__action_54_entity_definition_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_54_entity_definition_54__linear__method:1wohrks:buildtargetmodel__action_79_entity_definition_79__linear",
          "from": "method:1wohrks:buildtargetmodel__action_54_entity_definition_54__linear",
          "to": "method:1wohrks:buildtargetmodel__action_79_entity_definition_79__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_79_entity_definition_79__linear__method:1wohrks:buildtargetmodel__action_104_entity_definition_104__linear",
          "from": "method:1wohrks:buildtargetmodel__action_79_entity_definition_79__linear",
          "to": "method:1wohrks:buildtargetmodel__action_104_entity_definition_104__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_104_entity_definition_104__linear__method:1wohrks:buildtargetmodel__action_126_entity_definition_126__linear",
          "from": "method:1wohrks:buildtargetmodel__action_104_entity_definition_104__linear",
          "to": "method:1wohrks:buildtargetmodel__action_126_entity_definition_126__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_126_entity_definition_126__linear__method:1wohrks:buildtargetmodel__action_141_entity_definition_141__linear",
          "from": "method:1wohrks:buildtargetmodel__action_126_entity_definition_126__linear",
          "to": "method:1wohrks:buildtargetmodel__action_141_entity_definition_141__linear",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_141_entity_definition_141__linear__method:1wohrks:buildtargetmodel__action_160_entity_definition_160__linear",
          "from": "method:1wohrks:buildtargetmodel__action_141_entity_definition_141__linear",
          "to": "method:1wohrks:buildtargetmodel__action_160_entity_definition_160__linear",
          "kind": "next",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_160_entity_definition_160__linear__method:1wohrks:buildtargetmodel__action_200_entity_definition_200__linear",
          "from": "method:1wohrks:buildtargetmodel__action_160_entity_definition_160__linear",
          "to": "method:1wohrks:buildtargetmodel__action_200_entity_definition_200__linear",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_200_entity_definition_200__linear__method:1wohrks:buildtargetmodel__action_277_entity_definition_277__linear",
          "from": "method:1wohrks:buildtargetmodel__action_200_entity_definition_200__linear",
          "to": "method:1wohrks:buildtargetmodel__action_277_entity_definition_277__linear",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_277_entity_definition_277__linear__method:1wohrks:buildtargetmodel__action_279_property_definition_279__linear",
          "from": "method:1wohrks:buildtargetmodel__action_277_entity_definition_277__linear",
          "to": "method:1wohrks:buildtargetmodel__action_279_property_definition_279__linear",
          "kind": "next",
          "line": 279,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_279_property_definition_279__linear__method:1wohrks:buildtargetmodel__action_308_relationship_308__linear",
          "from": "method:1wohrks:buildtargetmodel__action_279_property_definition_279__linear",
          "to": "method:1wohrks:buildtargetmodel__action_308_relationship_308__linear",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_308_relationship_308__linear__method:1wohrks:buildtargetmodel__action_317_relationship_317__linear",
          "from": "method:1wohrks:buildtargetmodel__action_308_relationship_308__linear",
          "to": "method:1wohrks:buildtargetmodel__action_317_relationship_317__linear",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_317_relationship_317__linear__method:1wohrks:buildtargetmodel__action_326_relationship_326__linear",
          "from": "method:1wohrks:buildtargetmodel__action_317_relationship_317__linear",
          "to": "method:1wohrks:buildtargetmodel__action_326_relationship_326__linear",
          "kind": "next",
          "line": 326,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_326_relationship_326__linear__method:1wohrks:buildtargetmodel__action_335_relationship_335__linear",
          "from": "method:1wohrks:buildtargetmodel__action_326_relationship_326__linear",
          "to": "method:1wohrks:buildtargetmodel__action_335_relationship_335__linear",
          "kind": "next",
          "line": 335,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_335_relationship_335__linear__method:1wohrks:buildtargetmodel__action_350_relationship_350__linear",
          "from": "method:1wohrks:buildtargetmodel__action_335_relationship_335__linear",
          "to": "method:1wohrks:buildtargetmodel__action_350_relationship_350__linear",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_350_relationship_350__linear__method:1wohrks:buildtargetmodel__action_359_relationship_359__linear",
          "from": "method:1wohrks:buildtargetmodel__action_350_relationship_350__linear",
          "to": "method:1wohrks:buildtargetmodel__action_359_relationship_359__linear",
          "kind": "next",
          "line": 359,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_359_relationship_359__linear__method:1wohrks:buildtargetmodel__action_370_navigation_370__linear",
          "from": "method:1wohrks:buildtargetmodel__action_359_relationship_359__linear",
          "to": "method:1wohrks:buildtargetmodel__action_370_navigation_370__linear",
          "kind": "next",
          "line": 370,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wohrks:buildtargetmodel__action_370_navigation_370__linear__implicit_return",
          "from": "method:1wohrks:buildtargetmodel__action_370_navigation_370__linear",
          "to": "method:1wohrks:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 375,
          "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 19,
        "end": 375
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sa6em1:up__fragment",
      "ownerFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "ownerSymbolId": "method:1sa6em1:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1sa6em1:up__entry",
      "exitNodeIds": [
        "method:1sa6em1:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1sa6em1:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 12,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.99,
          "detail": "Creates the QuizResults table with columns, primary key, foreign key to AspNetUsers (cascade) and an index on UserId."
        },
        {
          "id": "method:1sa6em1:up__action_14_create_table_14__linear",
          "kind": "statement",
          "label": "Creates QuizResults table",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateTable(name: \"QuizResults\", columns: ..., constraints: ...)"
        },
        {
          "id": "method:1sa6em1:up__action_16_define_columns_16__linear",
          "kind": "statement",
          "label": "Defines columns for QuizResults",
          "line": 16,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "Id (Guid, not null), UserId (string, not null), Topic (string, not null), Score (int, not null), TotalQuestions (int, not null), CompletedDate (DateTime, not null)"
        },
        {
          "id": "method:1sa6em1:up__action_27_primary_key_27__linear",
          "kind": "statement",
          "label": "Sets PK on Id",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "table.PrimaryKey(\"PK_QuizResults\", x => x.Id)"
        },
        {
          "id": "method:1sa6em1:up__action_28_foreign_key_28__linear",
          "kind": "statement",
          "label": "Adds FK to AspNetUsers.UserId with cascade delete",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "FK_QuizResults_AspNetUsers_UserId -> principalTable: \"AspNetUsers\", principalColumn: \"Id\", onDelete: ReferentialAction.Cascade"
        },
        {
          "id": "method:1sa6em1:up__action_36_create_index_36__linear",
          "kind": "statement",
          "label": "Creates index on UserId",
          "line": 36,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateIndex(name: \"IX_QuizResults_UserId\", table: \"QuizResults\", column: \"UserId\")"
        },
        {
          "id": "method:1sa6em1:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 40,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1sa6em1:up__entry__method:1sa6em1:up__action_14_create_table_14__linear",
          "from": "method:1sa6em1:up__entry",
          "to": "method:1sa6em1:up__action_14_create_table_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sa6em1:up__action_14_create_table_14__linear__method:1sa6em1:up__action_16_define_columns_16__linear",
          "from": "method:1sa6em1:up__action_14_create_table_14__linear",
          "to": "method:1sa6em1:up__action_16_define_columns_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sa6em1:up__action_16_define_columns_16__linear__method:1sa6em1:up__action_27_primary_key_27__linear",
          "from": "method:1sa6em1:up__action_16_define_columns_16__linear",
          "to": "method:1sa6em1:up__action_27_primary_key_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sa6em1:up__action_27_primary_key_27__linear__method:1sa6em1:up__action_28_foreign_key_28__linear",
          "from": "method:1sa6em1:up__action_27_primary_key_27__linear",
          "to": "method:1sa6em1:up__action_28_foreign_key_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sa6em1:up__action_28_foreign_key_28__linear__method:1sa6em1:up__action_36_create_index_36__linear",
          "from": "method:1sa6em1:up__action_28_foreign_key_28__linear",
          "to": "method:1sa6em1:up__action_36_create_index_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sa6em1:up__action_36_create_index_36__linear__implicit_return",
          "from": "method:1sa6em1:up__action_36_create_index_36__linear",
          "to": "method:1sa6em1:up__implicit_return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 12,
        "end": 40
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sgd810:down__fragment",
      "ownerFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "ownerSymbolId": "method:1sgd810:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:1sgd810:down__entry",
      "exitNodeIds": [
        "method:1sgd810:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1sgd810:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 43,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.99,
          "detail": "Drops the QuizResults table to rollback the migration."
        },
        {
          "id": "method:1sgd810:down__action_45_drop_table_45__linear",
          "kind": "statement",
          "label": "Drops QuizResults table",
          "line": 45,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"QuizResults\")"
        },
        {
          "id": "method:1sgd810:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1sgd810:down__entry__method:1sgd810:down__action_45_drop_table_45__linear",
          "from": "method:1sgd810:down__entry",
          "to": "method:1sgd810:down__action_45_drop_table_45__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sgd810:down__action_45_drop_table_45__linear__implicit_return",
          "from": "method:1sgd810:down__action_45_drop_table_45__linear",
          "to": "method:1sgd810:down__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 43,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs",
          "line": 43,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:eacfb6:buildtargetmodel__fragment",
      "ownerFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "ownerSymbolId": "method:eacfb6:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:eacfb6:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:eacfb6:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:eacfb6:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 19,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model for the migration: declares entities, columns, keys, indexes, relationships, and Npgsql identity config."
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_26_db_config_call_26__linear",
          "kind": "statement",
          "label": "Use Npgsql identity-by-default columns",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) — configures PostgreSQL identity default behavior"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_28_create_table_28__linear",
          "kind": "statement",
          "label": "AspNetRoles table mapping",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines IdentityRole columns (Id, ConcurrencyStamp, Name, NormalizedName), primary key, unique index RoleNameIndex and table name AspNetRoles"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_54_create_table_54__linear",
          "kind": "statement",
          "label": "AspNetRoleClaims table mapping",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines IdentityRoleClaim columns (Id, ClaimType, ClaimValue, RoleId), PK, index on RoleId and table AspNetRoleClaims"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_79_create_table_79__linear",
          "kind": "statement",
          "label": "AspNetUserClaims table mapping",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines IdentityUserClaim columns, PK, index on UserId and table AspNetUserClaims"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_104_create_table_104__linear",
          "kind": "statement",
          "label": "AspNetUserLogins table mapping",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines IdentityUserLogin composite PK, Provider/Key, UserId index and table AspNetUserLogins"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_126_create_table_126__linear",
          "kind": "statement",
          "label": "AspNetUserRoles table mapping",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines composite PK (UserId, RoleId), index on RoleId and table AspNetUserRoles"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_141_create_table_141__linear",
          "kind": "statement",
          "label": "AspNetUserTokens table mapping",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines composite PK (UserId, LoginProvider, Name) and table AspNetUserTokens"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_160_create_table_160__linear",
          "kind": "statement",
          "label": "Ebooks table mapping",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Ebook columns (Id uuid PK, AddedDate, Author, CoverUrl, FilePath, LastReadDate, Title, UserId), index on UserId and table Ebooks"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_200_create_table_200__linear",
          "kind": "statement",
          "label": "AspNetUsers (NexusUser) table mapping",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines NexusUser / AspNetUsers columns (Id, AITokenLimit, AITokensUsed, AccessFailedCount, ConcurrencyStamp, CurrentPlan, Email, EmailConfirmed, LockoutEnabled, LockoutEnd, NormalizedEmail, NormalizedUserName, PasswordHash, PhoneNumber, PhoneNumberConfirmed, SecurityStamp, TenantId, TwoFactorEnabled, UserName), indices for EmailIndex and UserNameIndex"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_277_create_table_277__linear",
          "kind": "statement",
          "label": "QuizResults table mapping",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines QuizResult columns (Id uuid PK, CompletedDate, Score, Topic, TotalQuestions, UserId), index on UserId and table QuizResults"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_307_create_table_307__linear",
          "kind": "statement",
          "label": "SemanticKnowledgeCache table mapping",
          "line": 307,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines SemanticKnowledgeCache columns (ContentHash PK, CreatedAt, JsonData, ModelId, PromptVersion), unique index on ContentHash and table SemanticKnowledgeCache"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_338_relationship_338__linear",
          "kind": "statement",
          "label": "Identity role claims -> IdentityRole (FK RoleId)",
          "line": 338,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityRoleClaim.RoleId -> IdentityRole.Id with cascade delete"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_347_relationship_347__linear",
          "kind": "statement",
          "label": "Identity user claims -> NexusUser (FK UserId)",
          "line": 347,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserClaim.UserId -> NexusUser.Id with cascade delete"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_356_relationship_356__linear",
          "kind": "statement",
          "label": "Identity user logins -> NexusUser (FK UserId)",
          "line": 356,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserLogin.UserId -> NexusUser.Id with cascade delete"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_365_relationship_365__linear",
          "kind": "statement",
          "label": "Identity user roles -> IdentityRole and NexusUser (FK RoleId, UserId)",
          "line": 365,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserRole.RoleId -> IdentityRole.Id and IdentityUserRole.UserId -> NexusUser.Id with cascade delete"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_380_relationship_380__linear",
          "kind": "statement",
          "label": "Identity user tokens -> NexusUser (FK UserId)",
          "line": 380,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "IdentityUserToken.UserId -> NexusUser.Id with cascade delete"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_389_relationship_389__linear",
          "kind": "statement",
          "label": "Ebook -> NexusUser (FK UserId)",
          "line": 389,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.UserId -> NexusUser.Id with cascade delete; navigation property User and NexusUser.Ebooks"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_400_relationship_400__linear",
          "kind": "statement",
          "label": "QuizResult -> NexusUser (FK UserId)",
          "line": 400,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "QuizResult.UserId -> NexusUser.Id with cascade delete; navigation property User and NexusUser.QuizResults"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_411_navigation_declare_411__linear",
          "kind": "statement",
          "label": "NexusUser navigations",
          "line": 411,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7,
          "detail": "Declares NexusUser navigations Ebooks and QuizResults"
        },
        {
          "id": "method:eacfb6:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 418,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:eacfb6:buildtargetmodel__entry__method:eacfb6:buildtargetmodel__action_26_db_config_call_26__linear",
          "from": "method:eacfb6:buildtargetmodel__entry",
          "to": "method:eacfb6:buildtargetmodel__action_26_db_config_call_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_26_db_config_call_26__linear__method:eacfb6:buildtargetmodel__action_28_create_table_28__linear",
          "from": "method:eacfb6:buildtargetmodel__action_26_db_config_call_26__linear",
          "to": "method:eacfb6:buildtargetmodel__action_28_create_table_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_28_create_table_28__linear__method:eacfb6:buildtargetmodel__action_54_create_table_54__linear",
          "from": "method:eacfb6:buildtargetmodel__action_28_create_table_28__linear",
          "to": "method:eacfb6:buildtargetmodel__action_54_create_table_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_54_create_table_54__linear__method:eacfb6:buildtargetmodel__action_79_create_table_79__linear",
          "from": "method:eacfb6:buildtargetmodel__action_54_create_table_54__linear",
          "to": "method:eacfb6:buildtargetmodel__action_79_create_table_79__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_79_create_table_79__linear__method:eacfb6:buildtargetmodel__action_104_create_table_104__linear",
          "from": "method:eacfb6:buildtargetmodel__action_79_create_table_79__linear",
          "to": "method:eacfb6:buildtargetmodel__action_104_create_table_104__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_104_create_table_104__linear__method:eacfb6:buildtargetmodel__action_126_create_table_126__linear",
          "from": "method:eacfb6:buildtargetmodel__action_104_create_table_104__linear",
          "to": "method:eacfb6:buildtargetmodel__action_126_create_table_126__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_126_create_table_126__linear__method:eacfb6:buildtargetmodel__action_141_create_table_141__linear",
          "from": "method:eacfb6:buildtargetmodel__action_126_create_table_126__linear",
          "to": "method:eacfb6:buildtargetmodel__action_141_create_table_141__linear",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_141_create_table_141__linear__method:eacfb6:buildtargetmodel__action_160_create_table_160__linear",
          "from": "method:eacfb6:buildtargetmodel__action_141_create_table_141__linear",
          "to": "method:eacfb6:buildtargetmodel__action_160_create_table_160__linear",
          "kind": "next",
          "line": 160,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_160_create_table_160__linear__method:eacfb6:buildtargetmodel__action_200_create_table_200__linear",
          "from": "method:eacfb6:buildtargetmodel__action_160_create_table_160__linear",
          "to": "method:eacfb6:buildtargetmodel__action_200_create_table_200__linear",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_200_create_table_200__linear__method:eacfb6:buildtargetmodel__action_277_create_table_277__linear",
          "from": "method:eacfb6:buildtargetmodel__action_200_create_table_200__linear",
          "to": "method:eacfb6:buildtargetmodel__action_277_create_table_277__linear",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_277_create_table_277__linear__method:eacfb6:buildtargetmodel__action_307_create_table_307__linear",
          "from": "method:eacfb6:buildtargetmodel__action_277_create_table_277__linear",
          "to": "method:eacfb6:buildtargetmodel__action_307_create_table_307__linear",
          "kind": "next",
          "line": 307,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_307_create_table_307__linear__method:eacfb6:buildtargetmodel__action_338_relationship_338__linear",
          "from": "method:eacfb6:buildtargetmodel__action_307_create_table_307__linear",
          "to": "method:eacfb6:buildtargetmodel__action_338_relationship_338__linear",
          "kind": "next",
          "line": 338,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_338_relationship_338__linear__method:eacfb6:buildtargetmodel__action_347_relationship_347__linear",
          "from": "method:eacfb6:buildtargetmodel__action_338_relationship_338__linear",
          "to": "method:eacfb6:buildtargetmodel__action_347_relationship_347__linear",
          "kind": "next",
          "line": 347,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_347_relationship_347__linear__method:eacfb6:buildtargetmodel__action_356_relationship_356__linear",
          "from": "method:eacfb6:buildtargetmodel__action_347_relationship_347__linear",
          "to": "method:eacfb6:buildtargetmodel__action_356_relationship_356__linear",
          "kind": "next",
          "line": 356,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_356_relationship_356__linear__method:eacfb6:buildtargetmodel__action_365_relationship_365__linear",
          "from": "method:eacfb6:buildtargetmodel__action_356_relationship_356__linear",
          "to": "method:eacfb6:buildtargetmodel__action_365_relationship_365__linear",
          "kind": "next",
          "line": 365,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_365_relationship_365__linear__method:eacfb6:buildtargetmodel__action_380_relationship_380__linear",
          "from": "method:eacfb6:buildtargetmodel__action_365_relationship_365__linear",
          "to": "method:eacfb6:buildtargetmodel__action_380_relationship_380__linear",
          "kind": "next",
          "line": 380,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_380_relationship_380__linear__method:eacfb6:buildtargetmodel__action_389_relationship_389__linear",
          "from": "method:eacfb6:buildtargetmodel__action_380_relationship_380__linear",
          "to": "method:eacfb6:buildtargetmodel__action_389_relationship_389__linear",
          "kind": "next",
          "line": 389,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_389_relationship_389__linear__method:eacfb6:buildtargetmodel__action_400_relationship_400__linear",
          "from": "method:eacfb6:buildtargetmodel__action_389_relationship_389__linear",
          "to": "method:eacfb6:buildtargetmodel__action_400_relationship_400__linear",
          "kind": "next",
          "line": 400,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_400_relationship_400__linear__method:eacfb6:buildtargetmodel__action_411_navigation_declare_411__linear",
          "from": "method:eacfb6:buildtargetmodel__action_400_relationship_400__linear",
          "to": "method:eacfb6:buildtargetmodel__action_411_navigation_declare_411__linear",
          "kind": "next",
          "line": 411,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eacfb6:buildtargetmodel__action_411_navigation_declare_411__linear__implicit_return",
          "from": "method:eacfb6:buildtargetmodel__action_411_navigation_declare_411__linear",
          "to": "method:eacfb6:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 418,
          "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 19,
        "end": 418
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1b2dxzu:up__fragment",
      "ownerFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "ownerSymbolId": "method:1b2dxzu:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1b2dxzu:up__entry",
      "exitNodeIds": [
        "method:1b2dxzu:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1b2dxzu:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 16,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.99,
          "detail": "Apply schema changes: remove/alter columns, add tenant and vector columns, create KnowledgeUnits/SubscriptionPlans/KnowledgeUnitLinks tables, seed SubscriptionPlans, create indexes and add foreign key."
        },
        {
          "id": "method:1b2dxzu:up__action_18_drop_column_18__linear",
          "kind": "statement",
          "label": "Drop CurrentPlan from AspNetUsers",
          "line": 18,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"CurrentPlan\", table: \"AspNetUsers\")"
        },
        {
          "id": "method:1b2dxzu:up__action_22_alter_database_22__linear",
          "kind": "statement",
          "label": "Enable pgvector extension annotation",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterDatabase().Annotation(\"Npgsql:PostgresExtension:vector\", \",,\")"
        },
        {
          "id": "method:1b2dxzu:up__action_25_alter_column_25__linear",
          "kind": "statement",
          "label": "Convert CreatedAt in SemanticKnowledgeCache to timestamptz",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AlterColumn<DateTime> to type \"timestamp with time zone\""
        },
        {
          "id": "method:1b2dxzu:up__action_33_add_column_33__linear",
          "kind": "statement",
          "label": "Add OriginalText to SemanticKnowledgeCache",
          "line": 33,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"OriginalText\", table: \"SemanticKnowledgeCache\")"
        },
        {
          "id": "method:1b2dxzu:up__action_40_add_column_40__linear",
          "kind": "statement",
          "label": "Add TenantId to SemanticKnowledgeCache",
          "line": 40,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"TenantId\", maxLength:128)"
        },
        {
          "id": "method:1b2dxzu:up__action_48_add_column_48__linear",
          "kind": "statement",
          "label": "Add Vector column (pgvector) to SemanticKnowledgeCache",
          "line": 48,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<Vector>(name: \"Vector\", type: \"vector(1536)\")"
        },
        {
          "id": "method:1b2dxzu:up__action_54_alter_column_54__linear",
          "kind": "statement",
          "label": "Convert CompletedDate in QuizResults to timestamptz",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AlterColumn<DateTime> to type \"timestamp with time zone\""
        },
        {
          "id": "method:1b2dxzu:up__action_62_add_column_62__linear",
          "kind": "statement",
          "label": "Add TenantId to QuizResults",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"TenantId\", maxLength:128)"
        },
        {
          "id": "method:1b2dxzu:up__action_70_alter_column_70__linear",
          "kind": "statement",
          "label": "Convert date columns in Ebooks to timestamptz",
          "line": 70,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Alter LastReadDate and AddedDate to timestamptz"
        },
        {
          "id": "method:1b2dxzu:up__action_87_add_column_87__linear",
          "kind": "statement",
          "label": "Add TenantId to Ebooks",
          "line": 87,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"TenantId\", maxLength:128)"
        },
        {
          "id": "method:1b2dxzu:up__action_95_alter_column_95__linear",
          "kind": "statement",
          "label": "Change AspNetUsers.TenantId from Guid(uuid) to string(128)",
          "line": 95,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AlterColumn<string>(name: \"TenantId\", maxLength:128)"
        },
        {
          "id": "method:1b2dxzu:up__action_104_add_column_104__linear",
          "kind": "statement",
          "label": "Add DisplayName to AspNetUsers",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"DisplayName\", maxLength:100)"
        },
        {
          "id": "method:1b2dxzu:up__action_111_add_column_111__linear",
          "kind": "statement",
          "label": "Add LastAiActionDate to AspNetUsers",
          "line": 111,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<DateTime?>(name: \"LastAiActionDate\")"
        },
        {
          "id": "method:1b2dxzu:up__action_117_add_column_117__linear",
          "kind": "statement",
          "label": "Add LastReadAt and LastReadPageId to AspNetUsers",
          "line": 117,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<DateTime?>(name: \"LastReadAt\"); AddColumn<string>(name: \"LastReadPageId\", maxLength:255)"
        },
        {
          "id": "method:1b2dxzu:up__action_130_add_column_130__linear",
          "kind": "statement",
          "label": "Add SubscriptionPlanId integer to AspNetUsers with default 1",
          "line": 130,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<int>(name: \"SubscriptionPlanId\", defaultValue:1)"
        },
        {
          "id": "method:1b2dxzu:up__action_137_create_table_137__linear",
          "kind": "statement",
          "label": "Create KnowledgeUnits table",
          "line": 137,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Creates columns Id, SourceId, Version, Type, Content, MetadataJson, TenantId, Vector(vector(768)), CreatedAt and primary key on Id"
        },
        {
          "id": "method:1b2dxzu:up__action_156_create_table_156__linear",
          "kind": "statement",
          "label": "Create SubscriptionPlans table",
          "line": 156,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Creates Id (identity), PlanName, AITokenLimit, MonthlyPrice, StripeProductId and primary key on Id"
        },
        {
          "id": "method:1b2dxzu:up__action_172_create_table_172__linear",
          "kind": "statement",
          "label": "Create KnowledgeUnitLinks table with FKs to KnowledgeUnits",
          "line": 172,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Creates Id (identity), SourceUnitId, TargetUnitId, RelationType and FKs referencing KnowledgeUnits(Id) with cascade delete"
        },
        {
          "id": "method:1b2dxzu:up__action_199_insert_data_199__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlans rows (Free, Basic, Pro, Enterprise)",
          "line": 199,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.InsertData into SubscriptionPlans with four predefined plans and token/price values"
        },
        {
          "id": "method:1b2dxzu:up__action_210_create_index_210__linear",
          "kind": "statement",
          "label": "Create TenantId indexes on multiple tables",
          "line": 210,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Creates indexes: SemanticKnowledgeCache.TenantId, QuizResults.TenantId, Ebooks.TenantId, AspNetUsers.TenantId, plus others for knowledge units and plan name"
        },
        {
          "id": "method:1b2dxzu:up__action_225_create_index_225__linear",
          "kind": "statement",
          "label": "Create index for AspNetUsers.SubscriptionPlanId",
          "line": 225,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Index on AspNetUsers.SubscriptionPlanId"
        },
        {
          "id": "method:1b2dxzu:up__action_261_add_foreign_key_261__linear",
          "kind": "statement",
          "label": "Link AspNetUsers.SubscriptionPlanId -> SubscriptionPlans.Id (Restrict)",
          "line": 261,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddForeignKey(name: \"FK_AspNetUsers_SubscriptionPlans_SubscriptionPlanId\", onDelete: ReferentialAction.Restrict)"
        },
        {
          "id": "method:1b2dxzu:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 268,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1b2dxzu:up__entry__method:1b2dxzu:up__action_18_drop_column_18__linear",
          "from": "method:1b2dxzu:up__entry",
          "to": "method:1b2dxzu:up__action_18_drop_column_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_18_drop_column_18__linear__method:1b2dxzu:up__action_22_alter_database_22__linear",
          "from": "method:1b2dxzu:up__action_18_drop_column_18__linear",
          "to": "method:1b2dxzu:up__action_22_alter_database_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_22_alter_database_22__linear__method:1b2dxzu:up__action_25_alter_column_25__linear",
          "from": "method:1b2dxzu:up__action_22_alter_database_22__linear",
          "to": "method:1b2dxzu:up__action_25_alter_column_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_25_alter_column_25__linear__method:1b2dxzu:up__action_33_add_column_33__linear",
          "from": "method:1b2dxzu:up__action_25_alter_column_25__linear",
          "to": "method:1b2dxzu:up__action_33_add_column_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_33_add_column_33__linear__method:1b2dxzu:up__action_40_add_column_40__linear",
          "from": "method:1b2dxzu:up__action_33_add_column_33__linear",
          "to": "method:1b2dxzu:up__action_40_add_column_40__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_40_add_column_40__linear__method:1b2dxzu:up__action_48_add_column_48__linear",
          "from": "method:1b2dxzu:up__action_40_add_column_40__linear",
          "to": "method:1b2dxzu:up__action_48_add_column_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_48_add_column_48__linear__method:1b2dxzu:up__action_54_alter_column_54__linear",
          "from": "method:1b2dxzu:up__action_48_add_column_48__linear",
          "to": "method:1b2dxzu:up__action_54_alter_column_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_54_alter_column_54__linear__method:1b2dxzu:up__action_62_add_column_62__linear",
          "from": "method:1b2dxzu:up__action_54_alter_column_54__linear",
          "to": "method:1b2dxzu:up__action_62_add_column_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_62_add_column_62__linear__method:1b2dxzu:up__action_70_alter_column_70__linear",
          "from": "method:1b2dxzu:up__action_62_add_column_62__linear",
          "to": "method:1b2dxzu:up__action_70_alter_column_70__linear",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_70_alter_column_70__linear__method:1b2dxzu:up__action_87_add_column_87__linear",
          "from": "method:1b2dxzu:up__action_70_alter_column_70__linear",
          "to": "method:1b2dxzu:up__action_87_add_column_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_87_add_column_87__linear__method:1b2dxzu:up__action_95_alter_column_95__linear",
          "from": "method:1b2dxzu:up__action_87_add_column_87__linear",
          "to": "method:1b2dxzu:up__action_95_alter_column_95__linear",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_95_alter_column_95__linear__method:1b2dxzu:up__action_104_add_column_104__linear",
          "from": "method:1b2dxzu:up__action_95_alter_column_95__linear",
          "to": "method:1b2dxzu:up__action_104_add_column_104__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_104_add_column_104__linear__method:1b2dxzu:up__action_111_add_column_111__linear",
          "from": "method:1b2dxzu:up__action_104_add_column_104__linear",
          "to": "method:1b2dxzu:up__action_111_add_column_111__linear",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_111_add_column_111__linear__method:1b2dxzu:up__action_117_add_column_117__linear",
          "from": "method:1b2dxzu:up__action_111_add_column_111__linear",
          "to": "method:1b2dxzu:up__action_117_add_column_117__linear",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_117_add_column_117__linear__method:1b2dxzu:up__action_130_add_column_130__linear",
          "from": "method:1b2dxzu:up__action_117_add_column_117__linear",
          "to": "method:1b2dxzu:up__action_130_add_column_130__linear",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_130_add_column_130__linear__method:1b2dxzu:up__action_137_create_table_137__linear",
          "from": "method:1b2dxzu:up__action_130_add_column_130__linear",
          "to": "method:1b2dxzu:up__action_137_create_table_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_137_create_table_137__linear__method:1b2dxzu:up__action_156_create_table_156__linear",
          "from": "method:1b2dxzu:up__action_137_create_table_137__linear",
          "to": "method:1b2dxzu:up__action_156_create_table_156__linear",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_156_create_table_156__linear__method:1b2dxzu:up__action_172_create_table_172__linear",
          "from": "method:1b2dxzu:up__action_156_create_table_156__linear",
          "to": "method:1b2dxzu:up__action_172_create_table_172__linear",
          "kind": "next",
          "line": 172,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_172_create_table_172__linear__method:1b2dxzu:up__action_199_insert_data_199__linear",
          "from": "method:1b2dxzu:up__action_172_create_table_172__linear",
          "to": "method:1b2dxzu:up__action_199_insert_data_199__linear",
          "kind": "next",
          "line": 199,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_199_insert_data_199__linear__method:1b2dxzu:up__action_210_create_index_210__linear",
          "from": "method:1b2dxzu:up__action_199_insert_data_199__linear",
          "to": "method:1b2dxzu:up__action_210_create_index_210__linear",
          "kind": "next",
          "line": 210,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_210_create_index_210__linear__method:1b2dxzu:up__action_225_create_index_225__linear",
          "from": "method:1b2dxzu:up__action_210_create_index_210__linear",
          "to": "method:1b2dxzu:up__action_225_create_index_225__linear",
          "kind": "next",
          "line": 225,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_225_create_index_225__linear__method:1b2dxzu:up__action_261_add_foreign_key_261__linear",
          "from": "method:1b2dxzu:up__action_225_create_index_225__linear",
          "to": "method:1b2dxzu:up__action_261_add_foreign_key_261__linear",
          "kind": "next",
          "line": 261,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2dxzu:up__action_261_add_foreign_key_261__linear__implicit_return",
          "from": "method:1b2dxzu:up__action_261_add_foreign_key_261__linear",
          "to": "method:1b2dxzu:up__implicit_return",
          "kind": "return",
          "line": 268,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 16,
        "end": 268
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:llsrxk:down__fragment",
      "ownerFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "ownerSymbolId": "method:llsrxk:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:llsrxk:down__entry",
      "exitNodeIds": [
        "method:llsrxk:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:llsrxk:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 271,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.99,
          "detail": "Revert schema changes performed in Up: drop created tables, indexes, columns and restore previous column types/values and the dropped CurrentPlan column."
        },
        {
          "id": "method:llsrxk:down__action_273_drop_foreign_key_273__linear",
          "kind": "statement",
          "label": "Remove FK AspNetUsers -> SubscriptionPlans",
          "line": 273,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropForeignKey(name: \"FK_AspNetUsers_SubscriptionPlans_SubscriptionPlanId\")"
        },
        {
          "id": "method:llsrxk:down__action_277_drop_table_277__linear",
          "kind": "statement",
          "label": "Drop KnowledgeUnitLinks table",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"KnowledgeUnitLinks\")"
        },
        {
          "id": "method:llsrxk:down__action_280_drop_table_280__linear",
          "kind": "statement",
          "label": "Drop SubscriptionPlans table",
          "line": 280,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"SubscriptionPlans\")"
        },
        {
          "id": "method:llsrxk:down__action_283_drop_table_283__linear",
          "kind": "statement",
          "label": "Drop KnowledgeUnits table",
          "line": 283,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"KnowledgeUnits\")"
        },
        {
          "id": "method:llsrxk:down__action_286_drop_index_286__linear",
          "kind": "statement",
          "label": "Drop TenantId and related indexes",
          "line": 286,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Drop indexes created in Up (SemanticKnowledgeCache_TenantId, QuizResults_TenantId, etc.)"
        },
        {
          "id": "method:llsrxk:down__action_306_drop_column_306__linear",
          "kind": "statement",
          "label": "Remove added columns from SemanticKnowledgeCache, QuizResults, Ebooks, AspNetUsers",
          "line": 306,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "Drop OriginalText, TenantId, Vector, TenantId (QuizResults/Ebooks), DisplayName, LastAiActionDate, LastReadAt, LastReadPageId, SubscriptionPlanId"
        },
        {
          "id": "method:llsrxk:down__action_346_alter_database_346__linear",
          "kind": "statement",
          "label": "Remove pgvector extension annotation",
          "line": 346,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterDatabase().OldAnnotation(\"Npgsql:PostgresExtension:vector\", \",,\")"
        },
        {
          "id": "method:llsrxk:down__action_349_alter_column_349__linear",
          "kind": "statement",
          "label": "Revert timestamp columns back to without time zone",
          "line": 349,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AlterColumn<DateTime> to type \"timestamp without time zone\" for multiple columns"
        },
        {
          "id": "method:llsrxk:down__action_382_alter_column_382__linear",
          "kind": "statement",
          "label": "Revert AspNetUsers.TenantId back to Guid/uuid",
          "line": 382,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AlterColumn<Guid>(name: \"TenantId\", type:\"uuid\")"
        },
        {
          "id": "method:llsrxk:down__action_391_add_column_391__linear",
          "kind": "statement",
          "label": "Restore CurrentPlan on AspNetUsers",
          "line": 391,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7,
          "detail": "AddColumn<string>(name: \"CurrentPlan\", table: \"AspNetUsers\")"
        },
        {
          "id": "method:llsrxk:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 397,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:llsrxk:down__entry__method:llsrxk:down__action_273_drop_foreign_key_273__linear",
          "from": "method:llsrxk:down__entry",
          "to": "method:llsrxk:down__action_273_drop_foreign_key_273__linear",
          "kind": "next",
          "line": 273,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_273_drop_foreign_key_273__linear__method:llsrxk:down__action_277_drop_table_277__linear",
          "from": "method:llsrxk:down__action_273_drop_foreign_key_273__linear",
          "to": "method:llsrxk:down__action_277_drop_table_277__linear",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_277_drop_table_277__linear__method:llsrxk:down__action_280_drop_table_280__linear",
          "from": "method:llsrxk:down__action_277_drop_table_277__linear",
          "to": "method:llsrxk:down__action_280_drop_table_280__linear",
          "kind": "next",
          "line": 280,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_280_drop_table_280__linear__method:llsrxk:down__action_283_drop_table_283__linear",
          "from": "method:llsrxk:down__action_280_drop_table_280__linear",
          "to": "method:llsrxk:down__action_283_drop_table_283__linear",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_283_drop_table_283__linear__method:llsrxk:down__action_286_drop_index_286__linear",
          "from": "method:llsrxk:down__action_283_drop_table_283__linear",
          "to": "method:llsrxk:down__action_286_drop_index_286__linear",
          "kind": "next",
          "line": 286,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_286_drop_index_286__linear__method:llsrxk:down__action_306_drop_column_306__linear",
          "from": "method:llsrxk:down__action_286_drop_index_286__linear",
          "to": "method:llsrxk:down__action_306_drop_column_306__linear",
          "kind": "next",
          "line": 306,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_306_drop_column_306__linear__method:llsrxk:down__action_346_alter_database_346__linear",
          "from": "method:llsrxk:down__action_306_drop_column_306__linear",
          "to": "method:llsrxk:down__action_346_alter_database_346__linear",
          "kind": "next",
          "line": 346,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_346_alter_database_346__linear__method:llsrxk:down__action_349_alter_column_349__linear",
          "from": "method:llsrxk:down__action_346_alter_database_346__linear",
          "to": "method:llsrxk:down__action_349_alter_column_349__linear",
          "kind": "next",
          "line": 349,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_349_alter_column_349__linear__method:llsrxk:down__action_382_alter_column_382__linear",
          "from": "method:llsrxk:down__action_349_alter_column_349__linear",
          "to": "method:llsrxk:down__action_382_alter_column_382__linear",
          "kind": "next",
          "line": 382,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_382_alter_column_382__linear__method:llsrxk:down__action_391_add_column_391__linear",
          "from": "method:llsrxk:down__action_382_alter_column_382__linear",
          "to": "method:llsrxk:down__action_391_add_column_391__linear",
          "kind": "next",
          "line": 391,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.7
        },
        {
          "id": "method:llsrxk:down__action_391_add_column_391__linear__implicit_return",
          "from": "method:llsrxk:down__action_391_add_column_391__linear",
          "to": "method:llsrxk:down__implicit_return",
          "kind": "return",
          "line": 397,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 271,
        "end": 397
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs",
          "line": 271,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:tz9mq3:buildtargetmodel__fragment",
      "ownerFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "ownerSymbolId": "method:tz9mq3:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:tz9mq3:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:tz9mq3:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:tz9mq3:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.99,
          "detail": "Populates the EF Core ModelBuilder with entity types, columns, keys, indices, relationships, Postgres/vector extensions and seed data for this migration snapshot."
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Sets model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\",\"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\",63)"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_27_external_call_27__linear",
          "kind": "http-call",
          "label": "Enables Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_28_external_call_28__linear",
          "kind": "http-call",
          "label": "Configures identity column behavior",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_30_entity_configuration_30__linear",
          "kind": "statement",
          "label": "Microsoft.AspNetCore.Identity.IdentityRole",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id, ConcurrencyStamp, Name, NormalizedName, primary key and unique index RoleNameIndex"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_162_entity_configuration_162__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.Ebook",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id, AddedDate, Author, FilePath, TenantId, Title, UserId; indices on TenantId and UserId; table Ebooks"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_209_entity_configuration_209__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.KnowledgeUnit",
          "line": 209,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id, Content, CreatedAt, SourceId, TenantId, Type, Vector (vector(768)), Version; indices on SourceId and TenantId"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_255_entity_configuration_255__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.KnowledgeUnitLink",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id (identity), RelationType, SourceUnitId, TargetUnitId; indices on SourceUnitId and TargetUnitId"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_287_entity_configuration_287__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.NexusUser",
          "line": 287,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines identity fields, subscription plan FK (SubscriptionPlanId default 1), indices on NormalizedEmail, NormalizedUserName, SubscriptionPlanId, TenantId"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_422_entity_configuration_422__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.SemanticKnowledgeCache",
          "line": 422,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines ContentHash PK, CreatedAt, JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector (vector(1536)); unique index on ContentHash"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_467_entity_configuration_467__linear",
          "kind": "statement",
          "label": "NexusReader.Domain.Entities.SubscriptionPlan",
          "line": 467,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Id (identity), AITokenLimit, MonthlyPrice, PlanName, StripeProductId; unique index on PlanName; seeds four plans via HasData"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_498_persistence_seed_498__linear",
          "kind": "statement",
          "label": "Seeds SubscriptionPlans",
          "line": 498,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "HasData inserts 4 subscription plan rows: Free, Basic, Pro, Enterprise with Ids 1..4 and token/price values"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_533_relationship_533__linear",
          "kind": "statement",
          "label": "Identity and domain relationships",
          "line": 533,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures FK relations and cascade behaviors (e.g. IdentityRoleClaim->IdentityRole, User related FKs, Ebook.User, QuizResult.User, KnowledgeUnitLink.SourceUnit/TargetUnit, NexusUser.SubscriptionPlan with Restrict)"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_636_navigation_636__linear",
          "kind": "statement",
          "label": "Entity navigations enabled",
          "line": 636,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7,
          "detail": "Declares entity navigation properties to enable relationships (e.g. NexusUser.Ebooks, NexusUser.QuizResults, KnowledgeUnit.IncomingLinks/OutgoingLinks)"
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 650,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:tz9mq3:buildtargetmodel__entry__method:tz9mq3:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:tz9mq3:buildtargetmodel__entry",
          "to": "method:tz9mq3:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_23_annotation_23__linear__method:tz9mq3:buildtargetmodel__action_27_external_call_27__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_27_external_call_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_27_external_call_27__linear__method:tz9mq3:buildtargetmodel__action_28_external_call_28__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_27_external_call_27__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_28_external_call_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_28_external_call_28__linear__method:tz9mq3:buildtargetmodel__action_30_entity_configuration_30__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_28_external_call_28__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_30_entity_configuration_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_30_entity_configuration_30__linear__method:tz9mq3:buildtargetmodel__action_162_entity_configuration_162__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_30_entity_configuration_30__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_162_entity_configuration_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_162_entity_configuration_162__linear__method:tz9mq3:buildtargetmodel__action_209_entity_configuration_209__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_162_entity_configuration_162__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_209_entity_configuration_209__linear",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_209_entity_configuration_209__linear__method:tz9mq3:buildtargetmodel__action_255_entity_configuration_255__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_209_entity_configuration_209__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_255_entity_configuration_255__linear",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_255_entity_configuration_255__linear__method:tz9mq3:buildtargetmodel__action_287_entity_configuration_287__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_255_entity_configuration_255__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_287_entity_configuration_287__linear",
          "kind": "next",
          "line": 287,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_287_entity_configuration_287__linear__method:tz9mq3:buildtargetmodel__action_422_entity_configuration_422__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_287_entity_configuration_287__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_422_entity_configuration_422__linear",
          "kind": "next",
          "line": 422,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_422_entity_configuration_422__linear__method:tz9mq3:buildtargetmodel__action_467_entity_configuration_467__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_422_entity_configuration_422__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_467_entity_configuration_467__linear",
          "kind": "next",
          "line": 467,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_467_entity_configuration_467__linear__method:tz9mq3:buildtargetmodel__action_498_persistence_seed_498__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_467_entity_configuration_467__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_498_persistence_seed_498__linear",
          "kind": "next",
          "line": 498,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_498_persistence_seed_498__linear__method:tz9mq3:buildtargetmodel__action_533_relationship_533__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_498_persistence_seed_498__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_533_relationship_533__linear",
          "kind": "next",
          "line": 533,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_533_relationship_533__linear__method:tz9mq3:buildtargetmodel__action_636_navigation_636__linear",
          "from": "method:tz9mq3:buildtargetmodel__action_533_relationship_533__linear",
          "to": "method:tz9mq3:buildtargetmodel__action_636_navigation_636__linear",
          "kind": "next",
          "line": 636,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tz9mq3:buildtargetmodel__action_636_navigation_636__linear__implicit_return",
          "from": "method:tz9mq3:buildtargetmodel__action_636_navigation_636__linear",
          "to": "method:tz9mq3:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 650,
          "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 650
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pxp1t3:up__fragment",
      "ownerFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "ownerSymbolId": "method:1pxp1t3:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1pxp1t3:up__entry",
      "exitNodeIds": [
        "method:1pxp1t3:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pxp1t3:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 11,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.99,
          "detail": "Apply the migration: add IsUnlimitedTokens column to SubscriptionPlans and update seeded data for multiple plan rows."
        },
        {
          "id": "method:1pxp1t3:up__action_13_schema_change_13__linear",
          "kind": "statement",
          "label": "AddColumn IsUnlimitedTokens on SubscriptionPlans",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<bool>(name: \"IsUnlimitedTokens\", table: \"SubscriptionPlans\", type: \"boolean\", nullable: false, defaultValue: false)"
        },
        {
          "id": "method:1pxp1t3:up__action_20_data_seed_20__linear",
          "kind": "statement",
          "label": "Update seed row Id=1",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=1: set AITokenLimit=5000, IsUnlimitedTokens=false, StripeProductId=\"prod_Free789\""
        },
        {
          "id": "method:1pxp1t3:up__action_27_data_seed_27__linear",
          "kind": "statement",
          "label": "Update seed row Id=2",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=2: set IsUnlimitedTokens=false"
        },
        {
          "id": "method:1pxp1t3:up__action_34_data_seed_34__linear",
          "kind": "statement",
          "label": "Update seed row Id=3",
          "line": 34,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=3: set IsUnlimitedTokens=false"
        },
        {
          "id": "method:1pxp1t3:up__action_41_data_seed_41__linear",
          "kind": "statement",
          "label": "Update seed row Id=4 (make unlimited)",
          "line": 41,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=4: set AITokenLimit=1000000000, IsUnlimitedTokens=true"
        },
        {
          "id": "method:1pxp1t3:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pxp1t3:up__entry__method:1pxp1t3:up__action_13_schema_change_13__linear",
          "from": "method:1pxp1t3:up__entry",
          "to": "method:1pxp1t3:up__action_13_schema_change_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pxp1t3:up__action_13_schema_change_13__linear__method:1pxp1t3:up__action_20_data_seed_20__linear",
          "from": "method:1pxp1t3:up__action_13_schema_change_13__linear",
          "to": "method:1pxp1t3:up__action_20_data_seed_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pxp1t3:up__action_20_data_seed_20__linear__method:1pxp1t3:up__action_27_data_seed_27__linear",
          "from": "method:1pxp1t3:up__action_20_data_seed_20__linear",
          "to": "method:1pxp1t3:up__action_27_data_seed_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pxp1t3:up__action_27_data_seed_27__linear__method:1pxp1t3:up__action_34_data_seed_34__linear",
          "from": "method:1pxp1t3:up__action_27_data_seed_27__linear",
          "to": "method:1pxp1t3:up__action_34_data_seed_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pxp1t3:up__action_34_data_seed_34__linear__method:1pxp1t3:up__action_41_data_seed_41__linear",
          "from": "method:1pxp1t3:up__action_34_data_seed_34__linear",
          "to": "method:1pxp1t3:up__action_41_data_seed_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pxp1t3:up__action_41_data_seed_41__linear__implicit_return",
          "from": "method:1pxp1t3:up__action_41_data_seed_41__linear",
          "to": "method:1pxp1t3:up__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 11,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:3zfaqn:down__fragment",
      "ownerFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "ownerSymbolId": "method:3zfaqn:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:3zfaqn:down__entry",
      "exitNodeIds": [
        "method:3zfaqn:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:3zfaqn:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 50,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.99,
          "detail": "Revert the migration: remove IsUnlimitedTokens column and restore previous seeded SubscriptionPlans values."
        },
        {
          "id": "method:3zfaqn:down__action_52_schema_change_52__linear",
          "kind": "statement",
          "label": "DropColumn IsUnlimitedTokens on SubscriptionPlans",
          "line": 52,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"IsUnlimitedTokens\", table: \"SubscriptionPlans\")"
        },
        {
          "id": "method:3zfaqn:down__action_56_data_seed_56__linear",
          "kind": "statement",
          "label": "Revert seed row Id=1",
          "line": 56,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=1: set AITokenLimit=1000, StripeProductId=\"\""
        },
        {
          "id": "method:3zfaqn:down__action_63_data_seed_63__linear",
          "kind": "statement",
          "label": "Revert seed row Id=4",
          "line": 63,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7,
          "detail": "UpdateData on SubscriptionPlans Id=4: set AITokenLimit=500000"
        },
        {
          "id": "method:3zfaqn:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 69,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:3zfaqn:down__entry__method:3zfaqn:down__action_52_schema_change_52__linear",
          "from": "method:3zfaqn:down__entry",
          "to": "method:3zfaqn:down__action_52_schema_change_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3zfaqn:down__action_52_schema_change_52__linear__method:3zfaqn:down__action_56_data_seed_56__linear",
          "from": "method:3zfaqn:down__action_52_schema_change_52__linear",
          "to": "method:3zfaqn:down__action_56_data_seed_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3zfaqn:down__action_56_data_seed_56__linear__method:3zfaqn:down__action_63_data_seed_63__linear",
          "from": "method:3zfaqn:down__action_56_data_seed_56__linear",
          "to": "method:3zfaqn:down__action_63_data_seed_63__linear",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3zfaqn:down__action_63_data_seed_63__linear__implicit_return",
          "from": "method:3zfaqn:down__action_63_data_seed_63__linear",
          "to": "method:3zfaqn:down__implicit_return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 50,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs",
          "line": 50,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:e4n4cn:buildtargetmodel__fragment",
      "ownerFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "ownerSymbolId": "method:e4n4cn:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:e4n4cn:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:e4n4cn:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:e4n4cn:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model for this migration: configures entities, properties, constraints, relationships, annotations and seed data."
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_22_warning_directive_22__linear",
          "kind": "statement",
          "label": "Suppress obsolete warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning disable 612, 618 (and restore at end)"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Set model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\",\"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_27_extension_enable_27__linear",
          "kind": "statement",
          "label": "Enable Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_28_identity_config_28__linear",
          "kind": "statement",
          "label": "Use identity-by-default columns for Postgres",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_162_define_entity_162__linear",
          "kind": "statement",
          "label": "Define entity 'Ebook'",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures properties, keys, indexes (TenantId, UserId), table name 'Ebooks', and required constraints"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_209_define_entity_209__linear",
          "kind": "statement",
          "label": "Define entity 'KnowledgeUnit'",
          "line": 209,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures properties (including Vector vector(768)), keys, indexes (SourceId, TenantId), table 'KnowledgeUnits'"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_255_define_entity_255__linear",
          "kind": "statement",
          "label": "Define entity 'KnowledgeUnitLink'",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures identity Id, relation fields, indexes, table 'KnowledgeUnitLinks'"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_287_define_entity_287__linear",
          "kind": "statement",
          "label": "Define entity 'NexusUser'",
          "line": 287,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures many identity/user properties, SubscriptionPlanId default and index, indexes (NormalizedEmail, NormalizedUserName, SubscriptionPlanId, TenantId), table 'AspNetUsers'"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_385_define_entity_385__linear",
          "kind": "statement",
          "label": "Define entity 'QuizResult'",
          "line": 385,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures quiz result properties, indexes (TenantId, UserId), table 'QuizResults'"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_422_define_entity_422__linear",
          "kind": "statement",
          "label": "Define entity 'SemanticKnowledgeCache'",
          "line": 422,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures properties including Vector vector(1536), primary key ContentHash, unique index and TenantId index, table 'SemanticKnowledgeCache'"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_467_define_entity_467__linear",
          "kind": "statement",
          "label": "Define entity 'SubscriptionPlan' with seed data",
          "line": 467,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures SubscriptionPlan properties (AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName, StripeProductId), unique index on PlanName and seed data rows for Free, Basic, Pro, Enterprise"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_501_seed_data_501__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlans",
          "line": 501,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "HasData adds four SubscriptionPlan rows (Ids 1..4) including Enterprise with IsUnlimitedTokens = true"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_540_relationship_540__linear",
          "kind": "statement",
          "label": "Identity / role and user relations (FKs with cascade)",
          "line": 540,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures foreign keys and cascade delete between IdentityRoleClaim, IdentityUserClaim, IdentityUserLogin, IdentityUserRole, IdentityUserToken and identity/user tables"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_591_relationship_591__linear",
          "kind": "statement",
          "label": "Ebook -> NexusUser (FK, cascade)",
          "line": 591,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasOne(...).WithMany(\"Ebooks\").HasForeignKey(\"UserId\").OnDelete(DeleteBehavior.Cascade).IsRequired()"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_602_relationship_602__linear",
          "kind": "statement",
          "label": "KnowledgeUnitLink -> KnowledgeUnit (FKs, cascade)",
          "line": 602,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "SourceUnit and TargetUnit FKs with cascade delete and navigations"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_621_relationship_621__linear",
          "kind": "statement",
          "label": "NexusUser -> SubscriptionPlan (FK, restrict)",
          "line": 621,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasOne(SubscriptionPlan).WithMany().HasForeignKey(\"SubscriptionPlanId\").OnDelete(DeleteBehavior.Restrict).IsRequired()"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_643_navigation_643__linear",
          "kind": "statement",
          "label": "Configure entity navigations",
          "line": 643,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7,
          "detail": "Sets navigation properties for KnowledgeUnit Incoming/OutgoingLinks and NexusUser Ebooks/QuizResults"
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 657,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:e4n4cn:buildtargetmodel__entry__method:e4n4cn:buildtargetmodel__action_22_warning_directive_22__linear",
          "from": "method:e4n4cn:buildtargetmodel__entry",
          "to": "method:e4n4cn:buildtargetmodel__action_22_warning_directive_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_22_warning_directive_22__linear__method:e4n4cn:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_22_warning_directive_22__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_23_annotation_23__linear__method:e4n4cn:buildtargetmodel__action_27_extension_enable_27__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_27_extension_enable_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_27_extension_enable_27__linear__method:e4n4cn:buildtargetmodel__action_28_identity_config_28__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_27_extension_enable_27__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_28_identity_config_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_28_identity_config_28__linear__method:e4n4cn:buildtargetmodel__action_162_define_entity_162__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_28_identity_config_28__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_162_define_entity_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_162_define_entity_162__linear__method:e4n4cn:buildtargetmodel__action_209_define_entity_209__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_162_define_entity_162__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_209_define_entity_209__linear",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_209_define_entity_209__linear__method:e4n4cn:buildtargetmodel__action_255_define_entity_255__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_209_define_entity_209__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_255_define_entity_255__linear",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_255_define_entity_255__linear__method:e4n4cn:buildtargetmodel__action_287_define_entity_287__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_255_define_entity_255__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_287_define_entity_287__linear",
          "kind": "next",
          "line": 287,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_287_define_entity_287__linear__method:e4n4cn:buildtargetmodel__action_385_define_entity_385__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_287_define_entity_287__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_385_define_entity_385__linear",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_385_define_entity_385__linear__method:e4n4cn:buildtargetmodel__action_422_define_entity_422__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_385_define_entity_385__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_422_define_entity_422__linear",
          "kind": "next",
          "line": 422,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_422_define_entity_422__linear__method:e4n4cn:buildtargetmodel__action_467_define_entity_467__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_422_define_entity_422__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_467_define_entity_467__linear",
          "kind": "next",
          "line": 467,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_467_define_entity_467__linear__method:e4n4cn:buildtargetmodel__action_501_seed_data_501__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_467_define_entity_467__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_501_seed_data_501__linear",
          "kind": "next",
          "line": 501,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_501_seed_data_501__linear__method:e4n4cn:buildtargetmodel__action_540_relationship_540__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_501_seed_data_501__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_540_relationship_540__linear",
          "kind": "next",
          "line": 540,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_540_relationship_540__linear__method:e4n4cn:buildtargetmodel__action_591_relationship_591__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_540_relationship_540__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_591_relationship_591__linear",
          "kind": "next",
          "line": 591,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_591_relationship_591__linear__method:e4n4cn:buildtargetmodel__action_602_relationship_602__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_591_relationship_591__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_602_relationship_602__linear",
          "kind": "next",
          "line": 602,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_602_relationship_602__linear__method:e4n4cn:buildtargetmodel__action_621_relationship_621__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_602_relationship_602__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_621_relationship_621__linear",
          "kind": "next",
          "line": 621,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_621_relationship_621__linear__method:e4n4cn:buildtargetmodel__action_643_navigation_643__linear",
          "from": "method:e4n4cn:buildtargetmodel__action_621_relationship_621__linear",
          "to": "method:e4n4cn:buildtargetmodel__action_643_navigation_643__linear",
          "kind": "next",
          "line": 643,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e4n4cn:buildtargetmodel__action_643_navigation_643__linear__implicit_return",
          "from": "method:e4n4cn:buildtargetmodel__action_643_navigation_643__linear",
          "to": "method:e4n4cn:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 657,
          "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 657
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:5tn4c6:up__fragment",
      "ownerFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "ownerSymbolId": "method:5tn4c6:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:5tn4c6:up__entry",
      "exitNodeIds": [
        "method:5tn4c6:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:5tn4c6:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 12,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.99,
          "detail": "Apply schema changes: remove Ebooks.Author string, add Ebooks.AuthorId int, create Authors table, create index and foreign key."
        },
        {
          "id": "method:5tn4c6:up__action_14_schema_change_14__linear",
          "kind": "statement",
          "label": "Drop column Ebooks.Author",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"Author\", table: \"Ebooks\")"
        },
        {
          "id": "method:5tn4c6:up__action_18_schema_change_18__linear",
          "kind": "statement",
          "label": "Add column Ebooks.AuthorId (int, non-nullable, default 0)",
          "line": 18,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<int>(name: \"AuthorId\", table: \"Ebooks\", type: \"integer\", nullable: false, defaultValue: 0)"
        },
        {
          "id": "method:5tn4c6:up__action_25_schema_change_25__linear",
          "kind": "statement",
          "label": "Create Authors table",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "Creates Authors(Id int identity, Name varchar(255) not null) and primary key"
        },
        {
          "id": "method:5tn4c6:up__action_38_schema_change_38__linear",
          "kind": "statement",
          "label": "Create index IX_Ebooks_AuthorId",
          "line": 38,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateIndex(name: \"IX_Ebooks_AuthorId\", table: \"Ebooks\", column: \"AuthorId\")"
        },
        {
          "id": "method:5tn4c6:up__action_43_schema_change_43__linear",
          "kind": "statement",
          "label": "Add foreign key FK_Ebooks_Authors_AuthorId (Restrict on delete)",
          "line": 43,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddForeignKey(name: \"FK_Ebooks_Authors_AuthorId\", table: \"Ebooks\", column: \"AuthorId\", principalTable: \"Authors\", principalColumn: \"Id\", onDelete: ReferentialAction.Restrict)"
        },
        {
          "id": "method:5tn4c6:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 50,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:5tn4c6:up__entry__method:5tn4c6:up__action_14_schema_change_14__linear",
          "from": "method:5tn4c6:up__entry",
          "to": "method:5tn4c6:up__action_14_schema_change_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5tn4c6:up__action_14_schema_change_14__linear__method:5tn4c6:up__action_18_schema_change_18__linear",
          "from": "method:5tn4c6:up__action_14_schema_change_14__linear",
          "to": "method:5tn4c6:up__action_18_schema_change_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5tn4c6:up__action_18_schema_change_18__linear__method:5tn4c6:up__action_25_schema_change_25__linear",
          "from": "method:5tn4c6:up__action_18_schema_change_18__linear",
          "to": "method:5tn4c6:up__action_25_schema_change_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5tn4c6:up__action_25_schema_change_25__linear__method:5tn4c6:up__action_38_schema_change_38__linear",
          "from": "method:5tn4c6:up__action_25_schema_change_25__linear",
          "to": "method:5tn4c6:up__action_38_schema_change_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5tn4c6:up__action_38_schema_change_38__linear__method:5tn4c6:up__action_43_schema_change_43__linear",
          "from": "method:5tn4c6:up__action_38_schema_change_38__linear",
          "to": "method:5tn4c6:up__action_43_schema_change_43__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5tn4c6:up__action_43_schema_change_43__linear__implicit_return",
          "from": "method:5tn4c6:up__action_43_schema_change_43__linear",
          "to": "method:5tn4c6:up__implicit_return",
          "kind": "return",
          "line": 50,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 12,
        "end": 50
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:wcoxzi:down__fragment",
      "ownerFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "ownerSymbolId": "method:wcoxzi:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:wcoxzi:down__entry",
      "exitNodeIds": [
        "method:wcoxzi:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:wcoxzi:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 53,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.99,
          "detail": "Revert the Up changes: drop FK, drop Authors table, drop index and AuthorId column, and re-add Ebooks.Author string column."
        },
        {
          "id": "method:wcoxzi:down__action_55_schema_change_55__linear",
          "kind": "statement",
          "label": "Drop foreign key FK_Ebooks_Authors_AuthorId",
          "line": 55,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropForeignKey(name: \"FK_Ebooks_Authors_AuthorId\", table: \"Ebooks\")"
        },
        {
          "id": "method:wcoxzi:down__action_59_schema_change_59__linear",
          "kind": "statement",
          "label": "Drop Authors table",
          "line": 59,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropTable(name: \"Authors\")"
        },
        {
          "id": "method:wcoxzi:down__action_62_schema_change_62__linear",
          "kind": "statement",
          "label": "Drop index IX_Ebooks_AuthorId",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropIndex(name: \"IX_Ebooks_AuthorId\", table: \"Ebooks\")"
        },
        {
          "id": "method:wcoxzi:down__action_66_schema_change_66__linear",
          "kind": "statement",
          "label": "Drop column Ebooks.AuthorId",
          "line": 66,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"AuthorId\", table: \"Ebooks\")"
        },
        {
          "id": "method:wcoxzi:down__action_70_schema_change_70__linear",
          "kind": "statement",
          "label": "Add column Ebooks.Author (varchar(255), non-nullable, default \"\")",
          "line": 70,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<string>(name: \"Author\", table: \"Ebooks\", type: \"character varying(255)\", maxLength: 255, nullable: false, defaultValue: \"\")"
        },
        {
          "id": "method:wcoxzi:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 77,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:wcoxzi:down__entry__method:wcoxzi:down__action_55_schema_change_55__linear",
          "from": "method:wcoxzi:down__entry",
          "to": "method:wcoxzi:down__action_55_schema_change_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcoxzi:down__action_55_schema_change_55__linear__method:wcoxzi:down__action_59_schema_change_59__linear",
          "from": "method:wcoxzi:down__action_55_schema_change_55__linear",
          "to": "method:wcoxzi:down__action_59_schema_change_59__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcoxzi:down__action_59_schema_change_59__linear__method:wcoxzi:down__action_62_schema_change_62__linear",
          "from": "method:wcoxzi:down__action_59_schema_change_59__linear",
          "to": "method:wcoxzi:down__action_62_schema_change_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcoxzi:down__action_62_schema_change_62__linear__method:wcoxzi:down__action_66_schema_change_66__linear",
          "from": "method:wcoxzi:down__action_62_schema_change_62__linear",
          "to": "method:wcoxzi:down__action_66_schema_change_66__linear",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcoxzi:down__action_66_schema_change_66__linear__method:wcoxzi:down__action_70_schema_change_70__linear",
          "from": "method:wcoxzi:down__action_66_schema_change_66__linear",
          "to": "method:wcoxzi:down__action_70_schema_change_70__linear",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcoxzi:down__action_70_schema_change_70__linear__implicit_return",
          "from": "method:wcoxzi:down__action_70_schema_change_70__linear",
          "to": "method:wcoxzi:down__implicit_return",
          "kind": "return",
          "line": 77,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 53,
        "end": 77
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs",
          "line": 53,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:b38ztv:buildtargetmodel__fragment",
      "ownerFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "ownerSymbolId": "method:b38ztv:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:b38ztv:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:b38ztv:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:b38ztv:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.99,
          "detail": "Builds the EF Core model snapshot for this migration: adds annotations, DB extensions, defines all entity mappings (tables, columns, keys, indices), relationships, navigations, and seed data."
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition",
          "kind": "condition",
          "label": "#pragma warning disable 612, 618",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "Pragma directives before/after the generated configuration"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__true",
          "kind": "branch-true",
          "label": "suppress-warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__false",
          "kind": "branch-false",
          "label": "restore-warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "kind": "statement",
          "label": "merge",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Adds product/version and identifier length annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_27_db_extension_27__linear",
          "kind": "statement",
          "label": "Registers Postgres vector extension and identity behavior",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\"); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "statement",
          "label": "Defines Identity and domain entities (properties, keys, indices)",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple modelBuilder.Entity(...) blocks configure tables like AspNetRoles, Authors, Ebooks, KnowledgeUnits, NexusUser, SubscriptionPlans, etc."
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_49_index_49__linear",
          "kind": "statement",
          "label": "Creates indices for performance/uniqueness (examples: RoleNameIndex, UserNameIndex, TenantId indexes)",
          "line": 49,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasIndex(\"NormalizedName\").IsUnique() and many b.HasIndex(...) calls across entities"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_256_property_configuration_256__linear",
          "kind": "statement",
          "label": "Configures vector typed columns for semantic search vectors",
          "line": 256,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Property<Vector>(\"Vector\").HasColumnType(\"vector(768)\") for KnowledgeUnit and vector(1536) for SemanticKnowledgeCache"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_519_seed_data_519__linear",
          "kind": "statement",
          "label": "Seeds SubscriptionPlan table with predefined plans",
          "line": 519,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasData(...) inserts Free, Basic, Pro, Enterprise rows for SubscriptionPlans"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_609_relationship_609__linear",
          "kind": "statement",
          "label": "Configures foreign keys and delete behaviors",
          "line": 609,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook -> Author (Restrict), Ebook -> NexusUser (Cascade), KnowledgeUnitLink -> KnowledgeUnit (Cascade), NexusUser -> SubscriptionPlan (Restrict), QuizResult -> NexusUser (Cascade)"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_623_navigation_623__linear",
          "kind": "statement",
          "label": "Declares entity navigations",
          "line": 623,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Navigation(...) calls for relations such as Author, User, IncomingLinks, OutgoingLinks, SubscriptionPlan, Ebooks, QuizResults"
        },
        {
          "id": "method:b38ztv:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 688,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:b38ztv:buildtargetmodel__entry__method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition",
          "from": "method:b38ztv:buildtargetmodel__entry",
          "to": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition__method:b38ztv:buildtargetmodel__action_22_guard_clause_22__true",
          "from": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition",
          "to": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__true",
          "kind": "condition-true",
          "label": "suppress-warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition__method:b38ztv:buildtargetmodel__action_22_guard_clause_22__false",
          "from": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__condition",
          "to": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__false",
          "kind": "condition-false",
          "label": "restore-warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__true__method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "from": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__true",
          "to": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__false__method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "from": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__false",
          "to": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge__method:b38ztv:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge",
          "to": "method:b38ztv:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_23_annotation_23__linear__method:b38ztv:buildtargetmodel__action_27_db_extension_27__linear",
          "from": "method:b38ztv:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:b38ztv:buildtargetmodel__action_27_db_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_27_db_extension_27__linear__method:b38ztv:buildtargetmodel__action_30_entity_definition_30__linear",
          "from": "method:b38ztv:buildtargetmodel__action_27_db_extension_27__linear",
          "to": "method:b38ztv:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_30_entity_definition_30__linear__method:b38ztv:buildtargetmodel__action_49_index_49__linear",
          "from": "method:b38ztv:buildtargetmodel__action_30_entity_definition_30__linear",
          "to": "method:b38ztv:buildtargetmodel__action_49_index_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_49_index_49__linear__method:b38ztv:buildtargetmodel__action_256_property_configuration_256__linear",
          "from": "method:b38ztv:buildtargetmodel__action_49_index_49__linear",
          "to": "method:b38ztv:buildtargetmodel__action_256_property_configuration_256__linear",
          "kind": "next",
          "line": 256,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_256_property_configuration_256__linear__method:b38ztv:buildtargetmodel__action_519_seed_data_519__linear",
          "from": "method:b38ztv:buildtargetmodel__action_256_property_configuration_256__linear",
          "to": "method:b38ztv:buildtargetmodel__action_519_seed_data_519__linear",
          "kind": "next",
          "line": 519,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_519_seed_data_519__linear__method:b38ztv:buildtargetmodel__action_609_relationship_609__linear",
          "from": "method:b38ztv:buildtargetmodel__action_519_seed_data_519__linear",
          "to": "method:b38ztv:buildtargetmodel__action_609_relationship_609__linear",
          "kind": "next",
          "line": 609,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_609_relationship_609__linear__method:b38ztv:buildtargetmodel__action_623_navigation_623__linear",
          "from": "method:b38ztv:buildtargetmodel__action_609_relationship_609__linear",
          "to": "method:b38ztv:buildtargetmodel__action_623_navigation_623__linear",
          "kind": "next",
          "line": 623,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b38ztv:buildtargetmodel__action_623_navigation_623__linear__implicit_return",
          "from": "method:b38ztv:buildtargetmodel__action_623_navigation_623__linear",
          "to": "method:b38ztv:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 688,
          "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:b38ztv:buildtargetmodel__action_22_guard_clause_22__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 688
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1cxxeft:up__fragment",
      "ownerFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "ownerSymbolId": "method:1cxxeft:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1cxxeft:up__entry",
      "exitNodeIds": [
        "method:1cxxeft:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1cxxeft:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 11,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.99,
          "detail": "Applies schema changes: adds LastChapter (string) and Progress (double) columns to the Ebooks table."
        },
        {
          "id": "method:1cxxeft:up__action_13_add_column_13__linear",
          "kind": "statement",
          "label": "Add LastChapter column",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7,
          "detail": "Adds column 'LastChapter' to table 'Ebooks' with SQL type 'character varying(255)', maxLength 255, nullable true."
        },
        {
          "id": "method:1cxxeft:up__action_20_add_column_20__linear",
          "kind": "statement",
          "label": "Add Progress column",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7,
          "detail": "Adds column 'Progress' to table 'Ebooks' with SQL type 'double precision', non-nullable, defaultValue 0.0."
        },
        {
          "id": "method:1cxxeft:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1cxxeft:up__entry__method:1cxxeft:up__action_13_add_column_13__linear",
          "from": "method:1cxxeft:up__entry",
          "to": "method:1cxxeft:up__action_13_add_column_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1cxxeft:up__action_13_add_column_13__linear__method:1cxxeft:up__action_20_add_column_20__linear",
          "from": "method:1cxxeft:up__action_13_add_column_13__linear",
          "to": "method:1cxxeft:up__action_20_add_column_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1cxxeft:up__action_20_add_column_20__linear__implicit_return",
          "from": "method:1cxxeft:up__action_20_add_column_20__linear",
          "to": "method:1cxxeft:up__implicit_return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 11,
        "end": 26
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:xctw2t:down__fragment",
      "ownerFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "ownerSymbolId": "method:xctw2t:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:xctw2t:down__entry",
      "exitNodeIds": [
        "method:xctw2t:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:xctw2t:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 29,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.99,
          "detail": "Reverts schema changes applied in Up by dropping LastChapter and Progress columns from the Ebooks table."
        },
        {
          "id": "method:xctw2t:down__action_31_drop_column_31__linear",
          "kind": "statement",
          "label": "Drop LastChapter column",
          "line": 31,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7,
          "detail": "Drops column 'LastChapter' from table 'Ebooks'."
        },
        {
          "id": "method:xctw2t:down__action_35_drop_column_35__linear",
          "kind": "statement",
          "label": "Drop Progress column",
          "line": 35,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7,
          "detail": "Drops column 'Progress' from table 'Ebooks'."
        },
        {
          "id": "method:xctw2t:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 38,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:xctw2t:down__entry__method:xctw2t:down__action_31_drop_column_31__linear",
          "from": "method:xctw2t:down__entry",
          "to": "method:xctw2t:down__action_31_drop_column_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7
        },
        {
          "id": "method:xctw2t:down__action_31_drop_column_31__linear__method:xctw2t:down__action_35_drop_column_35__linear",
          "from": "method:xctw2t:down__action_31_drop_column_31__linear",
          "to": "method:xctw2t:down__action_35_drop_column_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.7
        },
        {
          "id": "method:xctw2t:down__action_35_drop_column_35__linear__implicit_return",
          "from": "method:xctw2t:down__action_35_drop_column_35__linear",
          "to": "method:xctw2t:down__implicit_return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 29,
        "end": 38
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:145q8gt:buildtargetmodel__fragment",
      "ownerFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "ownerSymbolId": "method:145q8gt:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:145q8gt:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:145q8gt:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:145q8gt:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model: registers Postgres vector extension, identity and domain entities, their properties, relationships, indices and seed data for SubscriptionPlans."
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Set product and identifier annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\",\"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_27_external_extension_27__linear",
          "kind": "statement",
          "label": "Enable Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_28_external_config_28__linear",
          "kind": "statement",
          "label": "Configure identity column behavior",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_30_entity_declaration_30__linear",
          "kind": "statement",
          "label": "Configure Identity and AspNet tables",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "Adds Identity role, user, claims, logins, tokens, roles mapping tables with keys and indices"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_47_indexing_47__linear",
          "kind": "statement",
          "label": "Indexes and unique constraints",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple HasIndex calls across entities (e.g., RoleNameIndex, UserNameIndex, TenantId indices, unique ContentHash)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_162_entity_declaration_162__linear",
          "kind": "statement",
          "label": "Configure domain entities (Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, QuizResult, SemanticKnowledgeCache, SubscriptionPlan)",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "Registers domain entities and their properties, columns, keys and indices"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_526_data_seed_526__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlans",
          "line": 526,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasData(...) inserts Free, Basic, Pro, Enterprise plans with explicit Ids and defaults"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_616_relationship_616__linear",
          "kind": "statement",
          "label": "Ebook -> Author and Ebook -> NexusUser foreign keys",
          "line": 616,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "HasOne Author (restrict), HasOne User (cascade)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_635_relationship_635__linear",
          "kind": "statement",
          "label": "KnowledgeUnitLink -> KnowledgeUnit links (SourceUnit, TargetUnit)",
          "line": 635,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "Two HasOne relationships with cascade deletes"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_654_relationship_654__linear",
          "kind": "statement",
          "label": "NexusUser -> SubscriptionPlan FK",
          "line": 654,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "HasOne SubscriptionPlan (restrict)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_676_navigation_setup_676__linear",
          "kind": "statement",
          "label": "Configure navigation properties",
          "line": 676,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7,
          "detail": "Adds Navigation for collections and related entities (Ebooks, IncomingLinks, OutgoingLinks, QuizResults)"
        },
        {
          "id": "method:145q8gt:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 695,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:145q8gt:buildtargetmodel__entry__method:145q8gt:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:145q8gt:buildtargetmodel__entry",
          "to": "method:145q8gt:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_23_annotation_23__linear__method:145q8gt:buildtargetmodel__action_27_external_extension_27__linear",
          "from": "method:145q8gt:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:145q8gt:buildtargetmodel__action_27_external_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_27_external_extension_27__linear__method:145q8gt:buildtargetmodel__action_28_external_config_28__linear",
          "from": "method:145q8gt:buildtargetmodel__action_27_external_extension_27__linear",
          "to": "method:145q8gt:buildtargetmodel__action_28_external_config_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_28_external_config_28__linear__method:145q8gt:buildtargetmodel__action_30_entity_declaration_30__linear",
          "from": "method:145q8gt:buildtargetmodel__action_28_external_config_28__linear",
          "to": "method:145q8gt:buildtargetmodel__action_30_entity_declaration_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_30_entity_declaration_30__linear__method:145q8gt:buildtargetmodel__action_47_indexing_47__linear",
          "from": "method:145q8gt:buildtargetmodel__action_30_entity_declaration_30__linear",
          "to": "method:145q8gt:buildtargetmodel__action_47_indexing_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_47_indexing_47__linear__method:145q8gt:buildtargetmodel__action_162_entity_declaration_162__linear",
          "from": "method:145q8gt:buildtargetmodel__action_47_indexing_47__linear",
          "to": "method:145q8gt:buildtargetmodel__action_162_entity_declaration_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_162_entity_declaration_162__linear__method:145q8gt:buildtargetmodel__action_526_data_seed_526__linear",
          "from": "method:145q8gt:buildtargetmodel__action_162_entity_declaration_162__linear",
          "to": "method:145q8gt:buildtargetmodel__action_526_data_seed_526__linear",
          "kind": "next",
          "line": 526,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_526_data_seed_526__linear__method:145q8gt:buildtargetmodel__action_616_relationship_616__linear",
          "from": "method:145q8gt:buildtargetmodel__action_526_data_seed_526__linear",
          "to": "method:145q8gt:buildtargetmodel__action_616_relationship_616__linear",
          "kind": "next",
          "line": 616,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_616_relationship_616__linear__method:145q8gt:buildtargetmodel__action_635_relationship_635__linear",
          "from": "method:145q8gt:buildtargetmodel__action_616_relationship_616__linear",
          "to": "method:145q8gt:buildtargetmodel__action_635_relationship_635__linear",
          "kind": "next",
          "line": 635,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_635_relationship_635__linear__method:145q8gt:buildtargetmodel__action_654_relationship_654__linear",
          "from": "method:145q8gt:buildtargetmodel__action_635_relationship_635__linear",
          "to": "method:145q8gt:buildtargetmodel__action_654_relationship_654__linear",
          "kind": "next",
          "line": 654,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_654_relationship_654__linear__method:145q8gt:buildtargetmodel__action_676_navigation_setup_676__linear",
          "from": "method:145q8gt:buildtargetmodel__action_654_relationship_654__linear",
          "to": "method:145q8gt:buildtargetmodel__action_676_navigation_setup_676__linear",
          "kind": "next",
          "line": 676,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:145q8gt:buildtargetmodel__action_676_navigation_setup_676__linear__implicit_return",
          "from": "method:145q8gt:buildtargetmodel__action_676_navigation_setup_676__linear",
          "to": "method:145q8gt:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 695,
          "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 695
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lw55w9:up__fragment",
      "ownerFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "ownerSymbolId": "method:1lw55w9:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:1lw55w9:up__entry",
      "exitNodeIds": [
        "method:1lw55w9:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lw55w9:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 11,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.99,
          "detail": "Applies the migration: adds LastChapterIndex (integer, non-nullable, default 0) to the Ebooks table."
        },
        {
          "id": "method:1lw55w9:up__action_13_schema_change_13__linear",
          "kind": "statement",
          "label": "Creates non-nullable integer column with default",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7,
          "detail": "new column ensures existing rows receive defaultValue 0"
        },
        {
          "id": "method:1lw55w9:up__action_13_persistence_migration_13__linear",
          "kind": "statement",
          "label": "Add column LastChapterIndex to Ebooks",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<int>(name: \"LastChapterIndex\", table: \"Ebooks\", type: \"integer\", nullable: false, defaultValue: 0)"
        },
        {
          "id": "method:1lw55w9:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lw55w9:up__entry__method:1lw55w9:up__action_13_schema_change_13__linear",
          "from": "method:1lw55w9:up__entry",
          "to": "method:1lw55w9:up__action_13_schema_change_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lw55w9:up__action_13_schema_change_13__linear__method:1lw55w9:up__action_13_persistence_migration_13__linear",
          "from": "method:1lw55w9:up__action_13_schema_change_13__linear",
          "to": "method:1lw55w9:up__action_13_persistence_migration_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lw55w9:up__action_13_persistence_migration_13__linear__implicit_return",
          "from": "method:1lw55w9:up__action_13_persistence_migration_13__linear",
          "to": "method:1lw55w9:up__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 11,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10r2ds4:down__fragment",
      "ownerFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "ownerSymbolId": "method:10r2ds4:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:10r2ds4:down__entry",
      "exitNodeIds": [
        "method:10r2ds4:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10r2ds4:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.99,
          "detail": "Reverts the migration: drops the LastChapterIndex column from the Ebooks table."
        },
        {
          "id": "method:10r2ds4:down__action_24_persistence_migration_24__linear",
          "kind": "statement",
          "label": "Drop column LastChapterIndex from Ebooks",
          "line": 24,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"LastChapterIndex\", table: \"Ebooks\")"
        },
        {
          "id": "method:10r2ds4:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10r2ds4:down__entry__method:10r2ds4:down__action_24_persistence_migration_24__linear",
          "from": "method:10r2ds4:down__entry",
          "to": "method:10r2ds4:down__action_24_persistence_migration_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10r2ds4:down__action_24_persistence_migration_24__linear__implicit_return",
          "from": "method:10r2ds4:down__action_24_persistence_migration_24__linear",
          "to": "method:10r2ds4:down__implicit_return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 22,
        "end": 27
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1febov1:buildtargetmodel__fragment",
      "ownerFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "ownerSymbolId": "method:1febov1:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:1febov1:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:1febov1:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1febov1:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.99,
          "detail": "Builds the EF Core model snapshot: configures entity types, properties, indexes, relationships, annotations and seed data for the target database model."
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_22_warning_suppression_22__linear",
          "kind": "statement",
          "label": "Disables obsolete warnings for generated model code",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning disable 612, 618"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Sets model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_27_extension_27__linear",
          "kind": "statement",
          "label": "Enables Postgres 'vector' extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_28_extension_28__linear",
          "kind": "statement",
          "label": "Configures identity column defaults for Postgres",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_30_define_entity_30__linear",
          "kind": "statement",
          "label": "Defines AspNet Identity role and related tables",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Microsoft.AspNetCore.Identity.IdentityRole, IdentityRoleClaim, IdentityUserClaim, IdentityUserLogin, IdentityUserRole, IdentityUserToken with keys, indexes and table names (lines 30-160)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_49_index_49__linear",
          "kind": "statement",
          "label": "Defines indexes on various entities",
          "line": 49,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple .HasIndex(...) calls throughout the model (examples: RoleNameIndex line 49, Ebook AuthorId/TenantId/UserId lines 228-232, KnowledgeUnit TenantId/SourceId lines 276-279)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_62_configure_column_62__linear",
          "kind": "statement",
          "label": "Configures identity columns for integer Id properties",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn used for integer Id properties (example lines 62, 87, 168, 289, 501)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_162_define_entity_162__linear",
          "kind": "statement",
          "label": "Defines Author entity",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Author entity with Id (identity) and required Name (character varying(255)) and Authors table (lines 162-178)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_180_define_entity_180__linear",
          "kind": "statement",
          "label": "Defines Ebook entity (includes LastChapterIndex)",
          "line": 180,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook entity with Id (Guid), fields AddedDate, AuthorId, FilePath, LastChapter, LastChapterIndex, Progress, TenantId, Title, UserId; indexes on AuthorId, TenantId, UserId and maps to Ebooks table (lines 180-235)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_237_define_entity_237__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnit entity",
          "line": 237,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit with Id, Content, CreatedAt, MetadataJson, SourceId, TenantId, Type, Vector (vector(768)), Version and KnowledgeUnits table (lines 237-281)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_283_define_entity_283__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnitLink entity",
          "line": 283,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnitLink with Id, RelationType, SourceUnitId, TargetUnitId, indexes for source/target and KnowledgeUnitLinks table (lines 283-313)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_315_define_entity_315__linear",
          "kind": "statement",
          "label": "Defines NexusUser (AspNetUsers) with tenant and subscription fields",
          "line": 315,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "NexusUser has identity fields, TenantId, SubscriptionPlanId (default 1), LastRead fields, AI token counters and maps to AspNetUsers (lines 315-411)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_413_define_entity_413__linear",
          "kind": "statement",
          "label": "Defines QuizResult entity",
          "line": 413,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "QuizResult with Id, CompletedDate, Score, TenantId, Topic, TotalQuestions, UserId and QuizResults table (lines 413-448)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_450_define_entity_450__linear",
          "kind": "statement",
          "label": "Defines SemanticKnowledgeCache entity",
          "line": 450,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "SemanticKnowledgeCache keyed by ContentHash, stores JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector(1536) and table name (lines 450-493)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_495_define_entity_495__linear",
          "kind": "statement",
          "label": "Defines SubscriptionPlan entity and seed data",
          "line": 495,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "SubscriptionPlan with Id, AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName, StripeProductId; creates unique index on PlanName and seeds four plans (Free, Basic, Pro, Enterprise) via b.HasData(...) (lines 495-566)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_619_relationship_619__linear",
          "kind": "statement",
          "label": "Configures foreign key relationships",
          "line": 619,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook -> Author (AuthorId, Restrict), Ebook -> NexusUser (UserId, Cascade), KnowledgeUnitLink -> KnowledgeUnit (SourceUnitId/TargetUnitId Cascade), NexusUser -> SubscriptionPlan (SubscriptionPlanId, Restrict), QuizResult -> NexusUser (UserId, Cascade) (lines 619-676)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_633_navigation_633__linear",
          "kind": "statement",
          "label": "Registers navigations for entities",
          "line": 633,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "Adds navigation properties for Author, User on Ebook; IncomingLinks/OutgoingLinks on KnowledgeUnit; Ebooks and QuizResults on NexusUser (lines 633-696)"
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_697_warning_suppression_697__linear",
          "kind": "statement",
          "label": "Restores warnings",
          "line": 697,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning restore 612, 618"
        },
        {
          "id": "method:1febov1:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 698,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1febov1:buildtargetmodel__entry__method:1febov1:buildtargetmodel__action_22_warning_suppression_22__linear",
          "from": "method:1febov1:buildtargetmodel__entry",
          "to": "method:1febov1:buildtargetmodel__action_22_warning_suppression_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_22_warning_suppression_22__linear__method:1febov1:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:1febov1:buildtargetmodel__action_22_warning_suppression_22__linear",
          "to": "method:1febov1:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_23_annotation_23__linear__method:1febov1:buildtargetmodel__action_27_extension_27__linear",
          "from": "method:1febov1:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:1febov1:buildtargetmodel__action_27_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_27_extension_27__linear__method:1febov1:buildtargetmodel__action_28_extension_28__linear",
          "from": "method:1febov1:buildtargetmodel__action_27_extension_27__linear",
          "to": "method:1febov1:buildtargetmodel__action_28_extension_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_28_extension_28__linear__method:1febov1:buildtargetmodel__action_30_define_entity_30__linear",
          "from": "method:1febov1:buildtargetmodel__action_28_extension_28__linear",
          "to": "method:1febov1:buildtargetmodel__action_30_define_entity_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_30_define_entity_30__linear__method:1febov1:buildtargetmodel__action_49_index_49__linear",
          "from": "method:1febov1:buildtargetmodel__action_30_define_entity_30__linear",
          "to": "method:1febov1:buildtargetmodel__action_49_index_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_49_index_49__linear__method:1febov1:buildtargetmodel__action_62_configure_column_62__linear",
          "from": "method:1febov1:buildtargetmodel__action_49_index_49__linear",
          "to": "method:1febov1:buildtargetmodel__action_62_configure_column_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_62_configure_column_62__linear__method:1febov1:buildtargetmodel__action_162_define_entity_162__linear",
          "from": "method:1febov1:buildtargetmodel__action_62_configure_column_62__linear",
          "to": "method:1febov1:buildtargetmodel__action_162_define_entity_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_162_define_entity_162__linear__method:1febov1:buildtargetmodel__action_180_define_entity_180__linear",
          "from": "method:1febov1:buildtargetmodel__action_162_define_entity_162__linear",
          "to": "method:1febov1:buildtargetmodel__action_180_define_entity_180__linear",
          "kind": "next",
          "line": 180,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_180_define_entity_180__linear__method:1febov1:buildtargetmodel__action_237_define_entity_237__linear",
          "from": "method:1febov1:buildtargetmodel__action_180_define_entity_180__linear",
          "to": "method:1febov1:buildtargetmodel__action_237_define_entity_237__linear",
          "kind": "next",
          "line": 237,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_237_define_entity_237__linear__method:1febov1:buildtargetmodel__action_283_define_entity_283__linear",
          "from": "method:1febov1:buildtargetmodel__action_237_define_entity_237__linear",
          "to": "method:1febov1:buildtargetmodel__action_283_define_entity_283__linear",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_283_define_entity_283__linear__method:1febov1:buildtargetmodel__action_315_define_entity_315__linear",
          "from": "method:1febov1:buildtargetmodel__action_283_define_entity_283__linear",
          "to": "method:1febov1:buildtargetmodel__action_315_define_entity_315__linear",
          "kind": "next",
          "line": 315,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_315_define_entity_315__linear__method:1febov1:buildtargetmodel__action_413_define_entity_413__linear",
          "from": "method:1febov1:buildtargetmodel__action_315_define_entity_315__linear",
          "to": "method:1febov1:buildtargetmodel__action_413_define_entity_413__linear",
          "kind": "next",
          "line": 413,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_413_define_entity_413__linear__method:1febov1:buildtargetmodel__action_450_define_entity_450__linear",
          "from": "method:1febov1:buildtargetmodel__action_413_define_entity_413__linear",
          "to": "method:1febov1:buildtargetmodel__action_450_define_entity_450__linear",
          "kind": "next",
          "line": 450,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_450_define_entity_450__linear__method:1febov1:buildtargetmodel__action_495_define_entity_495__linear",
          "from": "method:1febov1:buildtargetmodel__action_450_define_entity_450__linear",
          "to": "method:1febov1:buildtargetmodel__action_495_define_entity_495__linear",
          "kind": "next",
          "line": 495,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_495_define_entity_495__linear__method:1febov1:buildtargetmodel__action_619_relationship_619__linear",
          "from": "method:1febov1:buildtargetmodel__action_495_define_entity_495__linear",
          "to": "method:1febov1:buildtargetmodel__action_619_relationship_619__linear",
          "kind": "next",
          "line": 619,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_619_relationship_619__linear__method:1febov1:buildtargetmodel__action_633_navigation_633__linear",
          "from": "method:1febov1:buildtargetmodel__action_619_relationship_619__linear",
          "to": "method:1febov1:buildtargetmodel__action_633_navigation_633__linear",
          "kind": "next",
          "line": 633,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_633_navigation_633__linear__method:1febov1:buildtargetmodel__action_697_warning_suppression_697__linear",
          "from": "method:1febov1:buildtargetmodel__action_633_navigation_633__linear",
          "to": "method:1febov1:buildtargetmodel__action_697_warning_suppression_697__linear",
          "kind": "next",
          "line": 697,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1febov1:buildtargetmodel__action_697_warning_suppression_697__linear__implicit_return",
          "from": "method:1febov1:buildtargetmodel__action_697_warning_suppression_697__linear",
          "to": "method:1febov1:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 698,
          "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 698
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1nrn8uy:buildmodel__fragment",
      "ownerFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "ownerSymbolId": "method:1nrn8uy:buildmodel",
      "ownerSymbolName": "BuildModel",
      "entryNodeId": "method:1nrn8uy:buildmodel__entry",
      "exitNodeIds": [
        "method:1nrn8uy:buildmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1nrn8uy:buildmodel__entry",
          "kind": "entry",
          "label": "BuildModel entry",
          "line": 17,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.99,
          "detail": "Populates the provided ModelBuilder with the full EF Core model: annotations, extensions, entity/property definitions, indexes, relationships, navigations, and seed data used by migrations."
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_20_annotation_20__linear",
          "kind": "statement",
          "label": "Set product version and max identifier length",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_24_extension_24__linear",
          "kind": "statement",
          "label": "Enable Postgres vector extension",
          "line": 24,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_25_configuration_25__linear",
          "kind": "statement",
          "label": "Use identity-by-default columns globally for Npgsql",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_27_entity_config_27__linear",
          "kind": "statement",
          "label": "Configure IdentityRole (AspNetRoles)",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Defines properties Id, ConcurrencyStamp, Name, NormalizedName; key and unique index NormalizedName; map to AspNetRoles"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_53_entity_config_53__linear",
          "kind": "statement",
          "label": "Configure IdentityRoleClaim (AspNetRoleClaims)",
          "line": 53,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Defines auto-generated integer Id, ClaimType, ClaimValue, RoleId FK, index on RoleId"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_78_entity_config_78__linear",
          "kind": "statement",
          "label": "Configure IdentityUserClaim (AspNetUserClaims)",
          "line": 78,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Defines auto-generated integer Id, ClaimType, ClaimValue, UserId FK, index on UserId"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_103_entity_config_103__linear",
          "kind": "statement",
          "label": "Configure IdentityUserLogin (AspNetUserLogins)",
          "line": 103,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Composite key (LoginProvider, ProviderKey), ProviderDisplayName, UserId FK, index on UserId"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_125_entity_config_125__linear",
          "kind": "statement",
          "label": "Configure IdentityUserRole (AspNetUserRoles)",
          "line": 125,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Composite key (UserId, RoleId), indexes and mapping to AspNetUserRoles"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_140_entity_config_140__linear",
          "kind": "statement",
          "label": "Configure IdentityUserToken (AspNetUserTokens)",
          "line": 140,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Composite key (UserId, LoginProvider, Name), Value property"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_159_entity_config_159__linear",
          "kind": "statement",
          "label": "Configure Author entity",
          "line": 159,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (int, identity), Name (required, max 255), maps to Authors"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_177_entity_config_177__linear",
          "kind": "statement",
          "label": "Configure Ebook entity",
          "line": 177,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (Guid), AddedDate, AuthorId FK, FilePath required, Title required, TenantId required, indexes on AuthorId/TenantId/UserId, maps to Ebooks"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_240_entity_config_240__linear",
          "kind": "statement",
          "label": "Configure KnowledgeUnit entity",
          "line": 240,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (string max128), Content required, CreatedAt, EbookId (nullable FK), Vector (vector(768)), Version required, indexes on EbookId/TenantId, maps to KnowledgeUnits"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_284_entity_config_284__linear",
          "kind": "statement",
          "label": "Configure KnowledgeUnitLink entity",
          "line": 284,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (int identity), RelationType, SourceUnitId, TargetUnitId (strings max128), indexes on SourceUnitId/TargetUnitId, maps to KnowledgeUnitLinks"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_316_entity_config_316__linear",
          "kind": "statement",
          "label": "Configure NexusUser (AspNetUsers) entity",
          "line": 316,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Many identity and profile fields, SubscriptionPlanId with default 1, TenantId required, indexes on NormalizedEmail/NormalizedUserName/SubscriptionPlanId/TenantId, maps to AspNetUsers"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_414_entity_config_414__linear",
          "kind": "statement",
          "label": "Configure QuizResult entity",
          "line": 414,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (Guid), CompletedDate, Score, Topic required, TenantId/UserId required, indexes on TenantId/UserId, maps to QuizResults"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_451_entity_config_451__linear",
          "kind": "statement",
          "label": "Configure SemanticKnowledgeCache entity",
          "line": 451,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "ContentHash primary key (max128), CreatedAt, JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector (vector(1536)), unique index on ContentHash, maps to SemanticKnowledgeCache"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_496_entity_config_496__linear",
          "kind": "statement",
          "label": "Configure SubscriptionPlan entity and seed data",
          "line": 496,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Id (int identity), AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName(unique), StripeProductId; seed data inserts 4 plans (Free, Basic, Pro, Enterprise) lines 530-566"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_530_seed_530__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlan rows",
          "line": 530,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "HasData inserts 4 hard-coded SubscriptionPlan entries (Id 1..4) with AITokenLimit, MonthlyPrice, PlanName, StripeProductId"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_569_relationship_569__linear",
          "kind": "statement",
          "label": "Identity RoleClaim -> IdentityRole FK",
          "line": 569,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "RoleClaim.HasOne(Role).WithMany().HasForeignKey(RoleId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_578_relationship_578__linear",
          "kind": "statement",
          "label": "UserClaim -> NexusUser FK",
          "line": 578,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "UserClaim.HasOne(NexusUser).WithMany().HasForeignKey(UserId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_587_relationship_587__linear",
          "kind": "statement",
          "label": "UserLogin -> NexusUser FK",
          "line": 587,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "UserLogin.HasOne(NexusUser).WithMany().HasForeignKey(UserId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_596_relationship_596__linear",
          "kind": "statement",
          "label": "UserRole -> Role and NexusUser FKs",
          "line": 596,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "UserRole.HasOne(Role).HasForeignKey(RoleId) and HasOne(NexusUser).HasForeignKey(UserId), both Cascade"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_611_relationship_611__linear",
          "kind": "statement",
          "label": "UserToken -> NexusUser FK",
          "line": 611,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "UserToken.HasOne(NexusUser).WithMany().HasForeignKey(UserId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_620_relationship_620__linear",
          "kind": "statement",
          "label": "Ebook -> Author and NexusUser FKs",
          "line": 620,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Ebook.HasOne(Author).WithMany(Ebooks).HasForeignKey(AuthorId).OnDelete(Restrict); Ebook.HasOne(User).WithMany(Ebooks).HasForeignKey(UserId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_634_navigation_634__linear",
          "kind": "statement",
          "label": "Entity navigations registered",
          "line": 634,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "Multiple b.Navigation(...) calls register navigation properties for entities (Author.Ebooks, Ebook.Author/User, KnowledgeUnit.IncomingLinks/OutgoingLinks, NexusUser.Ebooks/QuizResults etc.)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_639_relationship_639__linear",
          "kind": "statement",
          "label": "KnowledgeUnit -> Ebook FK",
          "line": 639,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit.HasOne(Ebook).WithMany().HasForeignKey(EbookId).OnDelete(Cascade) (EbookId nullable)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_649_relationship_649__linear",
          "kind": "statement",
          "label": "KnowledgeUnitLink -> Source/Target KnowledgeUnit FKs",
          "line": 649,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "SourceUnit and TargetUnit relationships, both Cascade and required"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_668_relationship_668__linear",
          "kind": "statement",
          "label": "NexusUser -> SubscriptionPlan FK",
          "line": 668,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "NexusUser.HasOne(SubscriptionPlan).WithMany().HasForeignKey(SubscriptionPlanId).OnDelete(Restrict)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_679_relationship_679__linear",
          "kind": "statement",
          "label": "QuizResult -> NexusUser FK",
          "line": 679,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7,
          "detail": "QuizResult.HasOne(User).WithMany(QuizResults).HasForeignKey(UserId).OnDelete(Cascade)"
        },
        {
          "id": "method:1nrn8uy:buildmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 709,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1nrn8uy:buildmodel__entry__method:1nrn8uy:buildmodel__action_20_annotation_20__linear",
          "from": "method:1nrn8uy:buildmodel__entry",
          "to": "method:1nrn8uy:buildmodel__action_20_annotation_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_20_annotation_20__linear__method:1nrn8uy:buildmodel__action_24_extension_24__linear",
          "from": "method:1nrn8uy:buildmodel__action_20_annotation_20__linear",
          "to": "method:1nrn8uy:buildmodel__action_24_extension_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_24_extension_24__linear__method:1nrn8uy:buildmodel__action_25_configuration_25__linear",
          "from": "method:1nrn8uy:buildmodel__action_24_extension_24__linear",
          "to": "method:1nrn8uy:buildmodel__action_25_configuration_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_25_configuration_25__linear__method:1nrn8uy:buildmodel__action_27_entity_config_27__linear",
          "from": "method:1nrn8uy:buildmodel__action_25_configuration_25__linear",
          "to": "method:1nrn8uy:buildmodel__action_27_entity_config_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_27_entity_config_27__linear__method:1nrn8uy:buildmodel__action_53_entity_config_53__linear",
          "from": "method:1nrn8uy:buildmodel__action_27_entity_config_27__linear",
          "to": "method:1nrn8uy:buildmodel__action_53_entity_config_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_53_entity_config_53__linear__method:1nrn8uy:buildmodel__action_78_entity_config_78__linear",
          "from": "method:1nrn8uy:buildmodel__action_53_entity_config_53__linear",
          "to": "method:1nrn8uy:buildmodel__action_78_entity_config_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_78_entity_config_78__linear__method:1nrn8uy:buildmodel__action_103_entity_config_103__linear",
          "from": "method:1nrn8uy:buildmodel__action_78_entity_config_78__linear",
          "to": "method:1nrn8uy:buildmodel__action_103_entity_config_103__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_103_entity_config_103__linear__method:1nrn8uy:buildmodel__action_125_entity_config_125__linear",
          "from": "method:1nrn8uy:buildmodel__action_103_entity_config_103__linear",
          "to": "method:1nrn8uy:buildmodel__action_125_entity_config_125__linear",
          "kind": "next",
          "line": 125,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_125_entity_config_125__linear__method:1nrn8uy:buildmodel__action_140_entity_config_140__linear",
          "from": "method:1nrn8uy:buildmodel__action_125_entity_config_125__linear",
          "to": "method:1nrn8uy:buildmodel__action_140_entity_config_140__linear",
          "kind": "next",
          "line": 140,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_140_entity_config_140__linear__method:1nrn8uy:buildmodel__action_159_entity_config_159__linear",
          "from": "method:1nrn8uy:buildmodel__action_140_entity_config_140__linear",
          "to": "method:1nrn8uy:buildmodel__action_159_entity_config_159__linear",
          "kind": "next",
          "line": 159,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_159_entity_config_159__linear__method:1nrn8uy:buildmodel__action_177_entity_config_177__linear",
          "from": "method:1nrn8uy:buildmodel__action_159_entity_config_159__linear",
          "to": "method:1nrn8uy:buildmodel__action_177_entity_config_177__linear",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_177_entity_config_177__linear__method:1nrn8uy:buildmodel__action_240_entity_config_240__linear",
          "from": "method:1nrn8uy:buildmodel__action_177_entity_config_177__linear",
          "to": "method:1nrn8uy:buildmodel__action_240_entity_config_240__linear",
          "kind": "next",
          "line": 240,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_240_entity_config_240__linear__method:1nrn8uy:buildmodel__action_284_entity_config_284__linear",
          "from": "method:1nrn8uy:buildmodel__action_240_entity_config_240__linear",
          "to": "method:1nrn8uy:buildmodel__action_284_entity_config_284__linear",
          "kind": "next",
          "line": 284,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_284_entity_config_284__linear__method:1nrn8uy:buildmodel__action_316_entity_config_316__linear",
          "from": "method:1nrn8uy:buildmodel__action_284_entity_config_284__linear",
          "to": "method:1nrn8uy:buildmodel__action_316_entity_config_316__linear",
          "kind": "next",
          "line": 316,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_316_entity_config_316__linear__method:1nrn8uy:buildmodel__action_414_entity_config_414__linear",
          "from": "method:1nrn8uy:buildmodel__action_316_entity_config_316__linear",
          "to": "method:1nrn8uy:buildmodel__action_414_entity_config_414__linear",
          "kind": "next",
          "line": 414,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_414_entity_config_414__linear__method:1nrn8uy:buildmodel__action_451_entity_config_451__linear",
          "from": "method:1nrn8uy:buildmodel__action_414_entity_config_414__linear",
          "to": "method:1nrn8uy:buildmodel__action_451_entity_config_451__linear",
          "kind": "next",
          "line": 451,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_451_entity_config_451__linear__method:1nrn8uy:buildmodel__action_496_entity_config_496__linear",
          "from": "method:1nrn8uy:buildmodel__action_451_entity_config_451__linear",
          "to": "method:1nrn8uy:buildmodel__action_496_entity_config_496__linear",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_496_entity_config_496__linear__method:1nrn8uy:buildmodel__action_530_seed_530__linear",
          "from": "method:1nrn8uy:buildmodel__action_496_entity_config_496__linear",
          "to": "method:1nrn8uy:buildmodel__action_530_seed_530__linear",
          "kind": "next",
          "line": 530,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_530_seed_530__linear__method:1nrn8uy:buildmodel__action_569_relationship_569__linear",
          "from": "method:1nrn8uy:buildmodel__action_530_seed_530__linear",
          "to": "method:1nrn8uy:buildmodel__action_569_relationship_569__linear",
          "kind": "next",
          "line": 569,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_569_relationship_569__linear__method:1nrn8uy:buildmodel__action_578_relationship_578__linear",
          "from": "method:1nrn8uy:buildmodel__action_569_relationship_569__linear",
          "to": "method:1nrn8uy:buildmodel__action_578_relationship_578__linear",
          "kind": "next",
          "line": 578,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_578_relationship_578__linear__method:1nrn8uy:buildmodel__action_587_relationship_587__linear",
          "from": "method:1nrn8uy:buildmodel__action_578_relationship_578__linear",
          "to": "method:1nrn8uy:buildmodel__action_587_relationship_587__linear",
          "kind": "next",
          "line": 587,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_587_relationship_587__linear__method:1nrn8uy:buildmodel__action_596_relationship_596__linear",
          "from": "method:1nrn8uy:buildmodel__action_587_relationship_587__linear",
          "to": "method:1nrn8uy:buildmodel__action_596_relationship_596__linear",
          "kind": "next",
          "line": 596,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_596_relationship_596__linear__method:1nrn8uy:buildmodel__action_611_relationship_611__linear",
          "from": "method:1nrn8uy:buildmodel__action_596_relationship_596__linear",
          "to": "method:1nrn8uy:buildmodel__action_611_relationship_611__linear",
          "kind": "next",
          "line": 611,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_611_relationship_611__linear__method:1nrn8uy:buildmodel__action_620_relationship_620__linear",
          "from": "method:1nrn8uy:buildmodel__action_611_relationship_611__linear",
          "to": "method:1nrn8uy:buildmodel__action_620_relationship_620__linear",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_620_relationship_620__linear__method:1nrn8uy:buildmodel__action_634_navigation_634__linear",
          "from": "method:1nrn8uy:buildmodel__action_620_relationship_620__linear",
          "to": "method:1nrn8uy:buildmodel__action_634_navigation_634__linear",
          "kind": "next",
          "line": 634,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_634_navigation_634__linear__method:1nrn8uy:buildmodel__action_639_relationship_639__linear",
          "from": "method:1nrn8uy:buildmodel__action_634_navigation_634__linear",
          "to": "method:1nrn8uy:buildmodel__action_639_relationship_639__linear",
          "kind": "next",
          "line": 639,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_639_relationship_639__linear__method:1nrn8uy:buildmodel__action_649_relationship_649__linear",
          "from": "method:1nrn8uy:buildmodel__action_639_relationship_639__linear",
          "to": "method:1nrn8uy:buildmodel__action_649_relationship_649__linear",
          "kind": "next",
          "line": 649,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_649_relationship_649__linear__method:1nrn8uy:buildmodel__action_668_relationship_668__linear",
          "from": "method:1nrn8uy:buildmodel__action_649_relationship_649__linear",
          "to": "method:1nrn8uy:buildmodel__action_668_relationship_668__linear",
          "kind": "next",
          "line": 668,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_668_relationship_668__linear__method:1nrn8uy:buildmodel__action_679_relationship_679__linear",
          "from": "method:1nrn8uy:buildmodel__action_668_relationship_668__linear",
          "to": "method:1nrn8uy:buildmodel__action_679_relationship_679__linear",
          "kind": "next",
          "line": 679,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nrn8uy:buildmodel__action_679_relationship_679__linear__implicit_return",
          "from": "method:1nrn8uy:buildmodel__action_679_relationship_679__linear",
          "to": "method:1nrn8uy:buildmodel__implicit_return",
          "kind": "return",
          "line": 709,
          "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 17,
        "end": 709
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method BuildModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ex6nhz:appdbcontext__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:ex6nhz:appdbcontext",
      "ownerSymbolName": "AppDbContext",
      "entryNodeId": "method:ex6nhz:appdbcontext__entry",
      "exitNodeIds": [
        "method:ex6nhz:appdbcontext__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ex6nhz:appdbcontext__entry",
          "kind": "entry",
          "label": "AppDbContext entry",
          "line": 9,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF DbContext with provided options."
        },
        {
          "id": "method:ex6nhz:appdbcontext__action_9_ctor_9__linear",
          "kind": "statement",
          "label": "Ctor delegates to base DbContext",
          "line": 9,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Invokes base(options) to initialize IdentityDbContext"
        },
        {
          "id": "method:ex6nhz:appdbcontext__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ex6nhz:appdbcontext__entry__method:ex6nhz:appdbcontext__action_9_ctor_9__linear",
          "from": "method:ex6nhz:appdbcontext__entry",
          "to": "method:ex6nhz:appdbcontext__action_9_ctor_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ex6nhz:appdbcontext__action_9_ctor_9__linear__implicit_return",
          "from": "method:ex6nhz:appdbcontext__action_9_ctor_9__linear",
          "to": "method:ex6nhz:appdbcontext__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method AppDbContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wn8qlw:onconfiguring__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:1wn8qlw:onconfiguring",
      "ownerSymbolName": "OnConfiguring",
      "entryNodeId": "method:1wn8qlw:onconfiguring__entry",
      "exitNodeIds": [
        "method:1wn8qlw:onconfiguring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1wn8qlw:onconfiguring__entry",
          "kind": "entry",
          "label": "OnConfiguring entry",
          "line": 13,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Performs additional EF configuration; suppresses a pending-model-changes warning to avoid runtime exceptions in some environments."
        },
        {
          "id": "method:1wn8qlw:onconfiguring__action_15_framework_call_15__linear",
          "kind": "statement",
          "label": "Calls base OnConfiguring",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "base.OnConfiguring(optionsBuilder)"
        },
        {
          "id": "method:1wn8qlw:onconfiguring__action_16_configuration_16__linear",
          "kind": "statement",
          "label": "Suppress PendingModelChangesWarning",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "optionsBuilder.ConfigureWarnings(...Ignore(RelationalEventId.PendingModelChangesWarning))"
        },
        {
          "id": "method:1wn8qlw:onconfiguring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1wn8qlw:onconfiguring__entry__method:1wn8qlw:onconfiguring__action_15_framework_call_15__linear",
          "from": "method:1wn8qlw:onconfiguring__entry",
          "to": "method:1wn8qlw:onconfiguring__action_15_framework_call_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wn8qlw:onconfiguring__action_15_framework_call_15__linear__method:1wn8qlw:onconfiguring__action_16_configuration_16__linear",
          "from": "method:1wn8qlw:onconfiguring__action_15_framework_call_15__linear",
          "to": "method:1wn8qlw:onconfiguring__action_16_configuration_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wn8qlw:onconfiguring__action_16_configuration_16__linear__implicit_return",
          "from": "method:1wn8qlw:onconfiguring__action_16_configuration_16__linear",
          "to": "method:1wn8qlw:onconfiguring__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 13,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method OnConfiguring.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1v6tqnu:semanticknowledgecache-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:1v6tqnu:semanticknowledgecache-dbset-property",
      "ownerSymbolName": "SemanticKnowledgeCache (DbSet property)",
      "entryNodeId": "method:1v6tqnu:semanticknowledgecache-dbset-property__entry",
      "exitNodeIds": [
        "method:1v6tqnu:semanticknowledgecache-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1v6tqnu:semanticknowledgecache-dbset-property__entry",
          "kind": "entry",
          "label": "SemanticKnowledgeCache (DbSet property) entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for SemanticKnowledgeCache entities."
        },
        {
          "id": "method:1v6tqnu:semanticknowledgecache-dbset-property__action_20_expose_dbset_20__linear",
          "kind": "statement",
          "label": "Exposes Set<SemanticKnowledgeCache>()",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<SemanticKnowledgeCache> SemanticKnowledgeCache => Set<SemanticKnowledgeCache>()"
        },
        {
          "id": "method:1v6tqnu:semanticknowledgecache-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1v6tqnu:semanticknowledgecache-dbset-property__entry__method:1v6tqnu:semanticknowledgecache-dbset-property__action_20_expose_dbset_20__linear",
          "from": "method:1v6tqnu:semanticknowledgecache-dbset-property__entry",
          "to": "method:1v6tqnu:semanticknowledgecache-dbset-property__action_20_expose_dbset_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1v6tqnu:semanticknowledgecache-dbset-property__action_20_expose_dbset_20__linear__implicit_return",
          "from": "method:1v6tqnu:semanticknowledgecache-dbset-property__action_20_expose_dbset_20__linear",
          "to": "method:1v6tqnu:semanticknowledgecache-dbset-property__implicit_return",
          "kind": "return",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 20,
        "end": 20
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method SemanticKnowledgeCache (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:zj5uq4:knowledgeunits-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:zj5uq4:knowledgeunits-dbset-property",
      "ownerSymbolName": "KnowledgeUnits (DbSet property)",
      "entryNodeId": "method:zj5uq4:knowledgeunits-dbset-property__entry",
      "exitNodeIds": [
        "method:zj5uq4:knowledgeunits-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:zj5uq4:knowledgeunits-dbset-property__entry",
          "kind": "entry",
          "label": "KnowledgeUnits (DbSet property) entry",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for KnowledgeUnit entities."
        },
        {
          "id": "method:zj5uq4:knowledgeunits-dbset-property__action_21_expose_dbset_21__linear",
          "kind": "statement",
          "label": "Exposes Set<KnowledgeUnit>()",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<KnowledgeUnit> KnowledgeUnits => Set<KnowledgeUnit>()"
        },
        {
          "id": "method:zj5uq4:knowledgeunits-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:zj5uq4:knowledgeunits-dbset-property__entry__method:zj5uq4:knowledgeunits-dbset-property__action_21_expose_dbset_21__linear",
          "from": "method:zj5uq4:knowledgeunits-dbset-property__entry",
          "to": "method:zj5uq4:knowledgeunits-dbset-property__action_21_expose_dbset_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:zj5uq4:knowledgeunits-dbset-property__action_21_expose_dbset_21__linear__implicit_return",
          "from": "method:zj5uq4:knowledgeunits-dbset-property__action_21_expose_dbset_21__linear",
          "to": "method:zj5uq4:knowledgeunits-dbset-property__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 21,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method KnowledgeUnits (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jwlkph:knowledgeunitlinks-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:1jwlkph:knowledgeunitlinks-dbset-property",
      "ownerSymbolName": "KnowledgeUnitLinks (DbSet property)",
      "entryNodeId": "method:1jwlkph:knowledgeunitlinks-dbset-property__entry",
      "exitNodeIds": [
        "method:1jwlkph:knowledgeunitlinks-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jwlkph:knowledgeunitlinks-dbset-property__entry",
          "kind": "entry",
          "label": "KnowledgeUnitLinks (DbSet property) entry",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for KnowledgeUnitLink entities."
        },
        {
          "id": "method:1jwlkph:knowledgeunitlinks-dbset-property__action_22_expose_dbset_22__linear",
          "kind": "statement",
          "label": "Exposes Set<KnowledgeUnitLink>()",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<KnowledgeUnitLink> KnowledgeUnitLinks => Set<KnowledgeUnitLink>()"
        },
        {
          "id": "method:1jwlkph:knowledgeunitlinks-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jwlkph:knowledgeunitlinks-dbset-property__entry__method:1jwlkph:knowledgeunitlinks-dbset-property__action_22_expose_dbset_22__linear",
          "from": "method:1jwlkph:knowledgeunitlinks-dbset-property__entry",
          "to": "method:1jwlkph:knowledgeunitlinks-dbset-property__action_22_expose_dbset_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jwlkph:knowledgeunitlinks-dbset-property__action_22_expose_dbset_22__linear__implicit_return",
          "from": "method:1jwlkph:knowledgeunitlinks-dbset-property__action_22_expose_dbset_22__linear",
          "to": "method:1jwlkph:knowledgeunitlinks-dbset-property__implicit_return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 22,
        "end": 22
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method KnowledgeUnitLinks (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cfsfui:ebooks-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:cfsfui:ebooks-dbset-property",
      "ownerSymbolName": "Ebooks (DbSet property)",
      "entryNodeId": "method:cfsfui:ebooks-dbset-property__entry",
      "exitNodeIds": [
        "method:cfsfui:ebooks-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cfsfui:ebooks-dbset-property__entry",
          "kind": "entry",
          "label": "Ebooks (DbSet property) entry",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for Ebook entities."
        },
        {
          "id": "method:cfsfui:ebooks-dbset-property__action_23_expose_dbset_23__linear",
          "kind": "statement",
          "label": "Exposes Set<Ebook>()",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<Ebook> Ebooks => Set<Ebook>()"
        },
        {
          "id": "method:cfsfui:ebooks-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cfsfui:ebooks-dbset-property__entry__method:cfsfui:ebooks-dbset-property__action_23_expose_dbset_23__linear",
          "from": "method:cfsfui:ebooks-dbset-property__entry",
          "to": "method:cfsfui:ebooks-dbset-property__action_23_expose_dbset_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cfsfui:ebooks-dbset-property__action_23_expose_dbset_23__linear__implicit_return",
          "from": "method:cfsfui:ebooks-dbset-property__action_23_expose_dbset_23__linear",
          "to": "method:cfsfui:ebooks-dbset-property__implicit_return",
          "kind": "return",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 23,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method Ebooks (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:w8lt4l:quizresults-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:w8lt4l:quizresults-dbset-property",
      "ownerSymbolName": "QuizResults (DbSet property)",
      "entryNodeId": "method:w8lt4l:quizresults-dbset-property__entry",
      "exitNodeIds": [
        "method:w8lt4l:quizresults-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:w8lt4l:quizresults-dbset-property__entry",
          "kind": "entry",
          "label": "QuizResults (DbSet property) entry",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for QuizResult entities."
        },
        {
          "id": "method:w8lt4l:quizresults-dbset-property__action_24_expose_dbset_24__linear",
          "kind": "statement",
          "label": "Exposes Set<QuizResult>()",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<QuizResult> QuizResults => Set<QuizResult>()"
        },
        {
          "id": "method:w8lt4l:quizresults-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:w8lt4l:quizresults-dbset-property__entry__method:w8lt4l:quizresults-dbset-property__action_24_expose_dbset_24__linear",
          "from": "method:w8lt4l:quizresults-dbset-property__entry",
          "to": "method:w8lt4l:quizresults-dbset-property__action_24_expose_dbset_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:w8lt4l:quizresults-dbset-property__action_24_expose_dbset_24__linear__implicit_return",
          "from": "method:w8lt4l:quizresults-dbset-property__action_24_expose_dbset_24__linear",
          "to": "method:w8lt4l:quizresults-dbset-property__implicit_return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 24,
        "end": 24
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 24,
          "summary": "Control-flow fragment extracted for method QuizResults (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cusclc:subscriptionplans-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:cusclc:subscriptionplans-dbset-property",
      "ownerSymbolName": "SubscriptionPlans (DbSet property)",
      "entryNodeId": "method:cusclc:subscriptionplans-dbset-property__entry",
      "exitNodeIds": [
        "method:cusclc:subscriptionplans-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cusclc:subscriptionplans-dbset-property__entry",
          "kind": "entry",
          "label": "SubscriptionPlans (DbSet property) entry",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for SubscriptionPlan entities."
        },
        {
          "id": "method:cusclc:subscriptionplans-dbset-property__action_25_expose_dbset_25__linear",
          "kind": "statement",
          "label": "Exposes Set<SubscriptionPlan>()",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<SubscriptionPlan> SubscriptionPlans => Set<SubscriptionPlan>()"
        },
        {
          "id": "method:cusclc:subscriptionplans-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cusclc:subscriptionplans-dbset-property__entry__method:cusclc:subscriptionplans-dbset-property__action_25_expose_dbset_25__linear",
          "from": "method:cusclc:subscriptionplans-dbset-property__entry",
          "to": "method:cusclc:subscriptionplans-dbset-property__action_25_expose_dbset_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cusclc:subscriptionplans-dbset-property__action_25_expose_dbset_25__linear__implicit_return",
          "from": "method:cusclc:subscriptionplans-dbset-property__action_25_expose_dbset_25__linear",
          "to": "method:cusclc:subscriptionplans-dbset-property__implicit_return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 25,
        "end": 25
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method SubscriptionPlans (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1r4sskm:authors-dbset-property__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:1r4sskm:authors-dbset-property",
      "ownerSymbolName": "Authors (DbSet property)",
      "entryNodeId": "method:1r4sskm:authors-dbset-property__entry",
      "exitNodeIds": [
        "method:1r4sskm:authors-dbset-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1r4sskm:authors-dbset-property__entry",
          "kind": "entry",
          "label": "Authors (DbSet property) entry",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Exposes the DbSet for Author entities."
        },
        {
          "id": "method:1r4sskm:authors-dbset-property__action_26_expose_dbset_26__linear",
          "kind": "statement",
          "label": "Exposes Set<Author>()",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "public DbSet<Author> Authors => Set<Author>()"
        },
        {
          "id": "method:1r4sskm:authors-dbset-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1r4sskm:authors-dbset-property__entry__method:1r4sskm:authors-dbset-property__action_26_expose_dbset_26__linear",
          "from": "method:1r4sskm:authors-dbset-property__entry",
          "to": "method:1r4sskm:authors-dbset-property__action_26_expose_dbset_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1r4sskm:authors-dbset-property__action_26_expose_dbset_26__linear__implicit_return",
          "from": "method:1r4sskm:authors-dbset-property__action_26_expose_dbset_26__linear",
          "to": "method:1r4sskm:authors-dbset-property__implicit_return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 26,
        "end": 26
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 26,
          "summary": "Control-flow fragment extracted for method Authors (DbSet property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1of3kqt:onmodelcreating__fragment",
      "ownerFileId": "file:1pacvtg:appdbcontext-cs",
      "ownerSymbolId": "method:1of3kqt:onmodelcreating",
      "ownerSymbolName": "OnModelCreating",
      "entryNodeId": "method:1of3kqt:onmodelcreating__entry",
      "exitNodeIds": [
        "method:1of3kqt:onmodelcreating__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1of3kqt:onmodelcreating__entry",
          "kind": "entry",
          "label": "OnModelCreating entry",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.99,
          "detail": "Configures EF model mappings: entity properties, indexes, relationships, provider-specific column types, and seeds subscription plans with deterministic IDs."
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_30_framework_call_30__linear",
          "kind": "statement",
          "label": "Calls base OnModelCreating",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "base.OnModelCreating(modelBuilder)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_32_entity_configuration_32__linear",
          "kind": "statement",
          "label": "NexusUser property & index mapping",
          "line": 32,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Configures LastReadPageId length, LastReadAt optional, index on TenantId, SubscriptionPlan FK (restrict), default SubscriptionPlanId = 1 (lines 32-46)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_48_entity_configuration_48__linear",
          "kind": "statement",
          "label": "SubscriptionPlan unique index",
          "line": 48,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Configures unique index on PlanName (line 50)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_53_entity_configuration_53__linear",
          "kind": "statement",
          "label": "SemanticKnowledgeCache key/index and provider-specific embedding handling",
          "line": 53,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Sets ContentHash as key and unique index, tenant index; IF PostgreSQL then map Embedding column to vector(768) and create hnsw index with vector_cosine_ops; ELSE ignore Embedding property (lines 55-67)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition",
          "kind": "condition",
          "label": "Database.IsNpgsql()",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "If Npgsql: configure vector column and HNSW index (lines 60-62); else ignore Embedding (line 66)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__true",
          "kind": "branch-true",
          "label": "postgresql-path",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__false",
          "kind": "branch-false",
          "label": "other-db-path",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition",
          "kind": "condition",
          "label": "Database.IsNpgsql()",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78,
          "detail": "if (Database.IsNpgsql())"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_70_entity_configuration_70__linear",
          "kind": "statement",
          "label": "KnowledgeUnit keys, indexes, relationship to Ebook",
          "line": 70,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Sets key Id, indexes on TenantId and EbookId, FK to Ebook with Cascade delete (lines 72-79)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_82_entity_configuration_82__linear",
          "kind": "statement",
          "label": "KnowledgeUnitLink relationships",
          "line": 82,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Sets key Id; SourceUnit -> OutgoingLinks FK cascade; TargetUnit -> IncomingLinks FK cascade (lines 84-93)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_96_entity_configuration_96__linear",
          "kind": "statement",
          "label": "Ebook relationships",
          "line": 96,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "FK to User (cascade) and Author (restrict); index TenantId (lines 98-109)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_111_entity_configuration_111__linear",
          "kind": "statement",
          "label": "QuizResult relationship and index",
          "line": 111,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "FK to User (cascade) and index on TenantId (lines 113-118)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_121_data_seed_121__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlan rows with deterministic IDs",
          "line": 121,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7,
          "detail": "Inserts four SubscriptionPlan rows with Ids 1..4 and preset PlanName/AITokenLimit/MonthlyPrice/StripeProductId (lines 121-127)"
        },
        {
          "id": "method:1of3kqt:onmodelcreating__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 128,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1of3kqt:onmodelcreating__entry__method:1of3kqt:onmodelcreating__action_30_framework_call_30__linear",
          "from": "method:1of3kqt:onmodelcreating__entry",
          "to": "method:1of3kqt:onmodelcreating__action_30_framework_call_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_30_framework_call_30__linear__method:1of3kqt:onmodelcreating__action_32_entity_configuration_32__linear",
          "from": "method:1of3kqt:onmodelcreating__action_30_framework_call_30__linear",
          "to": "method:1of3kqt:onmodelcreating__action_32_entity_configuration_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_32_entity_configuration_32__linear__method:1of3kqt:onmodelcreating__action_48_entity_configuration_48__linear",
          "from": "method:1of3kqt:onmodelcreating__action_32_entity_configuration_32__linear",
          "to": "method:1of3kqt:onmodelcreating__action_48_entity_configuration_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_48_entity_configuration_48__linear__method:1of3kqt:onmodelcreating__action_53_entity_configuration_53__linear",
          "from": "method:1of3kqt:onmodelcreating__action_48_entity_configuration_48__linear",
          "to": "method:1of3kqt:onmodelcreating__action_53_entity_configuration_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_53_entity_configuration_53__linear__method:1of3kqt:onmodelcreating__action_58_branch_58__condition",
          "from": "method:1of3kqt:onmodelcreating__action_53_entity_configuration_53__linear",
          "to": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition__method:1of3kqt:onmodelcreating__action_58_branch_58__true",
          "from": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition",
          "to": "method:1of3kqt:onmodelcreating__action_58_branch_58__true",
          "kind": "condition-true",
          "label": "postgresql-path",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition__method:1of3kqt:onmodelcreating__action_58_branch_58__false",
          "from": "method:1of3kqt:onmodelcreating__action_58_branch_58__condition",
          "to": "method:1of3kqt:onmodelcreating__action_58_branch_58__false",
          "kind": "condition-false",
          "label": "other-db-path",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__true__method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "from": "method:1of3kqt:onmodelcreating__action_58_branch_58__true",
          "to": "method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__false__method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "from": "method:1of3kqt:onmodelcreating__action_58_branch_58__false",
          "to": "method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_branch_58__merge__method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition",
          "from": "method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
          "to": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition__method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__true",
          "from": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition",
          "to": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition__method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__false",
          "from": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__condition",
          "to": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__true__method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "from": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__true",
          "to": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__false__method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "from": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__false",
          "to": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge__method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition",
          "from": "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
          "to": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition",
          "kind": "fallback",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition__method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__true",
          "from": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition",
          "to": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition__method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__false",
          "from": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__condition",
          "to": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__true__method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "from": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__true",
          "to": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__false__method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "from": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__false",
          "to": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge__method:1of3kqt:onmodelcreating__action_70_entity_configuration_70__linear",
          "from": "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge",
          "to": "method:1of3kqt:onmodelcreating__action_70_entity_configuration_70__linear",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_70_entity_configuration_70__linear__method:1of3kqt:onmodelcreating__action_82_entity_configuration_82__linear",
          "from": "method:1of3kqt:onmodelcreating__action_70_entity_configuration_70__linear",
          "to": "method:1of3kqt:onmodelcreating__action_82_entity_configuration_82__linear",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_82_entity_configuration_82__linear__method:1of3kqt:onmodelcreating__action_96_entity_configuration_96__linear",
          "from": "method:1of3kqt:onmodelcreating__action_82_entity_configuration_82__linear",
          "to": "method:1of3kqt:onmodelcreating__action_96_entity_configuration_96__linear",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_96_entity_configuration_96__linear__method:1of3kqt:onmodelcreating__action_111_entity_configuration_111__linear",
          "from": "method:1of3kqt:onmodelcreating__action_96_entity_configuration_96__linear",
          "to": "method:1of3kqt:onmodelcreating__action_111_entity_configuration_111__linear",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_111_entity_configuration_111__linear__method:1of3kqt:onmodelcreating__action_121_data_seed_121__linear",
          "from": "method:1of3kqt:onmodelcreating__action_111_entity_configuration_111__linear",
          "to": "method:1of3kqt:onmodelcreating__action_121_data_seed_121__linear",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1of3kqt:onmodelcreating__action_121_data_seed_121__linear__implicit_return",
          "from": "method:1of3kqt:onmodelcreating__action_121_data_seed_121__linear",
          "to": "method:1of3kqt:onmodelcreating__implicit_return",
          "kind": "return",
          "line": 128,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1of3kqt:onmodelcreating__action_58_branch_58__merge",
        "method:1of3kqt:onmodelcreating__action_58_onmodelcreating_branch_58_0__merge",
        "method:1of3kqt:onmodelcreating__action_64_onmodelcreating_fallback_64_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 28,
        "end": 128
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContext.cs",
          "line": 28,
          "summary": "Control-flow fragment extracted for method OnModelCreating.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:nwogow:createdbcontext__fragment",
      "ownerFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "ownerSymbolId": "method:nwogow:createdbcontext",
      "ownerSymbolName": "CreateDbContext",
      "entryNodeId": "method:nwogow:createdbcontext__entry",
      "exitNodeIds": [
        "method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return",
        "method:nwogow:createdbcontext__action_43_return_43__return",
        "method:nwogow:createdbcontext__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:nwogow:createdbcontext__entry",
          "kind": "entry",
          "label": "CreateDbContext entry",
          "line": 10,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.99,
          "detail": "Creates and configures an AppDbContext for design-time use by reading environment, locating the Web project for configuration files, resolving a connection string (with fallback), applying Npgsql + pgvector options, and returning the context."
        },
        {
          "id": "method:nwogow:createdbcontext__action_12_env_read_12__linear",
          "kind": "statement",
          "label": "Read ASPNETCORE_ENVIRONMENT",
          "line": 12,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "Environment.GetEnvironmentVariable(\"ASPNETCORE_ENVIRONMENT\") with default 'Development'"
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "kind": "loop-entry",
          "label": "Walk up directories to find solution file",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))) currentDir = currentDir.Parent;"
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_body",
          "kind": "loop-body",
          "label": "while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))) currentDir = currentDir.Parent;",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "kind": "loop-entry",
          "label": "currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86,
          "detail": "while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\")))"
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body",
          "kind": "loop-body",
          "label": "while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\")))",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__condition",
          "kind": "condition",
          "label": "currentDir != null",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "basePath = currentDir != null ? Path.Combine(currentDir.FullName, \"src\", \"NexusReader.Web\") : Directory.GetCurrentDirectory();"
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__true",
          "kind": "branch-true",
          "label": "use src/NexusReader.Web",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__false",
          "kind": "branch-false",
          "label": "use current working directory",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_25_config_build_25__linear",
          "kind": "statement",
          "label": "Build configuration from appsettings and environment",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "ConfigurationBuilder with appsettings.json, appsettings.{env}.json, and environment variables"
        },
        {
          "id": "method:nwogow:createdbcontext__action_33_call_33__linear",
          "kind": "statement",
          "label": "Get connection string",
          "line": 33,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "configuration.GetConnectionString(\"PostgresConnection\")"
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(connectionString)",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "sets connectionString = \"Host=localhost;Database=nexus_reader;Username=postgres;Password=postgres\""
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__true",
          "kind": "branch-true",
          "label": "assign default Postgres connection",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__false",
          "kind": "branch-false",
          "label": "keep discovered connection",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(connectionString)",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrEmpty(connectionString))"
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_41_persistence_config_41__linear",
          "kind": "statement",
          "label": "Configure Npgsql with pgvector",
          "line": 41,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "optionsBuilder.UseNpgsql(connectionString, x => x.UseVector())"
        },
        {
          "id": "method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "return new AppDbContext(optionsBuilder.Options);"
        },
        {
          "id": "method:nwogow:createdbcontext__action_43_return_43__return",
          "kind": "return",
          "label": "Return configured DbContext",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7,
          "detail": "return new AppDbContext(optionsBuilder.Options)"
        },
        {
          "id": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor",
          "kind": "call",
          "label": "AppDbContext..ctor",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.88,
          "detail": "optionsBuilder.Options (DbContextOptions<AppDbContext>)"
        },
        {
          "id": "method:nwogow:createdbcontext__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 44,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:nwogow:createdbcontext__entry__method:nwogow:createdbcontext__action_12_env_read_12__linear",
          "from": "method:nwogow:createdbcontext__entry",
          "to": "method:nwogow:createdbcontext__action_12_env_read_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_12_env_read_12__linear__method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "from": "method:nwogow:createdbcontext__action_12_env_read_12__linear",
          "to": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry__method:nwogow:createdbcontext__action_15_loop_15__loop_body",
          "from": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "to": "method:nwogow:createdbcontext__action_15_loop_15__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_body__method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "from": "method:nwogow:createdbcontext__action_15_loop_15__loop_body",
          "to": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry__method:nwogow:createdbcontext__action_15_loop_15__loop_exit",
          "from": "method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
          "to": "method:nwogow:createdbcontext__action_15_loop_15__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 15,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_15_loop_15__loop_exit__method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "from": "method:nwogow:createdbcontext__action_15_loop_15__loop_exit",
          "to": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry__method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body",
          "from": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "to": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body",
          "kind": "loop-body",
          "label": "currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body__method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "from": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body",
          "to": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry__method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_exit",
          "from": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry",
          "to": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_exit__method:nwogow:createdbcontext__action_21_branch_21__condition",
          "from": "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_exit",
          "to": "method:nwogow:createdbcontext__action_21_branch_21__condition",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__condition__method:nwogow:createdbcontext__action_21_branch_21__true",
          "from": "method:nwogow:createdbcontext__action_21_branch_21__condition",
          "to": "method:nwogow:createdbcontext__action_21_branch_21__true",
          "kind": "condition-true",
          "label": "use src/NexusReader.Web",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__condition__method:nwogow:createdbcontext__action_21_branch_21__false",
          "from": "method:nwogow:createdbcontext__action_21_branch_21__condition",
          "to": "method:nwogow:createdbcontext__action_21_branch_21__false",
          "kind": "condition-false",
          "label": "use current working directory",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__true__method:nwogow:createdbcontext__action_21_branch_21__merge",
          "from": "method:nwogow:createdbcontext__action_21_branch_21__true",
          "to": "method:nwogow:createdbcontext__action_21_branch_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__false__method:nwogow:createdbcontext__action_21_branch_21__merge",
          "from": "method:nwogow:createdbcontext__action_21_branch_21__false",
          "to": "method:nwogow:createdbcontext__action_21_branch_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_21_branch_21__merge__method:nwogow:createdbcontext__action_25_config_build_25__linear",
          "from": "method:nwogow:createdbcontext__action_21_branch_21__merge",
          "to": "method:nwogow:createdbcontext__action_25_config_build_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_25_config_build_25__linear__method:nwogow:createdbcontext__action_33_call_33__linear",
          "from": "method:nwogow:createdbcontext__action_25_config_build_25__linear",
          "to": "method:nwogow:createdbcontext__action_33_call_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_33_call_33__linear__method:nwogow:createdbcontext__action_35_guard_clause_35__condition",
          "from": "method:nwogow:createdbcontext__action_33_call_33__linear",
          "to": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition__method:nwogow:createdbcontext__action_35_guard_clause_35__true",
          "from": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition",
          "to": "method:nwogow:createdbcontext__action_35_guard_clause_35__true",
          "kind": "condition-true",
          "label": "assign default Postgres connection",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition__method:nwogow:createdbcontext__action_35_guard_clause_35__false",
          "from": "method:nwogow:createdbcontext__action_35_guard_clause_35__condition",
          "to": "method:nwogow:createdbcontext__action_35_guard_clause_35__false",
          "kind": "condition-false",
          "label": "keep discovered connection",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__true__method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "from": "method:nwogow:createdbcontext__action_35_guard_clause_35__true",
          "to": "method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__false__method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "from": "method:nwogow:createdbcontext__action_35_guard_clause_35__false",
          "to": "method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_guard_clause_35__merge__method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition",
          "from": "method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
          "to": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition__method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__true",
          "from": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition",
          "to": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition__method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__false",
          "from": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__condition",
          "to": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__true__method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "from": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__true",
          "to": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__false__method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "from": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__false",
          "to": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge__method:nwogow:createdbcontext__action_41_persistence_config_41__linear",
          "from": "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge",
          "to": "method:nwogow:createdbcontext__action_41_persistence_config_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_41_persistence_config_41__linear__method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return",
          "from": "method:nwogow:createdbcontext__action_41_persistence_config_41__linear",
          "to": "method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return__method:nwogow:createdbcontext__action_43_return_43__return",
          "from": "method:nwogow:createdbcontext__action_43_createdbcontext_return_43_2__return",
          "to": "method:nwogow:createdbcontext__action_43_return_43__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nwogow:createdbcontext__action_43_return_43__return__call_method:nwogow:createdbcontext__call_43_AppDbContext_ctor",
          "from": "method:nwogow:createdbcontext__action_43_return_43__return",
          "to": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor",
          "kind": "call",
          "label": "optionsBuilder.Options (DbContextOptions<AppDbContext>)",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor__implicit_return",
          "from": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor",
          "to": "method:nwogow:createdbcontext__implicit_return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor__jump_NexusReader_Data_Persistence_AppDbContext_cs_AppDbContext_ctor",
          "fromNodeId": "method:nwogow:createdbcontext__call_43_AppDbContext_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "AppDbContext..ctor",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "reason": "Call target AppDbContext..ctor in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:nwogow:createdbcontext__action_15_loop_15__loop_body__method:nwogow:createdbcontext__action_15_loop_15__loop_entry",
        "method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_body__method:nwogow:createdbcontext__action_16_createdbcontext_loop_16_0__loop_entry"
      ],
      "mergeNodeIds": [
        "method:nwogow:createdbcontext__action_21_branch_21__merge",
        "method:nwogow:createdbcontext__action_35_guard_clause_35__merge",
        "method:nwogow:createdbcontext__action_35_createdbcontext_branch_35_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 10,
        "end": 44
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method CreateDbContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:n19kbi:seedasync__fragment",
      "ownerFileId": "file:136c3oe:dbinitializer-cs",
      "ownerSymbolId": "method:n19kbi:seedasync",
      "ownerSymbolName": "SeedAsync",
      "entryNodeId": "method:n19kbi:seedasync__entry",
      "exitNodeIds": [
        "method:n19kbi:seedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:n19kbi:seedasync__entry",
          "kind": "entry",
          "label": "SeedAsync entry",
          "line": 14,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.99,
          "detail": "Create a scoped DbContext and seed initial database data: subscription plans, roles, an admin user (with role), a sample author and an ebook, with logging and error handling."
        },
        {
          "id": "method:n19kbi:seedasync__action_16_resource_acquire_16__linear",
          "kind": "statement",
          "label": "Create service scope and resolve services",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "using var scope = serviceProvider.CreateScope(); resolve IPasswordHasher<NexusUser> and IDbContextFactory<AppDbContext> from scope"
        },
        {
          "id": "method:n19kbi:seedasync__action_19_seedasync_await_19_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_19_external_call_19__linear",
          "kind": "http-call",
          "label": "Create DbContext async",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "await dbContextFactory.CreateDbContextAsync() — obtains AppDbContext for persistence operations"
        },
        {
          "id": "method:n19kbi:seedasync__action_21_seedasync_try_21_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:n19kbi:seedasync__action_23_log_23__linear",
          "kind": "statement",
          "label": "Starting seeding",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[Seeder] Starting database seeding...\")"
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__condition",
          "kind": "condition",
          "label": "!dbContext.SubscriptionPlans.Any()",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "Adds three SubscriptionPlan entities and SaveChangesAsync when no plans exist (lines 28-35)"
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__true",
          "kind": "branch-true",
          "label": "add-plans",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition",
          "kind": "condition",
          "label": "!dbContext.SubscriptionPlans.Any()",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78,
          "detail": "if (!dbContext.SubscriptionPlans.Any())"
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_28_persistence_write_28__linear",
          "kind": "statement",
          "label": "AddRange SubscriptionPlans",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "dbContext.SubscriptionPlans.AddRange(...); await dbContext.SaveChangesAsync()"
        },
        {
          "id": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "kind": "call",
          "label": "FreeId / FreeName / ProId / ProName / EnterpriseId / EnterpriseName (static properties)",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "used to set Id and PlanName when creating SubscriptionPlan instances"
        },
        {
          "id": "method:n19kbi:seedasync__action_34_seedasync_await_34_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 34,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_35_log_35__linear",
          "kind": "statement",
          "label": "Seed progress/info logs",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "Multiple Console.WriteLine statements after seeding stages (lines 35, 46, 80, 106, 111)"
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "kind": "loop-entry",
          "label": "Seed roles (Admin, User)",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "foreach roleName in roleNames -> checks dbContext.Roles.Any(...) and adds missing IdentityRole entries; then SaveChangesAsync() (lines 40-49, 49)"
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_body",
          "kind": "loop-body",
          "label": "foreach roleName in roleNames -> checks dbContext.Roles.Any(...) and adds missing IdentityRole entries; then SaveChangesAsync() (lines 40-49, 49)",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "kind": "loop-entry",
          "label": "var roleName in roleNames",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86,
          "detail": "foreach (var roleName in roleNames)"
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body",
          "kind": "loop-body",
          "label": "foreach (var roleName in roleNames)",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition",
          "kind": "condition",
          "label": "!roleExist",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78,
          "detail": "if (!roleExist)"
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_45_seedasync_repository_write_45_6__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 45,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "dbContext.Roles.Add(new IdentityRole { Name = roleName, NormalizedName = roleName.ToUpper() });"
        },
        {
          "id": "method:n19kbi:seedasync__action_49_seedasync_await_49_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_54_seedasync_await_54_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "var adminUser = await dbContext.Users.FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail);"
        },
        {
          "id": "method:n19kbi:seedasync__action_54_persistence_read_54__linear",
          "kind": "statement",
          "label": "Check for existing admin user",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "await dbContext.Users.FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail)"
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition",
          "kind": "condition",
          "label": "adminUser == null",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78,
          "detail": "if (adminUser == null)"
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__condition",
          "kind": "condition",
          "label": "adminUser == null",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "If missing, create NexusUser, hash password, add to Users, assign Admin role, and seed sample author and ebook (lines 58-107); else log that admin exists (line 111)."
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__true",
          "kind": "branch-true",
          "label": "create-admin",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__false",
          "kind": "branch-false",
          "label": "admin-exists",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation_",
          "kind": "call",
          "label": "NexusUser .ctor (entity creation)",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "instantiates admin NexusUser with email, subscription, tokens, tenant/security stamps"
        },
        {
          "id": "method:n19kbi:seedasync__action_71_persistence_write_71__linear",
          "kind": "statement",
          "label": "Create admin user and save",
          "line": 71,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "passwordHasher.HashPassword(...); dbContext.Users.Add(adminUser); await dbContext.SaveChangesAsync()"
        },
        {
          "id": "method:n19kbi:seedasync__action_73_seedasync_repository_write_73_10__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 73,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "dbContext.Users.Add(adminUser);"
        },
        {
          "id": "method:n19kbi:seedasync__action_74_seedasync_await_74_11__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 74,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_76_seedasync_await_76_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 76,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "var adminRole = await dbContext.Roles.FirstAsync(r => r.Name == \"Admin\");"
        },
        {
          "id": "method:n19kbi:seedasync__action_76_persistence_write_76__linear",
          "kind": "statement",
          "label": "Assign Admin role to user",
          "line": 76,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "fetch role entity and add IdentityUserRole to dbContext.UserRoles; await SaveChangesAsync()"
        },
        {
          "id": "method:n19kbi:seedasync__action_77_seedasync_repository_write_77_13__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 77,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "dbContext.UserRoles.Add(new IdentityUserRole<string> { UserId = adminUser.Id, RoleId = adminRole.Id });"
        },
        {
          "id": "method:n19kbi:seedasync__action_78_seedasync_await_78_14__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 78,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_83_seedasync_await_83_15__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "var author = await dbContext.Authors.FirstOrDefaultAsync(a => a.Name == \"Giorgio Vasari\");"
        },
        {
          "id": "method:n19kbi:seedasync__action_83_persistence_read_write_83__linear",
          "kind": "statement",
          "label": "Ensure sample Author exists",
          "line": 83,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "await dbContext.Authors.FirstOrDefaultAsync(a => a.Name == \"Giorgio Vasari\"); add if null and SaveChangesAsync"
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition",
          "kind": "condition",
          "label": "author == null",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78,
          "detail": "if (author == null)"
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__true",
          "kind": "branch-true",
          "label": "true",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__false",
          "kind": "branch-false",
          "label": "false",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "kind": "statement",
          "label": "merge",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation_",
          "kind": "call",
          "label": "Author .ctor (entity creation)",
          "line": 86,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "instantiates sample author 'Giorgio Vasari' if missing"
        },
        {
          "id": "method:n19kbi:seedasync__action_87_seedasync_repository_write_87_17__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 87,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "dbContext.Authors.Add(author);"
        },
        {
          "id": "method:n19kbi:seedasync__action_88_seedasync_await_88_18__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 88,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition",
          "kind": "condition",
          "label": "!dbContext.Ebooks.Any(e => e.UserId == adminUser.Id)",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78,
          "detail": "if (!dbContext.Ebooks.Any(e => e.UserId == adminUser.Id))"
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__true",
          "kind": "branch-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__false",
          "kind": "branch-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_persistence_read_write_92__linear",
          "kind": "statement",
          "label": "Add sample Ebook for admin user",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "if no ebook exists for adminUser.Id then dbContext.Ebooks.Add(new Ebook{...}); await SaveChangesAsync()"
        },
        {
          "id": "method:n19kbi:seedasync__action_94_seedasync_repository_write_94_20__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 94,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "dbContext.Ebooks.Add(new Ebook"
        },
        {
          "id": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation_",
          "kind": "call",
          "label": "Ebook .ctor (entity creation)",
          "line": 94,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88,
          "detail": "creates sample Ebook for admin user with metadata and file path"
        },
        {
          "id": "method:n19kbi:seedasync__action_105_seedasync_await_105_21__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 105,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "kind": "statement",
          "label": "merge",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_114_error_handling_114__linear",
          "kind": "statement",
          "label": "Top-level seeding exception catch",
          "line": 114,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7,
          "detail": "catch (Exception ex) { Console.WriteLine('[Seeder] Critical error during seeding: ' + ex.Message); }"
        },
        {
          "id": "method:n19kbi:seedasync__action_114_seedasync_catch_114_23__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 114,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:n19kbi:seedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 118,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:n19kbi:seedasync__entry__method:n19kbi:seedasync__action_16_resource_acquire_16__linear",
          "from": "method:n19kbi:seedasync__entry",
          "to": "method:n19kbi:seedasync__action_16_resource_acquire_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_16_resource_acquire_16__linear__method:n19kbi:seedasync__action_19_seedasync_await_19_0__await",
          "from": "method:n19kbi:seedasync__action_16_resource_acquire_16__linear",
          "to": "method:n19kbi:seedasync__action_19_seedasync_await_19_0__await",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_19_seedasync_await_19_0__await__method:n19kbi:seedasync__action_19_external_call_19__linear",
          "from": "method:n19kbi:seedasync__action_19_seedasync_await_19_0__await",
          "to": "method:n19kbi:seedasync__action_19_external_call_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_19_external_call_19__linear__method:n19kbi:seedasync__action_21_seedasync_try_21_1__try",
          "from": "method:n19kbi:seedasync__action_19_external_call_19__linear",
          "to": "method:n19kbi:seedasync__action_21_seedasync_try_21_1__try",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_21_seedasync_try_21_1__try__method:n19kbi:seedasync__action_23_log_23__linear",
          "from": "method:n19kbi:seedasync__action_21_seedasync_try_21_1__try",
          "to": "method:n19kbi:seedasync__action_23_log_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_23_log_23__linear__method:n19kbi:seedasync__action_26_guard_clause_26__condition",
          "from": "method:n19kbi:seedasync__action_23_log_23__linear",
          "to": "method:n19kbi:seedasync__action_26_guard_clause_26__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__condition__method:n19kbi:seedasync__action_26_guard_clause_26__true",
          "from": "method:n19kbi:seedasync__action_26_guard_clause_26__condition",
          "to": "method:n19kbi:seedasync__action_26_guard_clause_26__true",
          "kind": "condition-true",
          "label": "add-plans",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__condition__method:n19kbi:seedasync__action_26_guard_clause_26__false",
          "from": "method:n19kbi:seedasync__action_26_guard_clause_26__condition",
          "to": "method:n19kbi:seedasync__action_26_guard_clause_26__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__true__method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "from": "method:n19kbi:seedasync__action_26_guard_clause_26__true",
          "to": "method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__false__method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "from": "method:n19kbi:seedasync__action_26_guard_clause_26__false",
          "to": "method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_26_guard_clause_26__merge__method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition",
          "from": "method:n19kbi:seedasync__action_26_guard_clause_26__merge",
          "to": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition__method:n19kbi:seedasync__action_26_seedasync_branch_26_2__true",
          "from": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition",
          "to": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition__method:n19kbi:seedasync__action_26_seedasync_branch_26_2__false",
          "from": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__condition",
          "to": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__true__method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "from": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__true",
          "to": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__false__method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "from": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__false",
          "to": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge__method:n19kbi:seedasync__action_28_persistence_write_28__linear",
          "from": "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
          "to": "method:n19kbi:seedasync__action_28_persistence_write_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_28_persistence_write_28__linear__call_method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "from": "method:n19kbi:seedasync__action_28_persistence_write_28__linear",
          "to": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "kind": "call",
          "label": "used to set Id and PlanName when creating SubscriptionPlan instances",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties___method:n19kbi:seedasync__action_34_seedasync_await_34_3__await",
          "from": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "to": "method:n19kbi:seedasync__action_34_seedasync_await_34_3__await",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_34_seedasync_await_34_3__await__method:n19kbi:seedasync__action_35_log_35__linear",
          "from": "method:n19kbi:seedasync__action_34_seedasync_await_34_3__await",
          "to": "method:n19kbi:seedasync__action_35_log_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_35_log_35__linear__method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "from": "method:n19kbi:seedasync__action_35_log_35__linear",
          "to": "method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_entry__method:n19kbi:seedasync__action_40_loop_40__loop_body",
          "from": "method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "to": "method:n19kbi:seedasync__action_40_loop_40__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_body__method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "from": "method:n19kbi:seedasync__action_40_loop_40__loop_body",
          "to": "method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_entry__method:n19kbi:seedasync__action_40_loop_40__loop_exit",
          "from": "method:n19kbi:seedasync__action_40_loop_40__loop_entry",
          "to": "method:n19kbi:seedasync__action_40_loop_40__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_40_loop_40__loop_exit__method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "from": "method:n19kbi:seedasync__action_40_loop_40__loop_exit",
          "to": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry__method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body",
          "from": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "to": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body",
          "kind": "loop-body",
          "label": "var roleName in roleNames",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body__method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "from": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body",
          "to": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry__method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_exit",
          "from": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry",
          "to": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 40,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_exit__method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition",
          "from": "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_exit",
          "to": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition__method:n19kbi:seedasync__action_43_seedasync_branch_43_5__true",
          "from": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition",
          "to": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition__method:n19kbi:seedasync__action_43_seedasync_branch_43_5__false",
          "from": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__condition",
          "to": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__true__method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "from": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__true",
          "to": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__false__method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "from": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__false",
          "to": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge__method:n19kbi:seedasync__action_45_seedasync_repository_write_45_6__linear",
          "from": "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
          "to": "method:n19kbi:seedasync__action_45_seedasync_repository_write_45_6__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__action_45_seedasync_repository_write_45_6__linear__method:n19kbi:seedasync__action_49_seedasync_await_49_7__await",
          "from": "method:n19kbi:seedasync__action_45_seedasync_repository_write_45_6__linear",
          "to": "method:n19kbi:seedasync__action_49_seedasync_await_49_7__await",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_49_seedasync_await_49_7__await__method:n19kbi:seedasync__action_54_seedasync_await_54_8__await",
          "from": "method:n19kbi:seedasync__action_49_seedasync_await_49_7__await",
          "to": "method:n19kbi:seedasync__action_54_seedasync_await_54_8__await",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_54_seedasync_await_54_8__await__method:n19kbi:seedasync__action_54_persistence_read_54__linear",
          "from": "method:n19kbi:seedasync__action_54_seedasync_await_54_8__await",
          "to": "method:n19kbi:seedasync__action_54_persistence_read_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_54_persistence_read_54__linear__method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition",
          "from": "method:n19kbi:seedasync__action_54_persistence_read_54__linear",
          "to": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition__method:n19kbi:seedasync__action_56_seedasync_branch_56_9__true",
          "from": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition",
          "to": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition__method:n19kbi:seedasync__action_56_seedasync_branch_56_9__false",
          "from": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__condition",
          "to": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__true__method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "from": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__true",
          "to": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__false__method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "from": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__false",
          "to": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge__method:n19kbi:seedasync__action_56_branch_56__condition",
          "from": "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
          "to": "method:n19kbi:seedasync__action_56_branch_56__condition",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__condition__method:n19kbi:seedasync__action_56_branch_56__true",
          "from": "method:n19kbi:seedasync__action_56_branch_56__condition",
          "to": "method:n19kbi:seedasync__action_56_branch_56__true",
          "kind": "condition-true",
          "label": "create-admin",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__condition__method:n19kbi:seedasync__action_56_branch_56__false",
          "from": "method:n19kbi:seedasync__action_56_branch_56__condition",
          "to": "method:n19kbi:seedasync__action_56_branch_56__false",
          "kind": "condition-false",
          "label": "admin-exists",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__true__method:n19kbi:seedasync__action_56_branch_56__merge",
          "from": "method:n19kbi:seedasync__action_56_branch_56__true",
          "to": "method:n19kbi:seedasync__action_56_branch_56__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__false__method:n19kbi:seedasync__action_56_branch_56__merge",
          "from": "method:n19kbi:seedasync__action_56_branch_56__false",
          "to": "method:n19kbi:seedasync__action_56_branch_56__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_56_branch_56__merge__call_method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation_",
          "from": "method:n19kbi:seedasync__action_56_branch_56__merge",
          "to": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation_",
          "kind": "call",
          "label": "instantiates admin NexusUser with email, subscription, tokens, tenant/security stamps",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation___method:n19kbi:seedasync__action_71_persistence_write_71__linear",
          "from": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation_",
          "to": "method:n19kbi:seedasync__action_71_persistence_write_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_71_persistence_write_71__linear__method:n19kbi:seedasync__action_73_seedasync_repository_write_73_10__linear",
          "from": "method:n19kbi:seedasync__action_71_persistence_write_71__linear",
          "to": "method:n19kbi:seedasync__action_73_seedasync_repository_write_73_10__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__action_73_seedasync_repository_write_73_10__linear__method:n19kbi:seedasync__action_74_seedasync_await_74_11__await",
          "from": "method:n19kbi:seedasync__action_73_seedasync_repository_write_73_10__linear",
          "to": "method:n19kbi:seedasync__action_74_seedasync_await_74_11__await",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_74_seedasync_await_74_11__await__method:n19kbi:seedasync__action_76_seedasync_await_76_12__await",
          "from": "method:n19kbi:seedasync__action_74_seedasync_await_74_11__await",
          "to": "method:n19kbi:seedasync__action_76_seedasync_await_76_12__await",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_76_seedasync_await_76_12__await__method:n19kbi:seedasync__action_76_persistence_write_76__linear",
          "from": "method:n19kbi:seedasync__action_76_seedasync_await_76_12__await",
          "to": "method:n19kbi:seedasync__action_76_persistence_write_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_76_persistence_write_76__linear__method:n19kbi:seedasync__action_77_seedasync_repository_write_77_13__linear",
          "from": "method:n19kbi:seedasync__action_76_persistence_write_76__linear",
          "to": "method:n19kbi:seedasync__action_77_seedasync_repository_write_77_13__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__action_77_seedasync_repository_write_77_13__linear__method:n19kbi:seedasync__action_78_seedasync_await_78_14__await",
          "from": "method:n19kbi:seedasync__action_77_seedasync_repository_write_77_13__linear",
          "to": "method:n19kbi:seedasync__action_78_seedasync_await_78_14__await",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_78_seedasync_await_78_14__await__method:n19kbi:seedasync__action_83_seedasync_await_83_15__await",
          "from": "method:n19kbi:seedasync__action_78_seedasync_await_78_14__await",
          "to": "method:n19kbi:seedasync__action_83_seedasync_await_83_15__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_83_seedasync_await_83_15__await__method:n19kbi:seedasync__action_83_persistence_read_write_83__linear",
          "from": "method:n19kbi:seedasync__action_83_seedasync_await_83_15__await",
          "to": "method:n19kbi:seedasync__action_83_persistence_read_write_83__linear",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_83_persistence_read_write_83__linear__method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition",
          "from": "method:n19kbi:seedasync__action_83_persistence_read_write_83__linear",
          "to": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition__method:n19kbi:seedasync__action_84_seedasync_branch_84_16__true",
          "from": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition",
          "to": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__true",
          "kind": "condition-true",
          "label": "true",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition__method:n19kbi:seedasync__action_84_seedasync_branch_84_16__false",
          "from": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__condition",
          "to": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__false",
          "kind": "condition-false",
          "label": "false",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__true__method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "from": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__true",
          "to": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__false__method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "from": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__false",
          "to": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge__call_method:n19kbi:seedasync__call_86_Author_ctor_entity_creation_",
          "from": "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
          "to": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation_",
          "kind": "call",
          "label": "instantiates sample author 'Giorgio Vasari' if missing",
          "line": 86,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation___method:n19kbi:seedasync__action_87_seedasync_repository_write_87_17__linear",
          "from": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation_",
          "to": "method:n19kbi:seedasync__action_87_seedasync_repository_write_87_17__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__action_87_seedasync_repository_write_87_17__linear__method:n19kbi:seedasync__action_88_seedasync_await_88_18__await",
          "from": "method:n19kbi:seedasync__action_87_seedasync_repository_write_87_17__linear",
          "to": "method:n19kbi:seedasync__action_88_seedasync_await_88_18__await",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_88_seedasync_await_88_18__await__method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition",
          "from": "method:n19kbi:seedasync__action_88_seedasync_await_88_18__await",
          "to": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition__method:n19kbi:seedasync__action_92_seedasync_branch_92_19__true",
          "from": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition",
          "to": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__true",
          "kind": "condition-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition__method:n19kbi:seedasync__action_92_seedasync_branch_92_19__false",
          "from": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__condition",
          "to": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__false",
          "kind": "condition-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__true__method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "from": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__true",
          "to": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__false__method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "from": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__false",
          "to": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.78
        },
        {
          "id": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge__method:n19kbi:seedasync__action_92_persistence_read_write_92__linear",
          "from": "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
          "to": "method:n19kbi:seedasync__action_92_persistence_read_write_92__linear",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_92_persistence_read_write_92__linear__method:n19kbi:seedasync__action_94_seedasync_repository_write_94_20__linear",
          "from": "method:n19kbi:seedasync__action_92_persistence_read_write_92__linear",
          "to": "method:n19kbi:seedasync__action_94_seedasync_repository_write_94_20__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__action_94_seedasync_repository_write_94_20__linear__call_method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation_",
          "from": "method:n19kbi:seedasync__action_94_seedasync_repository_write_94_20__linear",
          "to": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation_",
          "kind": "call",
          "label": "creates sample Ebook for admin user with metadata and file path",
          "line": 94,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation___method:n19kbi:seedasync__action_105_seedasync_await_105_21__await",
          "from": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation_",
          "to": "method:n19kbi:seedasync__action_105_seedasync_await_105_21__await",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.81
        },
        {
          "id": "method:n19kbi:seedasync__action_105_seedasync_await_105_21__await__method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition",
          "from": "method:n19kbi:seedasync__action_105_seedasync_await_105_21__await",
          "to": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition",
          "kind": "fallback",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition__method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__true",
          "from": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition",
          "to": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition__method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__false",
          "from": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__condition",
          "to": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__true__method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "from": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__true",
          "to": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__false__method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "from": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__false",
          "to": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.84
        },
        {
          "id": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge__method:n19kbi:seedasync__action_114_error_handling_114__linear",
          "from": "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge",
          "to": "method:n19kbi:seedasync__action_114_error_handling_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n19kbi:seedasync__action_114_error_handling_114__linear__method:n19kbi:seedasync__action_114_seedasync_catch_114_23__catch",
          "from": "method:n19kbi:seedasync__action_114_error_handling_114__linear",
          "to": "method:n19kbi:seedasync__action_114_seedasync_catch_114_23__catch",
          "kind": "exception",
          "line": 114,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.86
        },
        {
          "id": "method:n19kbi:seedasync__action_114_seedasync_catch_114_23__catch__implicit_return",
          "from": "method:n19kbi:seedasync__action_114_seedasync_catch_114_23__catch",
          "to": "method:n19kbi:seedasync__implicit_return",
          "kind": "return",
          "line": 118,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties___jump_NexusReader_Domain_Entities_SubscriptionPlan_cs_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "fromNodeId": "method:n19kbi:seedasync__call_30_FreeId_FreeName_ProId_ProName_EnterpriseId_EnterpriseName_static_properties_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain/Entities/SubscriptionPlan.cs",
          "targetHint": "FreeId / FreeName / ProId / ProName / EnterpriseId / EnterpriseName (static properties)",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "reason": "Call target FreeId / FreeName / ProId / ProName / EnterpriseId / EnterpriseName (static properties) in NexusReader.Domain/Entities/SubscriptionPlan.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation___jump_NexusReader_Domain_Entities_NexusUser_cs_NexusUser_ctor_entity_creation_",
          "fromNodeId": "method:n19kbi:seedasync__call_58_NexusUser_ctor_entity_creation_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain/Entities/NexusUser.cs",
          "targetHint": "NexusUser .ctor (entity creation)",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "reason": "Call target NexusUser .ctor (entity creation) in NexusReader.Domain/Entities/NexusUser.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation___jump_NexusReader_Domain_Entities_Author_cs_Author_ctor_entity_creation_",
          "fromNodeId": "method:n19kbi:seedasync__call_86_Author_ctor_entity_creation_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain/Entities/Author.cs",
          "targetHint": "Author .ctor (entity creation)",
          "line": 86,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "reason": "Call target Author .ctor (entity creation) in NexusReader.Domain/Entities/Author.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation___jump_NexusReader_Domain_Entities_Ebook_cs_Ebook_ctor_entity_creation_",
          "fromNodeId": "method:n19kbi:seedasync__call_94_Ebook_ctor_entity_creation_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain/Entities/Ebook.cs",
          "targetHint": "Ebook .ctor (entity creation)",
          "line": 94,
          "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs",
          "reason": "Call target Ebook .ctor (entity creation) in NexusReader.Domain/Entities/Ebook.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:n19kbi:seedasync__action_40_loop_40__loop_body__method:n19kbi:seedasync__action_40_loop_40__loop_entry",
        "method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_body__method:n19kbi:seedasync__action_40_seedasync_loop_40_4__loop_entry"
      ],
      "mergeNodeIds": [
        "method:n19kbi:seedasync__action_26_guard_clause_26__merge",
        "method:n19kbi:seedasync__action_26_seedasync_branch_26_2__merge",
        "method:n19kbi:seedasync__action_43_seedasync_branch_43_5__merge",
        "method:n19kbi:seedasync__action_56_seedasync_branch_56_9__merge",
        "method:n19kbi:seedasync__action_56_branch_56__merge",
        "method:n19kbi:seedasync__action_84_seedasync_branch_84_16__merge",
        "method:n19kbi:seedasync__action_92_seedasync_branch_92_19__merge",
        "method:n19kbi:seedasync__action_109_seedasync_fallback_109_22__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 14,
        "end": 118
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/DbInitializer.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method SeedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8mq94d:up__fragment",
      "ownerFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "ownerSymbolId": "method:8mq94d:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:8mq94d:up__entry",
      "exitNodeIds": [
        "method:8mq94d:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8mq94d:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 11,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.99,
          "detail": "Applies the migration: adds a non-nullable boolean column 'IsReadyForReading' with default false to the 'Ebooks' table."
        },
        {
          "id": "method:8mq94d:up__action_13_schema_change_13__linear",
          "kind": "statement",
          "label": "AddColumn IsReadyForReading",
          "line": 13,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<bool>(name: \"IsReadyForReading\", table: \"Ebooks\", type: \"boolean\", nullable: false, defaultValue: false)"
        },
        {
          "id": "method:8mq94d:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8mq94d:up__entry__method:8mq94d:up__action_13_schema_change_13__linear",
          "from": "method:8mq94d:up__entry",
          "to": "method:8mq94d:up__action_13_schema_change_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8mq94d:up__action_13_schema_change_13__linear__implicit_return",
          "from": "method:8mq94d:up__action_13_schema_change_13__linear",
          "to": "method:8mq94d:up__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:y8prsw:down__fragment",
      "ownerFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "ownerSymbolId": "method:y8prsw:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:y8prsw:down__entry",
      "exitNodeIds": [
        "method:y8prsw:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:y8prsw:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.99,
          "detail": "Rolls back the migration: removes the 'IsReadyForReading' column from the 'Ebooks' table."
        },
        {
          "id": "method:y8prsw:down__action_24_schema_change_24__linear",
          "kind": "statement",
          "label": "DropColumn IsReadyForReading",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"IsReadyForReading\", table: \"Ebooks\")"
        },
        {
          "id": "method:y8prsw:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:y8prsw:down__entry__method:y8prsw:down__action_24_schema_change_24__linear",
          "from": "method:y8prsw:down__entry",
          "to": "method:y8prsw:down__action_24_schema_change_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.7
        },
        {
          "id": "method:y8prsw:down__action_24_schema_change_24__linear__implicit_return",
          "from": "method:y8prsw:down__action_24_schema_change_24__linear",
          "to": "method:y8prsw:down__implicit_return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 22,
        "end": 26
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16i3kbl:buildtargetmodel__fragment",
      "ownerFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "ownerSymbolId": "method:16i3kbl:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:16i3kbl:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:16i3kbl:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16i3kbl:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model snapshot for this migration: configures Postgres extensions, identity defaults, all entity types, properties, indexes, foreign keys, navigations and seed data."
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_22_pragma_22__linear",
          "kind": "statement",
          "label": "Suppress obsolete warnings for generated code",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning disable 612, 618 (and restored at end)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "HasAnnotation(\"ProductVersion\", \"10.0.7\") and HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_27_extension_27__linear",
          "kind": "statement",
          "label": "Enable Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_28_identity_config_28__linear",
          "kind": "statement",
          "label": "Configure identity/serial defaults",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "statement",
          "label": "Defines AspNet Identity role and related identity tables",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines IdentityRole, IdentityRoleClaim, IdentityUserClaim, IdentityUserLogin, IdentityUserRole, IdentityUserToken with keys, indexes and tables (AspNetRoles, AspNetRoleClaims, ...)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_49_index_49__linear",
          "kind": "statement",
          "label": "Creates many indexes",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Examples: RoleNameIndex, UserNameIndex, EmailIndex, indexes on TenantId, UserId, SourceId, ContentHash unique, etc."
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_162_entity_definition_162__linear",
          "kind": "statement",
          "label": "Defines Author entity",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Author.Id (int, identity), Name required max 255, table Authors"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_180_entity_definition_180__linear",
          "kind": "statement",
          "label": "Defines Ebook entity including IsReadyForReading",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.Id (Guid), FilePath required, IsReadyForReading (boolean) added/configured, Title, TenantId, UserId, indexes on AuthorId/TenantId/UserId, table Ebooks"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_240_entity_definition_240__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnit including vector column",
          "line": 240,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit.Id, Content, SourceId, TenantId, Vector column type vector(768), Version etc."
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_269_column_type_269__linear",
          "kind": "statement",
          "label": "Vector column usage",
          "line": 269,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit.Vector configured as vector(768); SemanticKnowledgeCache.Vector configured as vector(1536) (line 485)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_286_entity_definition_286__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnitLink entity",
          "line": 286,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Relationships between KnowledgeUnits with SourceUnitId and TargetUnitId"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_318_entity_definition_318__linear",
          "kind": "statement",
          "label": "Defines NexusUser and identity-related properties",
          "line": 318,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "NexusUser fields including subscription, tenant, last read info, indexes for NormalizedEmail/NormalizedUserName/SubscriptionPlanId/TenantId"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_416_entity_definition_416__linear",
          "kind": "statement",
          "label": "Defines QuizResult entity",
          "line": 416,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "QuizResult fields and indexes on TenantId and UserId"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_452_entity_definition_452__linear",
          "kind": "statement",
          "label": "Defines SemanticKnowledgeCache with vector(1536)",
          "line": 452,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "SemanticKnowledgeCache primary key ContentHash, Vector column vector(1536), TenantId, ModelId and unique index on ContentHash"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_498_entity_definition_498__linear",
          "kind": "statement",
          "label": "Defines SubscriptionPlan with seeded rows",
          "line": 498,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "SubscriptionPlans table defined and HasData seeds 4 plans (Free, Basic, Pro, Enterprise) with ids and token limits"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_532_data_seed_532__linear",
          "kind": "statement",
          "label": "Seed subscription plans",
          "line": 532,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasData(...) seeds Id 1..4 with PlanName, AITokenLimit, MonthlyPrice, StripeProductId"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_622_relationship_622__linear",
          "kind": "statement",
          "label": "Configures foreign keys and cascading behaviors",
          "line": 622,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook -> Author (Restrict), Ebook -> NexusUser (Cascade); KnowledgeUnitLink -> KnowledgeUnit (Cascade) for source/target; NexusUser -> SubscriptionPlan (Restrict); QuizResult -> NexusUser (Cascade)"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_636_navigation_636__linear",
          "kind": "statement",
          "label": "Configures navigations",
          "line": 636,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "Navigation properties wired for Author, User, IncomingLinks, OutgoingLinks, Ebooks, QuizResults"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_700_pragma_700__linear",
          "kind": "statement",
          "label": "Restore warnings",
          "line": 700,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning restore 612, 618"
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 701,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16i3kbl:buildtargetmodel__entry__method:16i3kbl:buildtargetmodel__action_22_pragma_22__linear",
          "from": "method:16i3kbl:buildtargetmodel__entry",
          "to": "method:16i3kbl:buildtargetmodel__action_22_pragma_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_22_pragma_22__linear__method:16i3kbl:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_22_pragma_22__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_23_annotation_23__linear__method:16i3kbl:buildtargetmodel__action_27_extension_27__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_27_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_27_extension_27__linear__method:16i3kbl:buildtargetmodel__action_28_identity_config_28__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_27_extension_27__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_28_identity_config_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_28_identity_config_28__linear__method:16i3kbl:buildtargetmodel__action_30_entity_definition_30__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_28_identity_config_28__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_30_entity_definition_30__linear__method:16i3kbl:buildtargetmodel__action_49_index_49__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_30_entity_definition_30__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_49_index_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_49_index_49__linear__method:16i3kbl:buildtargetmodel__action_162_entity_definition_162__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_49_index_49__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_162_entity_definition_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_162_entity_definition_162__linear__method:16i3kbl:buildtargetmodel__action_180_entity_definition_180__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_162_entity_definition_162__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_180_entity_definition_180__linear",
          "kind": "next",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_180_entity_definition_180__linear__method:16i3kbl:buildtargetmodel__action_240_entity_definition_240__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_180_entity_definition_180__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_240_entity_definition_240__linear",
          "kind": "next",
          "line": 240,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_240_entity_definition_240__linear__method:16i3kbl:buildtargetmodel__action_269_column_type_269__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_240_entity_definition_240__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_269_column_type_269__linear",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_269_column_type_269__linear__method:16i3kbl:buildtargetmodel__action_286_entity_definition_286__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_269_column_type_269__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_286_entity_definition_286__linear",
          "kind": "next",
          "line": 286,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_286_entity_definition_286__linear__method:16i3kbl:buildtargetmodel__action_318_entity_definition_318__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_286_entity_definition_286__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_318_entity_definition_318__linear",
          "kind": "next",
          "line": 318,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_318_entity_definition_318__linear__method:16i3kbl:buildtargetmodel__action_416_entity_definition_416__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_318_entity_definition_318__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_416_entity_definition_416__linear",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_416_entity_definition_416__linear__method:16i3kbl:buildtargetmodel__action_452_entity_definition_452__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_416_entity_definition_416__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_452_entity_definition_452__linear",
          "kind": "next",
          "line": 452,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_452_entity_definition_452__linear__method:16i3kbl:buildtargetmodel__action_498_entity_definition_498__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_452_entity_definition_452__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_498_entity_definition_498__linear",
          "kind": "next",
          "line": 498,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_498_entity_definition_498__linear__method:16i3kbl:buildtargetmodel__action_532_data_seed_532__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_498_entity_definition_498__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_532_data_seed_532__linear",
          "kind": "next",
          "line": 532,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_532_data_seed_532__linear__method:16i3kbl:buildtargetmodel__action_622_relationship_622__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_532_data_seed_532__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_622_relationship_622__linear",
          "kind": "next",
          "line": 622,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_622_relationship_622__linear__method:16i3kbl:buildtargetmodel__action_636_navigation_636__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_622_relationship_622__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_636_navigation_636__linear",
          "kind": "next",
          "line": 636,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_636_navigation_636__linear__method:16i3kbl:buildtargetmodel__action_700_pragma_700__linear",
          "from": "method:16i3kbl:buildtargetmodel__action_636_navigation_636__linear",
          "to": "method:16i3kbl:buildtargetmodel__action_700_pragma_700__linear",
          "kind": "next",
          "line": 700,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16i3kbl:buildtargetmodel__action_700_pragma_700__linear__implicit_return",
          "from": "method:16i3kbl:buildtargetmodel__action_700_pragma_700__linear",
          "to": "method:16i3kbl:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 701,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 701
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cdxwj:up__fragment",
      "ownerFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "ownerSymbolId": "method:cdxwj:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:cdxwj:up__entry",
      "exitNodeIds": [
        "method:cdxwj:up__action_41_return_41__return"
      ],
      "nodes": [
        {
          "id": "method:cdxwj:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 12,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.99,
          "detail": "Apply schema changes: remove SourceId column and index from KnowledgeUnits, add non-nullable EbookId Guid column with default, create index on EbookId, and add FK to Ebooks with cascade delete."
        },
        {
          "id": "method:cdxwj:up__action_14_schema_change_14__linear",
          "kind": "statement",
          "label": "Drop index IX_KnowledgeUnits_SourceId",
          "line": 14,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\")"
        },
        {
          "id": "method:cdxwj:up__action_18_schema_change_18__linear",
          "kind": "statement",
          "label": "Drop column SourceId from KnowledgeUnits",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"SourceId\", table: \"KnowledgeUnits\")"
        },
        {
          "id": "method:cdxwj:up__action_22_schema_change_22__linear",
          "kind": "statement",
          "label": "Add column EbookId (uuid, not nullable) with default Guid.Empty",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<Guid>(name: \"EbookId\", table: \"KnowledgeUnits\", type: \"uuid\", nullable: false, defaultValue: Guid.Empty)"
        },
        {
          "id": "method:cdxwj:up__action_29_schema_change_29__linear",
          "kind": "statement",
          "label": "Create index IX_KnowledgeUnits_EbookId",
          "line": 29,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\")"
        },
        {
          "id": "method:cdxwj:up__action_34_schema_change_34__linear",
          "kind": "statement",
          "label": "Add foreign key FK_KnowledgeUnits_Ebooks_EbookId with cascade delete",
          "line": 34,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\", principalTable: \"Ebooks\", principalColumn: \"Id\", onDelete: ReferentialAction.Cascade)"
        },
        {
          "id": "method:cdxwj:up__action_41_return_41__return",
          "kind": "return",
          "label": "Complete Up migration",
          "line": 41,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "Method returns after applying schema changes"
        }
      ],
      "edges": [
        {
          "id": "method:cdxwj:up__entry__method:cdxwj:up__action_14_schema_change_14__linear",
          "from": "method:cdxwj:up__entry",
          "to": "method:cdxwj:up__action_14_schema_change_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cdxwj:up__action_14_schema_change_14__linear__method:cdxwj:up__action_18_schema_change_18__linear",
          "from": "method:cdxwj:up__action_14_schema_change_14__linear",
          "to": "method:cdxwj:up__action_18_schema_change_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cdxwj:up__action_18_schema_change_18__linear__method:cdxwj:up__action_22_schema_change_22__linear",
          "from": "method:cdxwj:up__action_18_schema_change_18__linear",
          "to": "method:cdxwj:up__action_22_schema_change_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cdxwj:up__action_22_schema_change_22__linear__method:cdxwj:up__action_29_schema_change_29__linear",
          "from": "method:cdxwj:up__action_22_schema_change_22__linear",
          "to": "method:cdxwj:up__action_29_schema_change_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cdxwj:up__action_29_schema_change_29__linear__method:cdxwj:up__action_34_schema_change_34__linear",
          "from": "method:cdxwj:up__action_29_schema_change_29__linear",
          "to": "method:cdxwj:up__action_34_schema_change_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cdxwj:up__action_34_schema_change_34__linear__method:cdxwj:up__action_41_return_41__return",
          "from": "method:cdxwj:up__action_34_schema_change_34__linear",
          "to": "method:cdxwj:up__action_41_return_41__return",
          "kind": "return",
          "line": 41,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 12,
        "end": 41
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ste7vn:down__fragment",
      "ownerFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "ownerSymbolId": "method:1ste7vn:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:1ste7vn:down__entry",
      "exitNodeIds": [
        "method:1ste7vn:down__action_70_return_70__return"
      ],
      "nodes": [
        {
          "id": "method:1ste7vn:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 44,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.99,
          "detail": "Revert schema changes applied in Up: remove FK and index on EbookId, drop EbookId column, re-add SourceId string column with constraints and recreate its index."
        },
        {
          "id": "method:1ste7vn:down__action_46_schema_change_46__linear",
          "kind": "statement",
          "label": "Drop foreign key FK_KnowledgeUnits_Ebooks_EbookId",
          "line": 46,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\")"
        },
        {
          "id": "method:1ste7vn:down__action_50_schema_change_50__linear",
          "kind": "statement",
          "label": "Drop index IX_KnowledgeUnits_EbookId",
          "line": 50,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\")"
        },
        {
          "id": "method:1ste7vn:down__action_54_schema_change_54__linear",
          "kind": "statement",
          "label": "Drop column EbookId from KnowledgeUnits",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"EbookId\", table: \"KnowledgeUnits\")"
        },
        {
          "id": "method:1ste7vn:down__action_58_schema_change_58__linear",
          "kind": "statement",
          "label": "Add column SourceId (string, maxLength:128) not nullable with empty default",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<string>(name: \"SourceId\", table: \"KnowledgeUnits\", type: \"character varying(128)\", maxLength: 128, nullable: false, defaultValue: \"\")"
        },
        {
          "id": "method:1ste7vn:down__action_66_schema_change_66__linear",
          "kind": "statement",
          "label": "Create index IX_KnowledgeUnits_SourceId",
          "line": 66,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\", column: \"SourceId\")"
        },
        {
          "id": "method:1ste7vn:down__action_70_return_70__return",
          "kind": "return",
          "label": "Complete Down migration",
          "line": 70,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7,
          "detail": "Method returns after reverting schema changes"
        }
      ],
      "edges": [
        {
          "id": "method:1ste7vn:down__entry__method:1ste7vn:down__action_46_schema_change_46__linear",
          "from": "method:1ste7vn:down__entry",
          "to": "method:1ste7vn:down__action_46_schema_change_46__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ste7vn:down__action_46_schema_change_46__linear__method:1ste7vn:down__action_50_schema_change_50__linear",
          "from": "method:1ste7vn:down__action_46_schema_change_46__linear",
          "to": "method:1ste7vn:down__action_50_schema_change_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ste7vn:down__action_50_schema_change_50__linear__method:1ste7vn:down__action_54_schema_change_54__linear",
          "from": "method:1ste7vn:down__action_50_schema_change_50__linear",
          "to": "method:1ste7vn:down__action_54_schema_change_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ste7vn:down__action_54_schema_change_54__linear__method:1ste7vn:down__action_58_schema_change_58__linear",
          "from": "method:1ste7vn:down__action_54_schema_change_54__linear",
          "to": "method:1ste7vn:down__action_58_schema_change_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ste7vn:down__action_58_schema_change_58__linear__method:1ste7vn:down__action_66_schema_change_66__linear",
          "from": "method:1ste7vn:down__action_58_schema_change_58__linear",
          "to": "method:1ste7vn:down__action_66_schema_change_66__linear",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ste7vn:down__action_66_schema_change_66__linear__method:1ste7vn:down__action_70_return_70__return",
          "from": "method:1ste7vn:down__action_66_schema_change_66__linear",
          "to": "method:1ste7vn:down__action_70_return_70__return",
          "kind": "return",
          "line": 70,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 44,
        "end": 70
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs",
          "line": 44,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16euo54:buildtargetmodel__fragment",
      "ownerFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "ownerSymbolId": "method:16euo54:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:16euo54:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:16euo54:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16euo54:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model snapshot for this migration: annotations, DB extensions, entities, properties, indices, relationships and seed data."
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_23_model_annotation_23__linear",
          "kind": "statement",
          "label": "Sets product version and max identifier length",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_27_db_extension_27__linear",
          "kind": "statement",
          "label": "Enables Postgres 'vector' extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_28_db_configuration_28__linear",
          "kind": "statement",
          "label": "Configures identity default columns",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "statement",
          "label": "Defines IdentityRole entity mapping (AspNetRoles)",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines properties Id, ConcurrencyStamp, Name, NormalizedName; key on Id; unique index on NormalizedName"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_49_index_49__linear",
          "kind": "statement",
          "label": "Various indices and uniqueness constraints",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Examples: RoleNameIndex on IdentityRole.NormalizedName (unique); PlanName unique index on SubscriptionPlans (line 525); unique index on SemanticKnowledgeCache.ContentHash (line 488)"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_56_entity_definition_56__linear",
          "kind": "statement",
          "label": "Defines Identity role/claim/login/user tables",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Maps IdentityRoleClaim, IdentityUserClaim, IdentityUserLogin, IdentityUserRole, IdentityUserToken and sets keys/indices/tables"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_162_entity_definition_162__linear",
          "kind": "statement",
          "label": "Defines Author",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Author.Id (int identity), Name required string, table Authors"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_180_entity_definition_180__linear",
          "kind": "statement",
          "label": "Defines Ebook",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.Id (Guid identity), fields (AddedDate, AuthorId, CoverUrl, FilePath required, IsReadyForReading, LastChapter, LastChapterIndex, LastReadDate, Progress, TenantId required, Title required, UserId required); indices on AuthorId, TenantId, UserId; table Ebooks"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_240_entity_definition_240__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnit",
          "line": 240,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit.Id (string, max 128), Content required, CreatedAt, EbookId (uuid), MetadataJson, TenantId required, Type (int), Vector of size 768, Version required; index on EbookId and TenantId; table KnowledgeUnits"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_253_property_253__linear",
          "kind": "statement",
          "label": "KnowledgeUnit.EbookId property typed as Guid",
          "line": 253,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Property<Guid>(\"EbookId\").HasColumnType(\"uuid\")"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_284_entity_definition_284__linear",
          "kind": "statement",
          "label": "Defines KnowledgeUnitLink",
          "line": 284,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Link Id (int identity), RelationType, SourceUnitId, TargetUnitId; indices on SourceUnitId and TargetUnitId; table KnowledgeUnitLinks"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_316_entity_definition_316__linear",
          "kind": "statement",
          "label": "Defines NexusUser (AspNetUsers) with subscription FK",
          "line": 316,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Many identity and profile fields, SubscriptionPlanId with default value 1; indices on NormalizedEmail, NormalizedUserName (unique), SubscriptionPlanId, TenantId"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_414_entity_definition_414__linear",
          "kind": "statement",
          "label": "Defines QuizResult",
          "line": 414,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "QuizResult.Id (Guid), CompletedDate, Score, TenantId, Topic, TotalQuestions, UserId; indices on TenantId and UserId"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_451_entity_definition_451__linear",
          "kind": "statement",
          "label": "Defines SemanticKnowledgeCache with vector(1536)",
          "line": 451,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Primary key ContentHash (max 128), CreatedAt, JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector column of vector(1536), unique index on ContentHash"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_496_entity_definition_496__linear",
          "kind": "statement",
          "label": "Defines SubscriptionPlan and seeds data",
          "line": 496,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "SubscriptionPlan.Id (int identity), AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName (unique), StripeProductId; seeds 4 plan rows (Free, Basic, Pro, Enterprise)"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_530_seed_data_530__linear",
          "kind": "statement",
          "label": "Seeds SubscriptionPlan rows",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasData(...) adds four SubscriptionPlan entries with Ids 1..4 and predefined AIToken limits/prices/StripeProductId"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_620_relationship_620__linear",
          "kind": "statement",
          "label": "Ebook -> Author and Ebook -> NexusUser relationships",
          "line": 620,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Ebook.HasOne(Author).WithMany(Ebooks).HasForeignKey(AuthorId).OnDelete(Restrict).Required; Ebook.HasOne(User).WithMany(Ebooks).HasForeignKey(UserId).OnDelete(Cascade).Required"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_634_navigation_634__linear",
          "kind": "statement",
          "label": "Registers navigation properties for many entities",
          "line": 634,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "Adds Navigation for Author, User, Ebook, IncomingLinks/OutgoingLinks, Ebooks, QuizResults etc."
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_639_relationship_639__linear",
          "kind": "statement",
          "label": "KnowledgeUnit -> Ebook relationship",
          "line": 639,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "KnowledgeUnit.HasOne(Ebook).WithMany().HasForeignKey(EbookId).OnDelete(Cascade).IsRequired"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_650_relationship_650__linear",
          "kind": "statement",
          "label": "KnowledgeUnitLink -> KnowledgeUnit (source/target) relationships",
          "line": 650,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "SourceUnit and TargetUnit FKs to KnowledgeUnit with Cascade delete and required"
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_669_relationship_669__linear",
          "kind": "statement",
          "label": "NexusUser -> SubscriptionPlan relationship",
          "line": 669,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7,
          "detail": "NexusUser.HasOne(SubscriptionPlan).WithMany().HasForeignKey(SubscriptionPlanId).OnDelete(Restrict).IsRequired"
        },
        {
          "id": "method:16euo54:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 710,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16euo54:buildtargetmodel__entry__method:16euo54:buildtargetmodel__action_23_model_annotation_23__linear",
          "from": "method:16euo54:buildtargetmodel__entry",
          "to": "method:16euo54:buildtargetmodel__action_23_model_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_23_model_annotation_23__linear__method:16euo54:buildtargetmodel__action_27_db_extension_27__linear",
          "from": "method:16euo54:buildtargetmodel__action_23_model_annotation_23__linear",
          "to": "method:16euo54:buildtargetmodel__action_27_db_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_27_db_extension_27__linear__method:16euo54:buildtargetmodel__action_28_db_configuration_28__linear",
          "from": "method:16euo54:buildtargetmodel__action_27_db_extension_27__linear",
          "to": "method:16euo54:buildtargetmodel__action_28_db_configuration_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_28_db_configuration_28__linear__method:16euo54:buildtargetmodel__action_30_entity_definition_30__linear",
          "from": "method:16euo54:buildtargetmodel__action_28_db_configuration_28__linear",
          "to": "method:16euo54:buildtargetmodel__action_30_entity_definition_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_30_entity_definition_30__linear__method:16euo54:buildtargetmodel__action_49_index_49__linear",
          "from": "method:16euo54:buildtargetmodel__action_30_entity_definition_30__linear",
          "to": "method:16euo54:buildtargetmodel__action_49_index_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_49_index_49__linear__method:16euo54:buildtargetmodel__action_56_entity_definition_56__linear",
          "from": "method:16euo54:buildtargetmodel__action_49_index_49__linear",
          "to": "method:16euo54:buildtargetmodel__action_56_entity_definition_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_56_entity_definition_56__linear__method:16euo54:buildtargetmodel__action_162_entity_definition_162__linear",
          "from": "method:16euo54:buildtargetmodel__action_56_entity_definition_56__linear",
          "to": "method:16euo54:buildtargetmodel__action_162_entity_definition_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_162_entity_definition_162__linear__method:16euo54:buildtargetmodel__action_180_entity_definition_180__linear",
          "from": "method:16euo54:buildtargetmodel__action_162_entity_definition_162__linear",
          "to": "method:16euo54:buildtargetmodel__action_180_entity_definition_180__linear",
          "kind": "next",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_180_entity_definition_180__linear__method:16euo54:buildtargetmodel__action_240_entity_definition_240__linear",
          "from": "method:16euo54:buildtargetmodel__action_180_entity_definition_180__linear",
          "to": "method:16euo54:buildtargetmodel__action_240_entity_definition_240__linear",
          "kind": "next",
          "line": 240,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_240_entity_definition_240__linear__method:16euo54:buildtargetmodel__action_253_property_253__linear",
          "from": "method:16euo54:buildtargetmodel__action_240_entity_definition_240__linear",
          "to": "method:16euo54:buildtargetmodel__action_253_property_253__linear",
          "kind": "next",
          "line": 253,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_253_property_253__linear__method:16euo54:buildtargetmodel__action_284_entity_definition_284__linear",
          "from": "method:16euo54:buildtargetmodel__action_253_property_253__linear",
          "to": "method:16euo54:buildtargetmodel__action_284_entity_definition_284__linear",
          "kind": "next",
          "line": 284,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_284_entity_definition_284__linear__method:16euo54:buildtargetmodel__action_316_entity_definition_316__linear",
          "from": "method:16euo54:buildtargetmodel__action_284_entity_definition_284__linear",
          "to": "method:16euo54:buildtargetmodel__action_316_entity_definition_316__linear",
          "kind": "next",
          "line": 316,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_316_entity_definition_316__linear__method:16euo54:buildtargetmodel__action_414_entity_definition_414__linear",
          "from": "method:16euo54:buildtargetmodel__action_316_entity_definition_316__linear",
          "to": "method:16euo54:buildtargetmodel__action_414_entity_definition_414__linear",
          "kind": "next",
          "line": 414,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_414_entity_definition_414__linear__method:16euo54:buildtargetmodel__action_451_entity_definition_451__linear",
          "from": "method:16euo54:buildtargetmodel__action_414_entity_definition_414__linear",
          "to": "method:16euo54:buildtargetmodel__action_451_entity_definition_451__linear",
          "kind": "next",
          "line": 451,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_451_entity_definition_451__linear__method:16euo54:buildtargetmodel__action_496_entity_definition_496__linear",
          "from": "method:16euo54:buildtargetmodel__action_451_entity_definition_451__linear",
          "to": "method:16euo54:buildtargetmodel__action_496_entity_definition_496__linear",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_496_entity_definition_496__linear__method:16euo54:buildtargetmodel__action_530_seed_data_530__linear",
          "from": "method:16euo54:buildtargetmodel__action_496_entity_definition_496__linear",
          "to": "method:16euo54:buildtargetmodel__action_530_seed_data_530__linear",
          "kind": "next",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_530_seed_data_530__linear__method:16euo54:buildtargetmodel__action_620_relationship_620__linear",
          "from": "method:16euo54:buildtargetmodel__action_530_seed_data_530__linear",
          "to": "method:16euo54:buildtargetmodel__action_620_relationship_620__linear",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_620_relationship_620__linear__method:16euo54:buildtargetmodel__action_634_navigation_634__linear",
          "from": "method:16euo54:buildtargetmodel__action_620_relationship_620__linear",
          "to": "method:16euo54:buildtargetmodel__action_634_navigation_634__linear",
          "kind": "next",
          "line": 634,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_634_navigation_634__linear__method:16euo54:buildtargetmodel__action_639_relationship_639__linear",
          "from": "method:16euo54:buildtargetmodel__action_634_navigation_634__linear",
          "to": "method:16euo54:buildtargetmodel__action_639_relationship_639__linear",
          "kind": "next",
          "line": 639,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_639_relationship_639__linear__method:16euo54:buildtargetmodel__action_650_relationship_650__linear",
          "from": "method:16euo54:buildtargetmodel__action_639_relationship_639__linear",
          "to": "method:16euo54:buildtargetmodel__action_650_relationship_650__linear",
          "kind": "next",
          "line": 650,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_650_relationship_650__linear__method:16euo54:buildtargetmodel__action_669_relationship_669__linear",
          "from": "method:16euo54:buildtargetmodel__action_650_relationship_650__linear",
          "to": "method:16euo54:buildtargetmodel__action_669_relationship_669__linear",
          "kind": "next",
          "line": 669,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16euo54:buildtargetmodel__action_669_relationship_669__linear__implicit_return",
          "from": "method:16euo54:buildtargetmodel__action_669_relationship_669__linear",
          "to": "method:16euo54:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 710,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 710
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jenau5:up__fragment",
      "ownerFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "ownerSymbolId": "method:jenau5:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:jenau5:up__entry",
      "exitNodeIds": [
        "method:jenau5:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:jenau5:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 12,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.99,
          "detail": "Applies the schema change to alter KnowledgeUnits.EbookId to be nullable."
        },
        {
          "id": "method:jenau5:up__action_14_alter_column_14__linear",
          "kind": "statement",
          "label": "Make EbookId nullable on KnowledgeUnits",
          "line": 14,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<Guid>(name: 'EbookId', table: 'KnowledgeUnits', type: 'uuid', nullable: true, oldClrType: typeof(Guid), oldType: 'uuid')"
        },
        {
          "id": "method:jenau5:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:jenau5:up__entry__method:jenau5:up__action_14_alter_column_14__linear",
          "from": "method:jenau5:up__entry",
          "to": "method:jenau5:up__action_14_alter_column_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jenau5:up__action_14_alter_column_14__linear__implicit_return",
          "from": "method:jenau5:up__action_14_alter_column_14__linear",
          "to": "method:jenau5:up__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xywi1n:down__fragment",
      "ownerFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "ownerSymbolId": "method:1xywi1n:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:1xywi1n:down__entry",
      "exitNodeIds": [
        "method:1xywi1n:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1xywi1n:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 24,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.99,
          "detail": "Reverts the schema change by making KnowledgeUnits.EbookId non-nullable and setting a default Guid value."
        },
        {
          "id": "method:1xywi1n:down__action_26_alter_column_26__linear",
          "kind": "statement",
          "label": "Revert EbookId to non-nullable with default",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AlterColumn<Guid>(name: 'EbookId', table: 'KnowledgeUnits', type: 'uuid', nullable: false, defaultValue: new Guid('00000000-0000-0000-0000-000000000000'), oldClrType: typeof(Guid), oldType: 'uuid', oldNullable: true)"
        },
        {
          "id": "method:1xywi1n:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1xywi1n:down__entry__method:1xywi1n:down__action_26_alter_column_26__linear",
          "from": "method:1xywi1n:down__entry",
          "to": "method:1xywi1n:down__action_26_alter_column_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xywi1n:down__action_26_alter_column_26__linear__implicit_return",
          "from": "method:1xywi1n:down__action_26_alter_column_26__linear",
          "to": "method:1xywi1n:down__implicit_return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 24,
        "end": 35
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs",
          "line": 24,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1egmvje:buildtargetmodel__fragment",
      "ownerFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "ownerSymbolId": "method:1egmvje:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:1egmvje:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:1egmvje:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1egmvje:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.99,
          "detail": "Constructs the EF Core model snapshot for this migration: annotations, extensions, entity schemas, relationships, indices and data seeding."
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Set model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_27_enable_extension_27__linear",
          "kind": "statement",
          "label": "Enable Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "kind": "call",
          "label": "NpgsqlModelBuilderExtensions.HasPostgresExtension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88,
          "detail": "modelBuilder, extension name \"vector\""
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_28_configuration_28__linear",
          "kind": "statement",
          "label": "Use identity-by-default columns for Postgres",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "UseIdentityByDefaultColumns(modelBuilder)"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "kind": "call",
          "label": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88,
          "detail": "modelBuilder"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_30_entity_declaration_30__linear",
          "kind": "statement",
          "label": "Define Identity and domain entities schemas",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple modelBuilder.Entity(...) calls configuring properties, keys, indices and tables for IdentityRole, NexusUser, Ebook, KnowledgeUnit, SubscriptionPlan, etc."
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity",
          "kind": "call",
          "label": "ModelBuilder.Entity",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88,
          "detail": "entity type name strings for many domain types (e.g. \"Microsoft.AspNetCore.Identity.IdentityRole\")"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_49_index_creation_49__linear",
          "kind": "statement",
          "label": "Create indices",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple HasIndex(...) calls across entities (e.g. Role.NormalizedName, Ebook.AuthorId, KnowledgeUnit.TenantId)"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_253_property_change_253__linear",
          "kind": "statement",
          "label": "Make KnowledgeUnit.EbookId nullable",
          "line": 253,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "Property<Guid?>(\"EbookId\") declared with column type \"uuid\" (nullable)"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_530_data_seed_530__linear",
          "kind": "statement",
          "label": "Seed SubscriptionPlan table",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "b.HasData(...) seeds 4 plans: Free, Basic, Pro, Enterprise with values and defaults"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData",
          "kind": "call",
          "label": "EntityTypeBuilder.HasData",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88,
          "detail": "seed array for SubscriptionPlans (4 items with Id, AITokenLimit, MonthlyPrice, PlanName, StripeProductId)"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_620_relationship_620__linear",
          "kind": "statement",
          "label": "Configure relationships and delete behaviors",
          "line": 620,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "HasOne/WithMany/HasForeignKey calls configure required/optional FKs and OnDelete behaviors (Cascade, Restrict) for Ebooks, KnowledgeUnits, NexusUser, etc."
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_634_navigation_634__linear",
          "kind": "statement",
          "label": "Define EF navigation properties",
          "line": 634,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7,
          "detail": "b.Navigation(...) calls to surface navigations like Ebook.Author, Ebook.User, KnowledgeUnit.IncomingLinks/OutgoingLinks"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 709,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1egmvje:buildtargetmodel__entry__method:1egmvje:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:1egmvje:buildtargetmodel__entry",
          "to": "method:1egmvje:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_23_annotation_23__linear__method:1egmvje:buildtargetmodel__action_27_enable_extension_27__linear",
          "from": "method:1egmvje:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:1egmvje:buildtargetmodel__action_27_enable_extension_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_27_enable_extension_27__linear__call_method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "from": "method:1egmvje:buildtargetmodel__action_27_enable_extension_27__linear",
          "to": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "kind": "call",
          "label": "modelBuilder, extension name \"vector\"",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension__method:1egmvje:buildtargetmodel__action_28_configuration_28__linear",
          "from": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "to": "method:1egmvje:buildtargetmodel__action_28_configuration_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_28_configuration_28__linear__call_method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "from": "method:1egmvje:buildtargetmodel__action_28_configuration_28__linear",
          "to": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "kind": "call",
          "label": "modelBuilder",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns__method:1egmvje:buildtargetmodel__action_30_entity_declaration_30__linear",
          "from": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "to": "method:1egmvje:buildtargetmodel__action_30_entity_declaration_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_30_entity_declaration_30__linear__call_method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity",
          "from": "method:1egmvje:buildtargetmodel__action_30_entity_declaration_30__linear",
          "to": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity",
          "kind": "call",
          "label": "entity type name strings for many domain types (e.g. \"Microsoft.AspNetCore.Identity.IdentityRole\")",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity__method:1egmvje:buildtargetmodel__action_49_index_creation_49__linear",
          "from": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity",
          "to": "method:1egmvje:buildtargetmodel__action_49_index_creation_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_49_index_creation_49__linear__method:1egmvje:buildtargetmodel__action_253_property_change_253__linear",
          "from": "method:1egmvje:buildtargetmodel__action_49_index_creation_49__linear",
          "to": "method:1egmvje:buildtargetmodel__action_253_property_change_253__linear",
          "kind": "next",
          "line": 253,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_253_property_change_253__linear__method:1egmvje:buildtargetmodel__action_530_data_seed_530__linear",
          "from": "method:1egmvje:buildtargetmodel__action_253_property_change_253__linear",
          "to": "method:1egmvje:buildtargetmodel__action_530_data_seed_530__linear",
          "kind": "next",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_530_data_seed_530__linear__call_method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData",
          "from": "method:1egmvje:buildtargetmodel__action_530_data_seed_530__linear",
          "to": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData",
          "kind": "call",
          "label": "seed array for SubscriptionPlans (4 items with Id, AITokenLimit, MonthlyPrice, PlanName, StripeProductId)",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData__method:1egmvje:buildtargetmodel__action_620_relationship_620__linear",
          "from": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData",
          "to": "method:1egmvje:buildtargetmodel__action_620_relationship_620__linear",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_620_relationship_620__linear__method:1egmvje:buildtargetmodel__action_634_navigation_634__linear",
          "from": "method:1egmvje:buildtargetmodel__action_620_relationship_620__linear",
          "to": "method:1egmvje:buildtargetmodel__action_634_navigation_634__linear",
          "kind": "next",
          "line": 634,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egmvje:buildtargetmodel__action_634_navigation_634__linear__implicit_return",
          "from": "method:1egmvje:buildtargetmodel__action_634_navigation_634__linear",
          "to": "method:1egmvje:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 709,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension__jump_unknown_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "fromNodeId": "method:1egmvje:buildtargetmodel__call_27_NpgsqlModelBuilderExtensions_HasPostgresExtension",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NpgsqlModelBuilderExtensions.HasPostgresExtension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "reason": "Call target NpgsqlModelBuilderExtensions.HasPostgresExtension in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns__jump_unknown_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "fromNodeId": "method:1egmvje:buildtargetmodel__call_28_NpgsqlModelBuilderExtensions_UseIdentityByDefaultColumns",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "reason": "Call target NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity__jump_unknown_ModelBuilder_Entity",
          "fromNodeId": "method:1egmvje:buildtargetmodel__call_30_ModelBuilder_Entity",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ModelBuilder.Entity",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "reason": "Call target ModelBuilder.Entity in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData__jump_unknown_EntityTypeBuilder_HasData",
          "fromNodeId": "method:1egmvje:buildtargetmodel__call_530_EntityTypeBuilder_HasData",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "EntityTypeBuilder.HasData",
          "line": 530,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "reason": "Call target EntityTypeBuilder.HasData in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9199999999999999,
      "lineSpan": {
        "start": 20,
        "end": 709
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:e05nak:up__fragment",
      "ownerFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "ownerSymbolId": "method:e05nak:up",
      "ownerSymbolName": "Up",
      "entryNodeId": "method:e05nak:up__entry",
      "exitNodeIds": [
        "method:e05nak:up__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:e05nak:up__entry",
          "kind": "entry",
          "label": "Up entry",
          "line": 11,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.99,
          "detail": "Apply schema change: add a nullable text 'Description' column to the 'Ebooks' table."
        },
        {
          "id": "method:e05nak:up__action_13_persistence_write_13__linear",
          "kind": "statement",
          "label": "Add column 'Description' to 'Ebooks'",
          "line": 13,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.AddColumn<string>(name: \"Description\", table: \"Ebooks\", type: \"text\", nullable: true)"
        },
        {
          "id": "method:e05nak:up__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:e05nak:up__entry__method:e05nak:up__action_13_persistence_write_13__linear",
          "from": "method:e05nak:up__entry",
          "to": "method:e05nak:up__action_13_persistence_write_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.7
        },
        {
          "id": "method:e05nak:up__action_13_persistence_write_13__linear__implicit_return",
          "from": "method:e05nak:up__action_13_persistence_write_13__linear",
          "to": "method:e05nak:up__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Up.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:98t2qk:down__fragment",
      "ownerFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "ownerSymbolId": "method:98t2qk:down",
      "ownerSymbolName": "Down",
      "entryNodeId": "method:98t2qk:down__entry",
      "exitNodeIds": [
        "method:98t2qk:down__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:98t2qk:down__entry",
          "kind": "entry",
          "label": "Down entry",
          "line": 21,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.99,
          "detail": "Revert schema change: remove the 'Description' column from the 'Ebooks' table."
        },
        {
          "id": "method:98t2qk:down__action_23_persistence_delete_23__linear",
          "kind": "statement",
          "label": "Drop column 'Description' from 'Ebooks'",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.7,
          "detail": "migrationBuilder.DropColumn(name: \"Description\", table: \"Ebooks\")"
        },
        {
          "id": "method:98t2qk:down__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:98t2qk:down__entry__method:98t2qk:down__action_23_persistence_delete_23__linear",
          "from": "method:98t2qk:down__entry",
          "to": "method:98t2qk:down__action_23_persistence_delete_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.7
        },
        {
          "id": "method:98t2qk:down__action_23_persistence_delete_23__linear__implicit_return",
          "from": "method:98t2qk:down__action_23_persistence_delete_23__linear",
          "to": "method:98t2qk:down__implicit_return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 21,
        "end": 26
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method Down.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13h9yo2:buildtargetmodel__fragment",
      "ownerFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "ownerSymbolId": "method:13h9yo2:buildtargetmodel",
      "ownerSymbolName": "BuildTargetModel",
      "entryNodeId": "method:13h9yo2:buildtargetmodel__entry",
      "exitNodeIds": [
        "method:13h9yo2:buildtargetmodel__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13h9yo2:buildtargetmodel__entry",
          "kind": "entry",
          "label": "BuildTargetModel entry",
          "line": 20,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.99,
          "detail": "Builds the EF Core model snapshot used by this migration: applies annotations, extensions, entity/table/property/index/relationship mappings and data seeding."
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_22_pragma_22__linear",
          "kind": "statement",
          "label": "Disable/restore compiler warnings",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "#pragma warning disable 612, 618 and #pragma warning restore 612, 618 at end"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "statement",
          "label": "Add model annotations",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_27_extension_registration_27__linear",
          "kind": "statement",
          "label": "Register Postgres vector extension",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_28_database_behavior_28__linear",
          "kind": "statement",
          "label": "Configure identity/sequence column behavior",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) and multiple UseIdentityByDefaultColumn on integer PK properties"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_30_schema_definition_30__linear",
          "kind": "statement",
          "label": "Define Identity tables and ASP.NET Identity properties/indexes",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures AspNetRoles, AspNetRoleClaims, AspNetUserClaims, AspNetUserLogins, AspNetUserRoles, AspNetUserTokens with properties, keys, indexes and table names"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_49_index_49__linear",
          "kind": "statement",
          "label": "Create indexes",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Multiple .HasIndex(...) calls across entities creating unique and non-unique indexes (e.g., RoleNameIndex, UserNameIndex, TenantId indexes, ContentHash unique index)"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_162_schema_definition_162__linear",
          "kind": "statement",
          "label": "Define domain entity 'Author' table",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Authors table with Id (identity), Name required nvarchar(255), primary key and table mapping"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_180_schema_definition_180__linear",
          "kind": "statement",
          "label": "Define domain entity 'Ebook' table (adds Description column)",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines Ebooks table with Guid Id, AddedDate, AuthorId, CoverUrl, Description, FilePath(required), IsReadyForReading, LastChapter, LastChapterIndex, LastReadDate, Progress, TenantId(required), Title(required), UserId(required), keys and indexes"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_243_schema_definition_243__linear",
          "kind": "statement",
          "label": "Define KnowledgeUnit and vector column",
          "line": 243,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines KnowledgeUnits table with Id, Content, CreatedAt, EbookId (nullable FK), MetadataJson, TenantId, Type, Vector (pgvector) and Version"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_287_schema_definition_287__linear",
          "kind": "statement",
          "label": "Define KnowledgeUnitLink table with relation fields",
          "line": 287,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Defines KnowledgeUnitLinks table with integer Id (identity), RelationType, SourceUnitId, TargetUnitId and indexes"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_319_schema_definition_319__linear",
          "kind": "statement",
          "label": "Define NexusUser (AspNetUsers) extended fields",
          "line": 319,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures AspNetUsers with many custom properties (AIToken limits, LastAiActionDate, TenantId, SubscriptionPlanId defaulting to 1), indexes and table mapping"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_417_schema_definition_417__linear",
          "kind": "statement",
          "label": "Define QuizResult table",
          "line": 417,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures QuizResults with Id(Guid), CompletedDate, Score, Topic, TotalQuestions, TenantId, UserId and indexes"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_454_schema_definition_454__linear",
          "kind": "statement",
          "label": "Define SemanticKnowledgeCache table with vector and unique ContentHash",
          "line": 454,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures SemanticKnowledgeCache with ContentHash PK, CreatedAt, JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector(1536) and unique index on ContentHash"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_499_schema_definition_499__linear",
          "kind": "statement",
          "label": "Define SubscriptionPlan table and seed data",
          "line": 499,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Configures SubscriptionPlans table and seeds four plan rows (Free, Basic, Pro, Enterprise) with Id, AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName, StripeProductId"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_572_foreign_key_572__linear",
          "kind": "statement",
          "label": "Define foreign key relationships and cascade/restrict behaviors",
          "line": 572,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Sets up relationships such as Ebook->Author (Restrict), Ebook->NexusUser (Cascade), KnowledgeUnit->Ebook (Cascade), KnowledgeUnitLink source/target FK cascade, NexusUser->SubscriptionPlan (Restrict), QuizResult->NexusUser (Cascade)"
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_637_navigation_setup_637__linear",
          "kind": "statement",
          "label": "Register navigation properties for EF",
          "line": 637,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7,
          "detail": "Calls .Navigation(...) for Author, User, Ebook, IncomingLinks/OutgoingLinks, SubscriptionPlan etc."
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 712,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13h9yo2:buildtargetmodel__entry__method:13h9yo2:buildtargetmodel__action_22_pragma_22__linear",
          "from": "method:13h9yo2:buildtargetmodel__entry",
          "to": "method:13h9yo2:buildtargetmodel__action_22_pragma_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_22_pragma_22__linear__method:13h9yo2:buildtargetmodel__action_23_annotation_23__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_22_pragma_22__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_23_annotation_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_23_annotation_23__linear__method:13h9yo2:buildtargetmodel__action_27_extension_registration_27__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_23_annotation_23__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_27_extension_registration_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_27_extension_registration_27__linear__method:13h9yo2:buildtargetmodel__action_28_database_behavior_28__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_27_extension_registration_27__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_28_database_behavior_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_28_database_behavior_28__linear__method:13h9yo2:buildtargetmodel__action_30_schema_definition_30__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_28_database_behavior_28__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_30_schema_definition_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_30_schema_definition_30__linear__method:13h9yo2:buildtargetmodel__action_49_index_49__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_30_schema_definition_30__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_49_index_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_49_index_49__linear__method:13h9yo2:buildtargetmodel__action_162_schema_definition_162__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_49_index_49__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_162_schema_definition_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_162_schema_definition_162__linear__method:13h9yo2:buildtargetmodel__action_180_schema_definition_180__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_162_schema_definition_162__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_180_schema_definition_180__linear",
          "kind": "next",
          "line": 180,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_180_schema_definition_180__linear__method:13h9yo2:buildtargetmodel__action_243_schema_definition_243__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_180_schema_definition_180__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_243_schema_definition_243__linear",
          "kind": "next",
          "line": 243,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_243_schema_definition_243__linear__method:13h9yo2:buildtargetmodel__action_287_schema_definition_287__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_243_schema_definition_243__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_287_schema_definition_287__linear",
          "kind": "next",
          "line": 287,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_287_schema_definition_287__linear__method:13h9yo2:buildtargetmodel__action_319_schema_definition_319__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_287_schema_definition_287__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_319_schema_definition_319__linear",
          "kind": "next",
          "line": 319,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_319_schema_definition_319__linear__method:13h9yo2:buildtargetmodel__action_417_schema_definition_417__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_319_schema_definition_319__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_417_schema_definition_417__linear",
          "kind": "next",
          "line": 417,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_417_schema_definition_417__linear__method:13h9yo2:buildtargetmodel__action_454_schema_definition_454__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_417_schema_definition_417__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_454_schema_definition_454__linear",
          "kind": "next",
          "line": 454,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_454_schema_definition_454__linear__method:13h9yo2:buildtargetmodel__action_499_schema_definition_499__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_454_schema_definition_454__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_499_schema_definition_499__linear",
          "kind": "next",
          "line": 499,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_499_schema_definition_499__linear__method:13h9yo2:buildtargetmodel__action_572_foreign_key_572__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_499_schema_definition_499__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_572_foreign_key_572__linear",
          "kind": "next",
          "line": 572,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_572_foreign_key_572__linear__method:13h9yo2:buildtargetmodel__action_637_navigation_setup_637__linear",
          "from": "method:13h9yo2:buildtargetmodel__action_572_foreign_key_572__linear",
          "to": "method:13h9yo2:buildtargetmodel__action_637_navigation_setup_637__linear",
          "kind": "next",
          "line": 637,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13h9yo2:buildtargetmodel__action_637_navigation_setup_637__linear__implicit_return",
          "from": "method:13h9yo2:buildtargetmodel__action_637_navigation_setup_637__linear",
          "to": "method:13h9yo2:buildtargetmodel__implicit_return",
          "kind": "return",
          "line": 712,
          "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 712
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method BuildTargetModel.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:160zwvx:ctor-implicit__fragment",
      "ownerFileId": "file:1wyr0y8:quizresult-cs",
      "ownerSymbolId": "method:160zwvx:ctor-implicit",
      "ownerSymbolName": ".ctor (implicit)",
      "entryNodeId": "method:160zwvx:ctor-implicit__entry",
      "exitNodeIds": [
        "method:160zwvx:ctor-implicit__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:160zwvx:ctor-implicit__entry",
          "kind": "entry",
          "label": ".ctor (implicit) entry",
          "line": 9,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.99,
          "detail": "Implicit object initializer that sets default values for several properties when a QuizResult is created."
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_12_initialization_12__linear",
          "kind": "statement",
          "label": "Sets default Id",
          "line": 12,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "Id = Guid.NewGuid() (property initializer)"
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_15_initialization_15__linear",
          "kind": "statement",
          "label": "Sets default UserId",
          "line": 15,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "UserId = string.Empty (property initializer)"
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_22_initialization_22__linear",
          "kind": "statement",
          "label": "Sets default TenantId",
          "line": 22,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "TenantId = \"global\" (property initializer)"
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_25_initialization_25__linear",
          "kind": "statement",
          "label": "Sets default Topic",
          "line": 25,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "Topic = string.Empty (property initializer)"
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_33_initialization_33__linear",
          "kind": "statement",
          "label": "Sets CompletedDate to UTC now",
          "line": 33,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "CompletedDate = DateTime.UtcNow (property initializer)"
        },
        {
          "id": "method:160zwvx:ctor-implicit__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 34,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:160zwvx:ctor-implicit__entry__method:160zwvx:ctor-implicit__action_12_initialization_12__linear",
          "from": "method:160zwvx:ctor-implicit__entry",
          "to": "method:160zwvx:ctor-implicit__action_12_initialization_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_12_initialization_12__linear__method:160zwvx:ctor-implicit__action_15_initialization_15__linear",
          "from": "method:160zwvx:ctor-implicit__action_12_initialization_12__linear",
          "to": "method:160zwvx:ctor-implicit__action_15_initialization_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_15_initialization_15__linear__method:160zwvx:ctor-implicit__action_22_initialization_22__linear",
          "from": "method:160zwvx:ctor-implicit__action_15_initialization_15__linear",
          "to": "method:160zwvx:ctor-implicit__action_22_initialization_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_22_initialization_22__linear__method:160zwvx:ctor-implicit__action_25_initialization_25__linear",
          "from": "method:160zwvx:ctor-implicit__action_22_initialization_22__linear",
          "to": "method:160zwvx:ctor-implicit__action_25_initialization_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_25_initialization_25__linear__method:160zwvx:ctor-implicit__action_33_initialization_33__linear",
          "from": "method:160zwvx:ctor-implicit__action_25_initialization_25__linear",
          "to": "method:160zwvx:ctor-implicit__action_33_initialization_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:160zwvx:ctor-implicit__action_33_initialization_33__linear__implicit_return",
          "from": "method:160zwvx:ctor-implicit__action_33_initialization_33__linear",
          "to": "method:160zwvx:ctor-implicit__implicit_return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 9,
        "end": 34
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method .ctor (implicit).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ml3mse:percentage-getter__fragment",
      "ownerFileId": "file:1wyr0y8:quizresult-cs",
      "ownerSymbolId": "method:ml3mse:percentage-getter",
      "ownerSymbolName": "Percentage (getter)",
      "entryNodeId": "method:ml3mse:percentage-getter__entry",
      "exitNodeIds": [
        "method:ml3mse:percentage-getter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ml3mse:percentage-getter__entry",
          "kind": "entry",
          "label": "Percentage (getter) entry",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.99,
          "detail": "Computes the score percentage of correct answers; guards against division by zero."
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition",
          "kind": "condition",
          "label": "TotalQuestions > 0",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7,
          "detail": "If TotalQuestions > 0 returns (double)Score / TotalQuestions * 100, else returns 0"
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__true",
          "kind": "branch-true",
          "label": "compute-percentage",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__false",
          "kind": "branch-false",
          "label": "return-0",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ml3mse:percentage-getter__entry__method:ml3mse:percentage-getter__action_31_guard_clause_31__condition",
          "from": "method:ml3mse:percentage-getter__entry",
          "to": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition__method:ml3mse:percentage-getter__action_31_guard_clause_31__true",
          "from": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition",
          "to": "method:ml3mse:percentage-getter__action_31_guard_clause_31__true",
          "kind": "condition-true",
          "label": "compute-percentage",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition__method:ml3mse:percentage-getter__action_31_guard_clause_31__false",
          "from": "method:ml3mse:percentage-getter__action_31_guard_clause_31__condition",
          "to": "method:ml3mse:percentage-getter__action_31_guard_clause_31__false",
          "kind": "condition-false",
          "label": "return-0",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__true__method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "from": "method:ml3mse:percentage-getter__action_31_guard_clause_31__true",
          "to": "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__false__method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "from": "method:ml3mse:percentage-getter__action_31_guard_clause_31__false",
          "to": "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge__implicit_return",
          "from": "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge",
          "to": "method:ml3mse:percentage-getter__implicit_return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:ml3mse:percentage-getter__action_31_guard_clause_31__merge"
      ],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 31,
        "end": 31
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Domain/Entities/QuizResult.cs",
          "line": 31,
          "summary": "Control-flow fragment extracted for method Percentage (getter).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:twu1zj:vibratesuccessasync__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:twu1zj:vibratesuccessasync",
      "ownerSymbolName": "VibrateSuccessAsync",
      "entryNodeId": "method:twu1zj:vibratesuccessasync__entry",
      "exitNodeIds": [
        "method:twu1zj:vibratesuccessasync__action_17_return_17__return",
        "method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return",
        "method:twu1zj:vibratesuccessasync__action_21_vibratesuccessasync_return_21_4__return"
      ],
      "nodes": [
        {
          "id": "method:twu1zj:vibratesuccessasync__entry",
          "kind": "entry",
          "label": "VibrateSuccessAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Performs a short double haptic click to indicate success and returns a FluentResults Result."
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_12_try_catch_12__linear",
          "kind": "statement",
          "label": "Wraps platform haptic calls and returns failure on exception",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(ex.Message); }"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_12_vibratesuccessasync_try_12_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_14_platform_call_14__linear",
          "kind": "statement",
          "label": "Haptic click (first)",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "HapticFeedback.Default.Perform(HapticFeedbackType.Click)"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_15_vibratesuccessasync_await_15_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.81,
          "detail": "await Task.Delay(100);"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_15_async_wait_15__linear",
          "kind": "statement",
          "label": "Delay between haptic calls",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "await Task.Delay(100)"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_16_platform_call_16__linear",
          "kind": "statement",
          "label": "Haptic click (second)",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "HapticFeedback.Default.Perform(HapticFeedbackType.Click)"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_17_return_17__return",
          "kind": "return",
          "label": "returns success",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_19_vibratesuccessasync_catch_19_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_21_vibratesuccessasync_return_21_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:twu1zj:vibratesuccessasync__entry__method:twu1zj:vibratesuccessasync__action_12_try_catch_12__linear",
          "from": "method:twu1zj:vibratesuccessasync__entry",
          "to": "method:twu1zj:vibratesuccessasync__action_12_try_catch_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_12_try_catch_12__linear__method:twu1zj:vibratesuccessasync__action_12_vibratesuccessasync_try_12_0__try",
          "from": "method:twu1zj:vibratesuccessasync__action_12_try_catch_12__linear",
          "to": "method:twu1zj:vibratesuccessasync__action_12_vibratesuccessasync_try_12_0__try",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_12_vibratesuccessasync_try_12_0__try__method:twu1zj:vibratesuccessasync__action_14_platform_call_14__linear",
          "from": "method:twu1zj:vibratesuccessasync__action_12_vibratesuccessasync_try_12_0__try",
          "to": "method:twu1zj:vibratesuccessasync__action_14_platform_call_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_14_platform_call_14__linear__method:twu1zj:vibratesuccessasync__action_15_vibratesuccessasync_await_15_1__await",
          "from": "method:twu1zj:vibratesuccessasync__action_14_platform_call_14__linear",
          "to": "method:twu1zj:vibratesuccessasync__action_15_vibratesuccessasync_await_15_1__await",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_15_vibratesuccessasync_await_15_1__await__method:twu1zj:vibratesuccessasync__action_15_async_wait_15__linear",
          "from": "method:twu1zj:vibratesuccessasync__action_15_vibratesuccessasync_await_15_1__await",
          "to": "method:twu1zj:vibratesuccessasync__action_15_async_wait_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_15_async_wait_15__linear__method:twu1zj:vibratesuccessasync__action_16_platform_call_16__linear",
          "from": "method:twu1zj:vibratesuccessasync__action_15_async_wait_15__linear",
          "to": "method:twu1zj:vibratesuccessasync__action_16_platform_call_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_16_platform_call_16__linear__method:twu1zj:vibratesuccessasync__action_17_return_17__return",
          "from": "method:twu1zj:vibratesuccessasync__action_16_platform_call_16__linear",
          "to": "method:twu1zj:vibratesuccessasync__action_17_return_17__return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_17_return_17__return__method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return",
          "from": "method:twu1zj:vibratesuccessasync__action_17_return_17__return",
          "to": "method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return__method:twu1zj:vibratesuccessasync__action_19_vibratesuccessasync_catch_19_3__catch",
          "from": "method:twu1zj:vibratesuccessasync__action_17_vibratesuccessasync_return_17_2__return",
          "to": "method:twu1zj:vibratesuccessasync__action_19_vibratesuccessasync_catch_19_3__catch",
          "kind": "exception",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:twu1zj:vibratesuccessasync__action_19_vibratesuccessasync_catch_19_3__catch__method:twu1zj:vibratesuccessasync__action_21_vibratesuccessasync_return_21_4__return",
          "from": "method:twu1zj:vibratesuccessasync__action_19_vibratesuccessasync_catch_19_3__catch",
          "to": "method:twu1zj:vibratesuccessasync__action_21_vibratesuccessasync_return_21_4__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 10,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method VibrateSuccessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ro58qu:vibrateerrorasync__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:1ro58qu:vibrateerrorasync",
      "ownerSymbolName": "VibrateErrorAsync",
      "entryNodeId": "method:1ro58qu:vibrateerrorasync__entry",
      "exitNodeIds": [
        "method:1ro58qu:vibrateerrorasync__action_30_return_30__return",
        "method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return",
        "method:1ro58qu:vibrateerrorasync__action_34_vibrateerrorasync_return_34_3__return"
      ],
      "nodes": [
        {
          "id": "method:1ro58qu:vibrateerrorasync__entry",
          "kind": "entry",
          "label": "VibrateErrorAsync entry",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Performs a long haptic press to indicate an error and returns a FluentResults Result."
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_27_try_catch_27__linear",
          "kind": "statement",
          "label": "Wraps platform haptic call and returns failure on exception",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(ex.Message); }"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_27_vibrateerrorasync_try_27_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_29_platform_call_29__linear",
          "kind": "statement",
          "label": "Haptic long press",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "HapticFeedback.Default.Perform(HapticFeedbackType.LongPress)"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_30_return_30__return",
          "kind": "return",
          "label": "returns success",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_32_vibrateerrorasync_catch_32_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_34_vibrateerrorasync_return_34_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:1ro58qu:vibrateerrorasync__entry__method:1ro58qu:vibrateerrorasync__action_27_try_catch_27__linear",
          "from": "method:1ro58qu:vibrateerrorasync__entry",
          "to": "method:1ro58qu:vibrateerrorasync__action_27_try_catch_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_27_try_catch_27__linear__method:1ro58qu:vibrateerrorasync__action_27_vibrateerrorasync_try_27_0__try",
          "from": "method:1ro58qu:vibrateerrorasync__action_27_try_catch_27__linear",
          "to": "method:1ro58qu:vibrateerrorasync__action_27_vibrateerrorasync_try_27_0__try",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_27_vibrateerrorasync_try_27_0__try__method:1ro58qu:vibrateerrorasync__action_29_platform_call_29__linear",
          "from": "method:1ro58qu:vibrateerrorasync__action_27_vibrateerrorasync_try_27_0__try",
          "to": "method:1ro58qu:vibrateerrorasync__action_29_platform_call_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_29_platform_call_29__linear__method:1ro58qu:vibrateerrorasync__action_30_return_30__return",
          "from": "method:1ro58qu:vibrateerrorasync__action_29_platform_call_29__linear",
          "to": "method:1ro58qu:vibrateerrorasync__action_30_return_30__return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_30_return_30__return__method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return",
          "from": "method:1ro58qu:vibrateerrorasync__action_30_return_30__return",
          "to": "method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return__method:1ro58qu:vibrateerrorasync__action_32_vibrateerrorasync_catch_32_2__catch",
          "from": "method:1ro58qu:vibrateerrorasync__action_30_vibrateerrorasync_return_30_1__return",
          "to": "method:1ro58qu:vibrateerrorasync__action_32_vibrateerrorasync_catch_32_2__catch",
          "kind": "exception",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ro58qu:vibrateerrorasync__action_32_vibrateerrorasync_catch_32_2__catch__method:1ro58qu:vibrateerrorasync__action_34_vibrateerrorasync_return_34_3__return",
          "from": "method:1ro58qu:vibrateerrorasync__action_32_vibrateerrorasync_catch_32_2__catch",
          "to": "method:1ro58qu:vibrateerrorasync__action_34_vibrateerrorasync_return_34_3__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 25,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method VibrateErrorAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:va46s8:vibrateasync__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:va46s8:vibrateasync",
      "ownerSymbolName": "VibrateAsync",
      "entryNodeId": "method:va46s8:vibrateasync__entry",
      "exitNodeIds": [
        "method:va46s8:vibrateasync__action_43_return_43__return",
        "method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return",
        "method:va46s8:vibrateasync__action_47_vibrateasync_return_47_3__return"
      ],
      "nodes": [
        {
          "id": "method:va46s8:vibrateasync__entry",
          "kind": "entry",
          "label": "VibrateAsync entry",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Performs a single haptic click (parameter provided but not used) and returns a FluentResults Result."
        },
        {
          "id": "method:va46s8:vibrateasync__action_40_try_catch_40__linear",
          "kind": "statement",
          "label": "Wraps platform haptic call and returns failure on exception",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(ex.Message); }"
        },
        {
          "id": "method:va46s8:vibrateasync__action_40_vibrateasync_try_40_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:va46s8:vibrateasync__action_42_platform_call_42__linear",
          "kind": "statement",
          "label": "Haptic click",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "HapticFeedback.Default.Perform(HapticFeedbackType.Click)"
        },
        {
          "id": "method:va46s8:vibrateasync__action_43_return_43__return",
          "kind": "return",
          "label": "returns success",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        },
        {
          "id": "method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:va46s8:vibrateasync__action_45_vibrateasync_catch_45_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:va46s8:vibrateasync__action_47_vibrateasync_return_47_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:va46s8:vibrateasync__entry__method:va46s8:vibrateasync__action_40_try_catch_40__linear",
          "from": "method:va46s8:vibrateasync__entry",
          "to": "method:va46s8:vibrateasync__action_40_try_catch_40__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:va46s8:vibrateasync__action_40_try_catch_40__linear__method:va46s8:vibrateasync__action_40_vibrateasync_try_40_0__try",
          "from": "method:va46s8:vibrateasync__action_40_try_catch_40__linear",
          "to": "method:va46s8:vibrateasync__action_40_vibrateasync_try_40_0__try",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:va46s8:vibrateasync__action_40_vibrateasync_try_40_0__try__method:va46s8:vibrateasync__action_42_platform_call_42__linear",
          "from": "method:va46s8:vibrateasync__action_40_vibrateasync_try_40_0__try",
          "to": "method:va46s8:vibrateasync__action_42_platform_call_42__linear",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:va46s8:vibrateasync__action_42_platform_call_42__linear__method:va46s8:vibrateasync__action_43_return_43__return",
          "from": "method:va46s8:vibrateasync__action_42_platform_call_42__linear",
          "to": "method:va46s8:vibrateasync__action_43_return_43__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:va46s8:vibrateasync__action_43_return_43__return__method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return",
          "from": "method:va46s8:vibrateasync__action_43_return_43__return",
          "to": "method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return__method:va46s8:vibrateasync__action_45_vibrateasync_catch_45_2__catch",
          "from": "method:va46s8:vibrateasync__action_43_vibrateasync_return_43_1__return",
          "to": "method:va46s8:vibrateasync__action_45_vibrateasync_catch_45_2__catch",
          "kind": "exception",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:va46s8:vibrateasync__action_45_vibrateasync_catch_45_2__catch__method:va46s8:vibrateasync__action_47_vibrateasync_return_47_3__return",
          "from": "method:va46s8:vibrateasync__action_45_vibrateasync_catch_45_2__catch",
          "to": "method:va46s8:vibrateasync__action_47_vibrateasync_return_47_3__return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 38,
        "end": 49
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 38,
          "summary": "Control-flow fragment extracted for method VibrateAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:60f4ut:getdevicecontext__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:60f4ut:getdevicecontext",
      "ownerSymbolName": "GetDeviceContext",
      "entryNodeId": "method:60f4ut:getdevicecontext__entry",
      "exitNodeIds": [
        "method:60f4ut:getdevicecontext__action_58_return_58__return",
        "method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return",
        "method:60f4ut:getdevicecontext__action_67_getdevicecontext_return_67_5__return"
      ],
      "nodes": [
        {
          "id": "method:60f4ut:getdevicecontext__entry",
          "kind": "entry",
          "label": "GetDeviceContext entry",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Reads MAUI Device and Display information, maps idiom and orientation to application types, and returns a DeviceContext wrapped in a FluentResults Result."
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_53_try_catch_53__linear",
          "kind": "statement",
          "label": "Wraps device reads and mapping and returns failure on exception",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(ex.Message); }"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_53_getdevicecontext_try_53_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_55_platform_call_55__linear",
          "kind": "statement",
          "label": "Read device info",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "var device = DeviceInfo.Current"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_56_platform_call_56__linear",
          "kind": "statement",
          "label": "Read display info",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "var display = DeviceDisplay.Current.MainDisplayInfo"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_return_58__return",
          "kind": "return",
          "label": "returns success with DeviceContext",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new DeviceContext(...))"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new DeviceContext("
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_construct_58__linear",
          "kind": "statement",
          "label": "Construct DeviceContext DTO",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "new DeviceContext(device.Model, device.Manufacturer, ..., ...)"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_61_getdevicecontext_mapping_61_2__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74,
          "detail": "MapDeviceType(device.Idiom),"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_61_mapping_61__linear",
          "kind": "statement",
          "label": "Map idiom to application DeviceType",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "MapDeviceType(device.Idiom)"
        },
        {
          "id": "method:60f4ut:getdevicecontext__call_61_MapDeviceType",
          "kind": "call",
          "label": "MapDeviceType",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.88,
          "detail": "device.Idiom"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_62_getdevicecontext_mapping_62_3__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74,
          "detail": "MapOrientation(display.Orientation)"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_62_mapping_62__linear",
          "kind": "statement",
          "label": "Map display orientation to application DisplayOrientation",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "MapOrientation(display.Orientation)"
        },
        {
          "id": "method:60f4ut:getdevicecontext__call_62_MapOrientation",
          "kind": "call",
          "label": "MapOrientation",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.88,
          "detail": "display.Orientation"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_65_getdevicecontext_catch_65_4__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_67_getdevicecontext_return_67_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:60f4ut:getdevicecontext__entry__method:60f4ut:getdevicecontext__action_53_try_catch_53__linear",
          "from": "method:60f4ut:getdevicecontext__entry",
          "to": "method:60f4ut:getdevicecontext__action_53_try_catch_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_53_try_catch_53__linear__method:60f4ut:getdevicecontext__action_53_getdevicecontext_try_53_0__try",
          "from": "method:60f4ut:getdevicecontext__action_53_try_catch_53__linear",
          "to": "method:60f4ut:getdevicecontext__action_53_getdevicecontext_try_53_0__try",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_53_getdevicecontext_try_53_0__try__method:60f4ut:getdevicecontext__action_55_platform_call_55__linear",
          "from": "method:60f4ut:getdevicecontext__action_53_getdevicecontext_try_53_0__try",
          "to": "method:60f4ut:getdevicecontext__action_55_platform_call_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_55_platform_call_55__linear__method:60f4ut:getdevicecontext__action_56_platform_call_56__linear",
          "from": "method:60f4ut:getdevicecontext__action_55_platform_call_55__linear",
          "to": "method:60f4ut:getdevicecontext__action_56_platform_call_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_56_platform_call_56__linear__method:60f4ut:getdevicecontext__action_58_return_58__return",
          "from": "method:60f4ut:getdevicecontext__action_56_platform_call_56__linear",
          "to": "method:60f4ut:getdevicecontext__action_58_return_58__return",
          "kind": "return",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_return_58__return__method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return",
          "from": "method:60f4ut:getdevicecontext__action_58_return_58__return",
          "to": "method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return",
          "kind": "return",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return__method:60f4ut:getdevicecontext__action_58_construct_58__linear",
          "from": "method:60f4ut:getdevicecontext__action_58_getdevicecontext_return_58_1__return",
          "to": "method:60f4ut:getdevicecontext__action_58_construct_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_58_construct_58__linear__method:60f4ut:getdevicecontext__action_61_getdevicecontext_mapping_61_2__linear",
          "from": "method:60f4ut:getdevicecontext__action_58_construct_58__linear",
          "to": "method:60f4ut:getdevicecontext__action_61_getdevicecontext_mapping_61_2__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_61_getdevicecontext_mapping_61_2__linear__method:60f4ut:getdevicecontext__action_61_mapping_61__linear",
          "from": "method:60f4ut:getdevicecontext__action_61_getdevicecontext_mapping_61_2__linear",
          "to": "method:60f4ut:getdevicecontext__action_61_mapping_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_61_mapping_61__linear__call_method:60f4ut:getdevicecontext__call_61_MapDeviceType",
          "from": "method:60f4ut:getdevicecontext__action_61_mapping_61__linear",
          "to": "method:60f4ut:getdevicecontext__call_61_MapDeviceType",
          "kind": "call",
          "label": "device.Idiom",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:60f4ut:getdevicecontext__call_61_MapDeviceType__method:60f4ut:getdevicecontext__action_62_getdevicecontext_mapping_62_3__linear",
          "from": "method:60f4ut:getdevicecontext__call_61_MapDeviceType",
          "to": "method:60f4ut:getdevicecontext__action_62_getdevicecontext_mapping_62_3__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_62_getdevicecontext_mapping_62_3__linear__method:60f4ut:getdevicecontext__action_62_mapping_62__linear",
          "from": "method:60f4ut:getdevicecontext__action_62_getdevicecontext_mapping_62_3__linear",
          "to": "method:60f4ut:getdevicecontext__action_62_mapping_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_62_mapping_62__linear__call_method:60f4ut:getdevicecontext__call_62_MapOrientation",
          "from": "method:60f4ut:getdevicecontext__action_62_mapping_62__linear",
          "to": "method:60f4ut:getdevicecontext__call_62_MapOrientation",
          "kind": "call",
          "label": "display.Orientation",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:60f4ut:getdevicecontext__call_62_MapOrientation__method:60f4ut:getdevicecontext__action_65_getdevicecontext_catch_65_4__catch",
          "from": "method:60f4ut:getdevicecontext__call_62_MapOrientation",
          "to": "method:60f4ut:getdevicecontext__action_65_getdevicecontext_catch_65_4__catch",
          "kind": "exception",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:60f4ut:getdevicecontext__action_65_getdevicecontext_catch_65_4__catch__method:60f4ut:getdevicecontext__action_67_getdevicecontext_return_67_5__return",
          "from": "method:60f4ut:getdevicecontext__action_65_getdevicecontext_catch_65_4__catch",
          "to": "method:60f4ut:getdevicecontext__action_67_getdevicecontext_return_67_5__return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:60f4ut:getdevicecontext__call_61_MapDeviceType__jump_NexusReader_Infrastructure_Mobile_Services_MauiPlatformService_cs_MapDeviceType",
          "fromNodeId": "method:60f4ut:getdevicecontext__call_61_MapDeviceType",
          "kind": "call-target",
          "targetNodeId": "method:18ccdu4:mapdevicetype",
          "targetPath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "targetHint": "MapDeviceType",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "reason": "Call target MapDeviceType resolved to NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:60f4ut:getdevicecontext__call_62_MapOrientation__jump_NexusReader_Infrastructure_Mobile_Services_MauiPlatformService_cs_MapOrientation",
          "fromNodeId": "method:60f4ut:getdevicecontext__call_62_MapOrientation",
          "kind": "call-target",
          "targetNodeId": "method:jhc678:maporientation",
          "targetPath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "targetHint": "MapOrientation",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "reason": "Call target MapOrientation resolved to NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 51,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 51,
          "summary": "Control-flow fragment extracted for method GetDeviceContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:18ccdu4:mapdevicetype__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:18ccdu4:mapdevicetype",
      "ownerSymbolName": "MapDeviceType",
      "entryNodeId": "method:18ccdu4:mapdevicetype__entry",
      "exitNodeIds": [
        "method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return",
        "method:18ccdu4:mapdevicetype__action_76_return_76__return"
      ],
      "nodes": [
        {
          "id": "method:18ccdu4:mapdevicetype__entry",
          "kind": "entry",
          "label": "MapDeviceType entry",
          "line": 71,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Maps MAUI DeviceIdiom values to the application's DeviceType enum."
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_71_mapdevicetype_mapping_71_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 71,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74,
          "detail": "private static NexusReader.Application.Abstractions.Services.DeviceType MapDeviceType(DeviceIdiom idiom)"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Phone",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "if (idiom == DeviceIdiom.Phone) return DeviceType.Phone;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__true",
          "kind": "branch-true",
          "label": "Phone",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "kind": "statement",
          "label": "merge",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Phone",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9,
          "detail": "if (idiom == DeviceIdiom.Phone) return NexusReader.Application.Abstractions.Services.DeviceType.Phone;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Tablet",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "if (idiom == DeviceIdiom.Tablet) return DeviceType.Tablet;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__true",
          "kind": "branch-true",
          "label": "Tablet",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Tablet",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9,
          "detail": "if (idiom == DeviceIdiom.Tablet) return NexusReader.Application.Abstractions.Services.DeviceType.Tablet;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Desktop",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9,
          "detail": "if (idiom == DeviceIdiom.Desktop) return NexusReader.Application.Abstractions.Services.DeviceType.Desktop;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition",
          "kind": "condition",
          "label": "idiom == DeviceIdiom.Desktop",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "if (idiom == DeviceIdiom.Desktop) return DeviceType.Desktop;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__true",
          "kind": "branch-true",
          "label": "Desktop",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "kind": "statement",
          "label": "merge",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return NexusReader.Application.Abstractions.Services.DeviceType.Unknown;"
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_76_return_76__return",
          "kind": "return",
          "label": "default Unknown",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "return DeviceType.Unknown;"
        }
      ],
      "edges": [
        {
          "id": "method:18ccdu4:mapdevicetype__entry__method:18ccdu4:mapdevicetype__action_71_mapdevicetype_mapping_71_0__linear",
          "from": "method:18ccdu4:mapdevicetype__entry",
          "to": "method:18ccdu4:mapdevicetype__action_71_mapdevicetype_mapping_71_0__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_71_mapdevicetype_mapping_71_0__linear__method:18ccdu4:mapdevicetype__action_73_branch_73__condition",
          "from": "method:18ccdu4:mapdevicetype__action_71_mapdevicetype_mapping_71_0__linear",
          "to": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition__method:18ccdu4:mapdevicetype__action_73_branch_73__true",
          "from": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition",
          "to": "method:18ccdu4:mapdevicetype__action_73_branch_73__true",
          "kind": "condition-true",
          "label": "Phone",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition__method:18ccdu4:mapdevicetype__action_73_branch_73__false",
          "from": "method:18ccdu4:mapdevicetype__action_73_branch_73__condition",
          "to": "method:18ccdu4:mapdevicetype__action_73_branch_73__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__true__method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "from": "method:18ccdu4:mapdevicetype__action_73_branch_73__true",
          "to": "method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__false__method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "from": "method:18ccdu4:mapdevicetype__action_73_branch_73__false",
          "to": "method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_branch_73__merge__method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition",
          "from": "method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
          "to": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition__method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__true",
          "from": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition",
          "to": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition__method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__false",
          "from": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__condition",
          "to": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__true__method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "from": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__true",
          "to": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__false__method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "from": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__false",
          "to": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge__method:18ccdu4:mapdevicetype__action_74_branch_74__condition",
          "from": "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
          "to": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition__method:18ccdu4:mapdevicetype__action_74_branch_74__true",
          "from": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition",
          "to": "method:18ccdu4:mapdevicetype__action_74_branch_74__true",
          "kind": "condition-true",
          "label": "Tablet",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition__method:18ccdu4:mapdevicetype__action_74_branch_74__false",
          "from": "method:18ccdu4:mapdevicetype__action_74_branch_74__condition",
          "to": "method:18ccdu4:mapdevicetype__action_74_branch_74__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__true__method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "from": "method:18ccdu4:mapdevicetype__action_74_branch_74__true",
          "to": "method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__false__method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "from": "method:18ccdu4:mapdevicetype__action_74_branch_74__false",
          "to": "method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_branch_74__merge__method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition",
          "from": "method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
          "to": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition__method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__true",
          "from": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition",
          "to": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition__method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__false",
          "from": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__condition",
          "to": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__true__method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "from": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__true",
          "to": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__false__method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "from": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__false",
          "to": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge__method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition",
          "from": "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
          "to": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition__method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__true",
          "from": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition",
          "to": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition__method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__false",
          "from": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__condition",
          "to": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__true__method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "from": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__true",
          "to": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__false__method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "from": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__false",
          "to": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge__method:18ccdu4:mapdevicetype__action_75_branch_75__condition",
          "from": "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
          "to": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition__method:18ccdu4:mapdevicetype__action_75_branch_75__true",
          "from": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition",
          "to": "method:18ccdu4:mapdevicetype__action_75_branch_75__true",
          "kind": "condition-true",
          "label": "Desktop",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition__method:18ccdu4:mapdevicetype__action_75_branch_75__false",
          "from": "method:18ccdu4:mapdevicetype__action_75_branch_75__condition",
          "to": "method:18ccdu4:mapdevicetype__action_75_branch_75__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__true__method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "from": "method:18ccdu4:mapdevicetype__action_75_branch_75__true",
          "to": "method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__false__method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "from": "method:18ccdu4:mapdevicetype__action_75_branch_75__false",
          "to": "method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_75_branch_75__merge__method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return",
          "from": "method:18ccdu4:mapdevicetype__action_75_branch_75__merge",
          "to": "method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return__method:18ccdu4:mapdevicetype__action_76_return_76__return",
          "from": "method:18ccdu4:mapdevicetype__action_76_mapdevicetype_return_76_4__return",
          "to": "method:18ccdu4:mapdevicetype__action_76_return_76__return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:18ccdu4:mapdevicetype__action_73_branch_73__merge",
        "method:18ccdu4:mapdevicetype__action_73_mapdevicetype_guard_clause_73_1__merge",
        "method:18ccdu4:mapdevicetype__action_74_branch_74__merge",
        "method:18ccdu4:mapdevicetype__action_74_mapdevicetype_guard_clause_74_2__merge",
        "method:18ccdu4:mapdevicetype__action_75_mapdevicetype_guard_clause_75_3__merge",
        "method:18ccdu4:mapdevicetype__action_75_branch_75__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 71,
        "end": 77
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 71,
          "summary": "Control-flow fragment extracted for method MapDeviceType.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jhc678:maporientation__fragment",
      "ownerFileId": "file:12lov7s:mauiplatformservice-cs",
      "ownerSymbolId": "method:jhc678:maporientation",
      "ownerSymbolName": "MapOrientation",
      "entryNodeId": "method:jhc678:maporientation__entry",
      "exitNodeIds": [
        "method:jhc678:maporientation__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:jhc678:maporientation__entry",
          "kind": "entry",
          "label": "MapOrientation entry",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.99,
          "detail": "Maps MAUI DisplayOrientation values to the application's DisplayOrientation enum using a switch expression."
        },
        {
          "id": "method:jhc678:maporientation__action_79_maporientation_mapping_79_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74,
          "detail": "private static NexusReader.Application.Abstractions.Services.DisplayOrientation MapOrientation(Microsoft.Maui.Devices.DisplayOrientation orientation) => orientation switch"
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__switch",
          "kind": "switch",
          "label": "Map display orientation cases",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7,
          "detail": "switch expression mapping Portrait => Portrait, Landscape => Landscape, default => Unknown"
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__switch_merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__case_0",
          "kind": "case",
          "label": "case",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jhc678:maporientation__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 84,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:jhc678:maporientation__entry__method:jhc678:maporientation__action_79_maporientation_mapping_79_0__linear",
          "from": "method:jhc678:maporientation__entry",
          "to": "method:jhc678:maporientation__action_79_maporientation_mapping_79_0__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:jhc678:maporientation__action_79_maporientation_mapping_79_0__linear__method:jhc678:maporientation__action_79_switch_79__switch",
          "from": "method:jhc678:maporientation__action_79_maporientation_mapping_79_0__linear",
          "to": "method:jhc678:maporientation__action_79_switch_79__switch",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__switch__method:jhc678:maporientation__action_79_switch_79__case_0",
          "from": "method:jhc678:maporientation__action_79_switch_79__switch",
          "to": "method:jhc678:maporientation__action_79_switch_79__case_0",
          "kind": "case",
          "label": "case",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__case_0__method:jhc678:maporientation__action_79_switch_79__switch_merge",
          "from": "method:jhc678:maporientation__action_79_switch_79__case_0",
          "to": "method:jhc678:maporientation__action_79_switch_79__switch_merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jhc678:maporientation__action_79_switch_79__switch_merge__implicit_return",
          "from": "method:jhc678:maporientation__action_79_switch_79__switch_merge",
          "to": "method:jhc678:maporientation__implicit_return",
          "kind": "return",
          "line": 84,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:jhc678:maporientation__action_79_switch_79__switch_merge"
      ],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 79,
        "end": 84
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs",
          "line": 79,
          "summary": "Control-flow fragment extracted for method MapOrientation.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:s95smj:savestringasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:s95smj:savestringasync",
      "ownerSymbolName": "SaveStringAsync",
      "entryNodeId": "method:s95smj:savestringasync__entry",
      "exitNodeIds": [
        "method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return",
        "method:s95smj:savestringasync__action_19_savestringasync_return_19_3__return"
      ],
      "nodes": [
        {
          "id": "method:s95smj:savestringasync__entry",
          "kind": "entry",
          "label": "SaveStringAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a string value to MAUI Preferences under the provided key and returns a Fluent Result indicating success or failure."
        },
        {
          "id": "method:s95smj:savestringasync__action_12_try_catch_12__linear",
          "kind": "statement",
          "label": "Handle exceptions and return failure result",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "wraps success/failure in Task.FromResult"
        },
        {
          "id": "method:s95smj:savestringasync__action_12_savestringasync_try_12_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:s95smj:savestringasync__action_14_external_call_14__linear",
          "kind": "http-call",
          "label": "Write to Preferences",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Set(key, value)"
        },
        {
          "id": "method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:s95smj:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:s95smj:savestringasync__action_19_savestringasync_return_19_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:s95smj:savestringasync__entry__method:s95smj:savestringasync__action_12_try_catch_12__linear",
          "from": "method:s95smj:savestringasync__entry",
          "to": "method:s95smj:savestringasync__action_12_try_catch_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:s95smj:savestringasync__action_12_try_catch_12__linear__method:s95smj:savestringasync__action_12_savestringasync_try_12_0__try",
          "from": "method:s95smj:savestringasync__action_12_try_catch_12__linear",
          "to": "method:s95smj:savestringasync__action_12_savestringasync_try_12_0__try",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:s95smj:savestringasync__action_12_savestringasync_try_12_0__try__method:s95smj:savestringasync__action_14_external_call_14__linear",
          "from": "method:s95smj:savestringasync__action_12_savestringasync_try_12_0__try",
          "to": "method:s95smj:savestringasync__action_14_external_call_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:s95smj:savestringasync__action_14_external_call_14__linear__method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return",
          "from": "method:s95smj:savestringasync__action_14_external_call_14__linear",
          "to": "method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return__method:s95smj:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "from": "method:s95smj:savestringasync__action_15_savestringasync_return_15_1__return",
          "to": "method:s95smj:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "kind": "exception",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:s95smj:savestringasync__action_17_savestringasync_catch_17_2__catch__method:s95smj:savestringasync__action_19_savestringasync_return_19_3__return",
          "from": "method:s95smj:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "to": "method:s95smj:savestringasync__action_19_savestringasync_return_19_3__return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 10,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method SaveStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6i8lek:getstringasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:6i8lek:getstringasync",
      "ownerSymbolName": "GetStringAsync",
      "entryNodeId": "method:6i8lek:getstringasync__entry",
      "exitNodeIds": [
        "method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return",
        "method:6i8lek:getstringasync__action_31_getstringasync_return_31_3__return"
      ],
      "nodes": [
        {
          "id": "method:6i8lek:getstringasync__entry",
          "kind": "entry",
          "label": "GetStringAsync entry",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a string from MAUI Preferences for the given key and returns the value wrapped in a Fluent Result."
        },
        {
          "id": "method:6i8lek:getstringasync__action_25_try_catch_25__linear",
          "kind": "statement",
          "label": "Handle exceptions and return failure result",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6i8lek:getstringasync__action_25_getstringasync_try_25_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok(Preferences.Default.Get(key, (string?)null)));"
        },
        {
          "id": "method:6i8lek:getstringasync__action_27_external_call_27__linear",
          "kind": "http-call",
          "label": "Read from Preferences",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Get(key, (string?)null)"
        },
        {
          "id": "method:6i8lek:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:6i8lek:getstringasync__action_31_getstringasync_return_31_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail<string?>(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:6i8lek:getstringasync__entry__method:6i8lek:getstringasync__action_25_try_catch_25__linear",
          "from": "method:6i8lek:getstringasync__entry",
          "to": "method:6i8lek:getstringasync__action_25_try_catch_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6i8lek:getstringasync__action_25_try_catch_25__linear__method:6i8lek:getstringasync__action_25_getstringasync_try_25_0__try",
          "from": "method:6i8lek:getstringasync__action_25_try_catch_25__linear",
          "to": "method:6i8lek:getstringasync__action_25_getstringasync_try_25_0__try",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:6i8lek:getstringasync__action_25_getstringasync_try_25_0__try__method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return",
          "from": "method:6i8lek:getstringasync__action_25_getstringasync_try_25_0__try",
          "to": "method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return__method:6i8lek:getstringasync__action_27_external_call_27__linear",
          "from": "method:6i8lek:getstringasync__action_27_getstringasync_return_27_1__return",
          "to": "method:6i8lek:getstringasync__action_27_external_call_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6i8lek:getstringasync__action_27_external_call_27__linear__method:6i8lek:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "from": "method:6i8lek:getstringasync__action_27_external_call_27__linear",
          "to": "method:6i8lek:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "kind": "exception",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:6i8lek:getstringasync__action_29_getstringasync_catch_29_2__catch__method:6i8lek:getstringasync__action_31_getstringasync_return_31_3__return",
          "from": "method:6i8lek:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "to": "method:6i8lek:getstringasync__action_31_getstringasync_return_31_3__return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 23,
        "end": 33
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method GetStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ef0iff:saveboolasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:ef0iff:saveboolasync",
      "ownerSymbolName": "SaveBoolAsync",
      "entryNodeId": "method:ef0iff:saveboolasync__entry",
      "exitNodeIds": [
        "method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return",
        "method:ef0iff:saveboolasync__action_44_saveboolasync_return_44_3__return"
      ],
      "nodes": [
        {
          "id": "method:ef0iff:saveboolasync__entry",
          "kind": "entry",
          "label": "SaveBoolAsync entry",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a boolean value to MAUI Preferences and returns success/failure as a Fluent Result."
        },
        {
          "id": "method:ef0iff:saveboolasync__action_37_try_catch_37__linear",
          "kind": "statement",
          "label": "Handle exceptions",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ef0iff:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:ef0iff:saveboolasync__action_39_external_call_39__linear",
          "kind": "http-call",
          "label": "Write bool to Preferences",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Set(key, value)"
        },
        {
          "id": "method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:ef0iff:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:ef0iff:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:ef0iff:saveboolasync__entry__method:ef0iff:saveboolasync__action_37_try_catch_37__linear",
          "from": "method:ef0iff:saveboolasync__entry",
          "to": "method:ef0iff:saveboolasync__action_37_try_catch_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ef0iff:saveboolasync__action_37_try_catch_37__linear__method:ef0iff:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "from": "method:ef0iff:saveboolasync__action_37_try_catch_37__linear",
          "to": "method:ef0iff:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:ef0iff:saveboolasync__action_37_saveboolasync_try_37_0__try__method:ef0iff:saveboolasync__action_39_external_call_39__linear",
          "from": "method:ef0iff:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "to": "method:ef0iff:saveboolasync__action_39_external_call_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ef0iff:saveboolasync__action_39_external_call_39__linear__method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "from": "method:ef0iff:saveboolasync__action_39_external_call_39__linear",
          "to": "method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return__method:ef0iff:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "from": "method:ef0iff:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "to": "method:ef0iff:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "kind": "exception",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:ef0iff:saveboolasync__action_42_saveboolasync_catch_42_2__catch__method:ef0iff:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "from": "method:ef0iff:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "to": "method:ef0iff:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 35,
        "end": 46
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 35,
          "summary": "Control-flow fragment extracted for method SaveBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:rzym3m:getboolasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:rzym3m:getboolasync",
      "ownerSymbolName": "GetBoolAsync",
      "entryNodeId": "method:rzym3m:getboolasync__entry",
      "exitNodeIds": [
        "method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return",
        "method:rzym3m:getboolasync__action_56_getboolasync_return_56_3__return"
      ],
      "nodes": [
        {
          "id": "method:rzym3m:getboolasync__entry",
          "kind": "entry",
          "label": "GetBoolAsync entry",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a boolean from MAUI Preferences with an optional default and returns it wrapped in a Fluent Result."
        },
        {
          "id": "method:rzym3m:getboolasync__action_50_try_catch_50__linear",
          "kind": "statement",
          "label": "Handle exceptions",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rzym3m:getboolasync__action_50_getboolasync_try_50_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok(Preferences.Default.Get(key, defaultValue)));"
        },
        {
          "id": "method:rzym3m:getboolasync__action_52_external_call_52__linear",
          "kind": "http-call",
          "label": "Read bool from Preferences",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Get(key, defaultValue)"
        },
        {
          "id": "method:rzym3m:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:rzym3m:getboolasync__action_56_getboolasync_return_56_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail<bool>(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:rzym3m:getboolasync__entry__method:rzym3m:getboolasync__action_50_try_catch_50__linear",
          "from": "method:rzym3m:getboolasync__entry",
          "to": "method:rzym3m:getboolasync__action_50_try_catch_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rzym3m:getboolasync__action_50_try_catch_50__linear__method:rzym3m:getboolasync__action_50_getboolasync_try_50_0__try",
          "from": "method:rzym3m:getboolasync__action_50_try_catch_50__linear",
          "to": "method:rzym3m:getboolasync__action_50_getboolasync_try_50_0__try",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:rzym3m:getboolasync__action_50_getboolasync_try_50_0__try__method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return",
          "from": "method:rzym3m:getboolasync__action_50_getboolasync_try_50_0__try",
          "to": "method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return",
          "kind": "return",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return__method:rzym3m:getboolasync__action_52_external_call_52__linear",
          "from": "method:rzym3m:getboolasync__action_52_getboolasync_return_52_1__return",
          "to": "method:rzym3m:getboolasync__action_52_external_call_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rzym3m:getboolasync__action_52_external_call_52__linear__method:rzym3m:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "from": "method:rzym3m:getboolasync__action_52_external_call_52__linear",
          "to": "method:rzym3m:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "kind": "exception",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rzym3m:getboolasync__action_54_getboolasync_catch_54_2__catch__method:rzym3m:getboolasync__action_56_getboolasync_return_56_3__return",
          "from": "method:rzym3m:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "to": "method:rzym3m:getboolasync__action_56_getboolasync_return_56_3__return",
          "kind": "return",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 48,
        "end": 58
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 48,
          "summary": "Control-flow fragment extracted for method GetBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1w0f8ik:removeasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:1w0f8ik:removeasync",
      "ownerSymbolName": "RemoveAsync",
      "entryNodeId": "method:1w0f8ik:removeasync__entry",
      "exitNodeIds": [
        "method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return",
        "method:1w0f8ik:removeasync__action_69_removeasync_return_69_3__return"
      ],
      "nodes": [
        {
          "id": "method:1w0f8ik:removeasync__entry",
          "kind": "entry",
          "label": "RemoveAsync entry",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes a key from MAUI Preferences and returns a Fluent Result indicating success or failure."
        },
        {
          "id": "method:1w0f8ik:removeasync__action_62_try_catch_62__linear",
          "kind": "statement",
          "label": "Handle exceptions",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w0f8ik:removeasync__action_62_removeasync_try_62_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1w0f8ik:removeasync__action_64_external_call_64__linear",
          "kind": "http-call",
          "label": "Remove key from Preferences",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Remove(key)"
        },
        {
          "id": "method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:1w0f8ik:removeasync__action_67_removeasync_catch_67_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1w0f8ik:removeasync__action_69_removeasync_return_69_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:1w0f8ik:removeasync__entry__method:1w0f8ik:removeasync__action_62_try_catch_62__linear",
          "from": "method:1w0f8ik:removeasync__entry",
          "to": "method:1w0f8ik:removeasync__action_62_try_catch_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w0f8ik:removeasync__action_62_try_catch_62__linear__method:1w0f8ik:removeasync__action_62_removeasync_try_62_0__try",
          "from": "method:1w0f8ik:removeasync__action_62_try_catch_62__linear",
          "to": "method:1w0f8ik:removeasync__action_62_removeasync_try_62_0__try",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1w0f8ik:removeasync__action_62_removeasync_try_62_0__try__method:1w0f8ik:removeasync__action_64_external_call_64__linear",
          "from": "method:1w0f8ik:removeasync__action_62_removeasync_try_62_0__try",
          "to": "method:1w0f8ik:removeasync__action_64_external_call_64__linear",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w0f8ik:removeasync__action_64_external_call_64__linear__method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return",
          "from": "method:1w0f8ik:removeasync__action_64_external_call_64__linear",
          "to": "method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return",
          "kind": "return",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return__method:1w0f8ik:removeasync__action_67_removeasync_catch_67_2__catch",
          "from": "method:1w0f8ik:removeasync__action_65_removeasync_return_65_1__return",
          "to": "method:1w0f8ik:removeasync__action_67_removeasync_catch_67_2__catch",
          "kind": "exception",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1w0f8ik:removeasync__action_67_removeasync_catch_67_2__catch__method:1w0f8ik:removeasync__action_69_removeasync_return_69_3__return",
          "from": "method:1w0f8ik:removeasync__action_67_removeasync_catch_67_2__catch",
          "to": "method:1w0f8ik:removeasync__action_69_removeasync_return_69_3__return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 60,
        "end": 71
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 60,
          "summary": "Control-flow fragment extracted for method RemoveAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:h3fyyz:savesecurestring__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:h3fyyz:savesecurestring",
      "ownerSymbolName": "SaveSecureString",
      "entryNodeId": "method:h3fyyz:savesecurestring__entry",
      "exitNodeIds": [
        "method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return",
        "method:h3fyyz:savesecurestring__action_82_savesecurestring_return_82_4__return"
      ],
      "nodes": [
        {
          "id": "method:h3fyyz:savesecurestring__entry",
          "kind": "entry",
          "label": "SaveSecureString entry",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously saves a string to MAUI SecureStorage and returns a Fluent Result for success/failure."
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_75_try_catch_75__linear",
          "kind": "statement",
          "label": "Handle exceptions for secure save",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "method is async and returns Result directly (not Task.FromResult)"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_77_external_call_77__linear",
          "kind": "http-call",
          "label": "Write to SecureStorage (async)",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "await SecureStorage.Default.SetAsync(key, value)"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.81,
          "detail": "await SecureStorage.Default.SetAsync(key, value);"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 80,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 82,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:h3fyyz:savesecurestring__entry__method:h3fyyz:savesecurestring__action_75_try_catch_75__linear",
          "from": "method:h3fyyz:savesecurestring__entry",
          "to": "method:h3fyyz:savesecurestring__action_75_try_catch_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_75_try_catch_75__linear__method:h3fyyz:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "from": "method:h3fyyz:savesecurestring__action_75_try_catch_75__linear",
          "to": "method:h3fyyz:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_75_savesecurestring_try_75_0__try__method:h3fyyz:savesecurestring__action_77_external_call_77__linear",
          "from": "method:h3fyyz:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "to": "method:h3fyyz:savesecurestring__action_77_external_call_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_77_external_call_77__linear__method:h3fyyz:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "from": "method:h3fyyz:savesecurestring__action_77_external_call_77__linear",
          "to": "method:h3fyyz:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_77_savesecurestring_await_77_1__await__method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "from": "method:h3fyyz:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "to": "method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return__method:h3fyyz:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "from": "method:h3fyyz:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "to": "method:h3fyyz:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:h3fyyz:savesecurestring__action_80_savesecurestring_catch_80_3__catch__method:h3fyyz:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "from": "method:h3fyyz:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "to": "method:h3fyyz:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "kind": "return",
          "line": 82,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 73,
        "end": 84
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 73,
          "summary": "Control-flow fragment extracted for method SaveSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bfedhw:getsecurestring__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:1bfedhw:getsecurestring",
      "ownerSymbolName": "GetSecureString",
      "entryNodeId": "method:1bfedhw:getsecurestring__entry",
      "exitNodeIds": [
        "method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return",
        "method:1bfedhw:getsecurestring__action_94_getsecurestring_return_94_4__return"
      ],
      "nodes": [
        {
          "id": "method:1bfedhw:getsecurestring__entry",
          "kind": "entry",
          "label": "GetSecureString entry",
          "line": 86,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously retrieves a string from MAUI SecureStorage and returns it wrapped in a Fluent Result."
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_88_try_catch_88__linear",
          "kind": "statement",
          "label": "Handle exceptions for secure read",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.81,
          "detail": "return Result.Ok(await SecureStorage.Default.GetAsync(key));"
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(await SecureStorage.Default.GetAsync(key));"
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_external_call_90__linear",
          "kind": "http-call",
          "label": "Read from SecureStorage (async)",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "await SecureStorage.Default.GetAsync(key)"
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 94,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:1bfedhw:getsecurestring__entry__method:1bfedhw:getsecurestring__action_88_try_catch_88__linear",
          "from": "method:1bfedhw:getsecurestring__entry",
          "to": "method:1bfedhw:getsecurestring__action_88_try_catch_88__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_88_try_catch_88__linear__method:1bfedhw:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "from": "method:1bfedhw:getsecurestring__action_88_try_catch_88__linear",
          "to": "method:1bfedhw:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_88_getsecurestring_try_88_0__try__method:1bfedhw:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "from": "method:1bfedhw:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "to": "method:1bfedhw:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_getsecurestring_await_90_1__await__method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "from": "method:1bfedhw:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "to": "method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "kind": "return",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return__method:1bfedhw:getsecurestring__action_90_external_call_90__linear",
          "from": "method:1bfedhw:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "to": "method:1bfedhw:getsecurestring__action_90_external_call_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_90_external_call_90__linear__method:1bfedhw:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "from": "method:1bfedhw:getsecurestring__action_90_external_call_90__linear",
          "to": "method:1bfedhw:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "kind": "exception",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1bfedhw:getsecurestring__action_92_getsecurestring_catch_92_3__catch__method:1bfedhw:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "from": "method:1bfedhw:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "to": "method:1bfedhw:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 86,
        "end": 96
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 86,
          "summary": "Control-flow fragment extracted for method GetSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:kv7eey:removesecureasync__fragment",
      "ownerFileId": "file:d17zn6:mauistorageservice-cs",
      "ownerSymbolId": "method:kv7eey:removesecureasync",
      "ownerSymbolName": "RemoveSecureAsync",
      "entryNodeId": "method:kv7eey:removesecureasync__entry",
      "exitNodeIds": [
        "method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return",
        "method:kv7eey:removesecureasync__action_107_removesecureasync_return_107_3__return"
      ],
      "nodes": [
        {
          "id": "method:kv7eey:removesecureasync__entry",
          "kind": "entry",
          "label": "RemoveSecureAsync entry",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes a key from MAUI SecureStorage and returns a Fluent Result indicating success or failure."
        },
        {
          "id": "method:kv7eey:removesecureasync__action_100_try_catch_100__linear",
          "kind": "statement",
          "label": "Handle exceptions",
          "line": 100,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kv7eey:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 100,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:kv7eey:removesecureasync__action_102_external_call_102__linear",
          "kind": "http-call",
          "label": "Remove key from SecureStorage",
          "line": 102,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "SecureStorage.Default.Remove(key)"
        },
        {
          "id": "method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 103,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:kv7eey:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:kv7eey:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 107,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        }
      ],
      "edges": [
        {
          "id": "method:kv7eey:removesecureasync__entry__method:kv7eey:removesecureasync__action_100_try_catch_100__linear",
          "from": "method:kv7eey:removesecureasync__entry",
          "to": "method:kv7eey:removesecureasync__action_100_try_catch_100__linear",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kv7eey:removesecureasync__action_100_try_catch_100__linear__method:kv7eey:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "from": "method:kv7eey:removesecureasync__action_100_try_catch_100__linear",
          "to": "method:kv7eey:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:kv7eey:removesecureasync__action_100_removesecureasync_try_100_0__try__method:kv7eey:removesecureasync__action_102_external_call_102__linear",
          "from": "method:kv7eey:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "to": "method:kv7eey:removesecureasync__action_102_external_call_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kv7eey:removesecureasync__action_102_external_call_102__linear__method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "from": "method:kv7eey:removesecureasync__action_102_external_call_102__linear",
          "to": "method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "kind": "return",
          "line": 103,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return__method:kv7eey:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "from": "method:kv7eey:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "to": "method:kv7eey:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "kind": "exception",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:kv7eey:removesecureasync__action_105_removesecureasync_catch_105_2__catch__method:kv7eey:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "from": "method:kv7eey:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "to": "method:kv7eey:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "kind": "return",
          "line": 107,
          "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 98,
        "end": 109
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs",
          "line": 98,
          "summary": "Control-flow fragment extracted for method RemoveSecureAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:7atrx1:addinfrastructure__fragment",
      "ownerFileId": "file:r7svsj:dependencyinjection-cs",
      "ownerSymbolId": "method:7atrx1:addinfrastructure",
      "ownerSymbolName": "AddInfrastructure",
      "entryNodeId": "method:7atrx1:addinfrastructure__entry",
      "exitNodeIds": [
        "method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return",
        "method:7atrx1:addinfrastructure__action_134_return_134__return"
      ],
      "nodes": [
        {
          "id": "method:7atrx1:addinfrastructure__entry",
          "kind": "entry",
          "label": "AddInfrastructure entry",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.99,
          "detail": "Configures and registers persistence (Postgres/Sqlite), external clients (Qdrant, Neo4j), Hangfire, AI settings/pipelines/clients, application service implementations, and authorization into the DI container."
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__condition",
          "kind": "condition",
          "label": "Choose DB provider (Postgres vs Sqlite)",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "if Postgres connection string present use Npgsql; else use Sqlite. Registers both AddDbContextFactory and AddDbContext in each branch"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__true",
          "kind": "branch-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__false",
          "kind": "branch-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "kind": "statement",
          "label": "merge",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(pgConnectionString)",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(pgConnectionString))"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_36_service_registration_36__linear",
          "kind": "statement",
          "label": "Register AppDbContext factory scoped",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.AddDbContextFactory<AppDbContext>(..., ServiceLifetime.Scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type_",
          "kind": "call",
          "label": "AppDbContext (type)",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "pgConnectionString or sqliteConnectionString passed into UseNpgsql/UseSqlite options"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T_",
          "kind": "call",
          "label": "AddDbContextFactory<T>",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "AppDbContext factory with DB provider options"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_41_service_registration_41__linear",
          "kind": "statement",
          "label": "Register AppDbContext scoped",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.AddDbContext<AppDbContext>(...)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T_",
          "kind": "call",
          "label": "AddDbContext<T>",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "AppDbContext with DB provider options"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_57_service_registration_57__linear",
          "kind": "statement",
          "label": "Register Qdrant client singleton",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.AddSingleton<QdrantClient>(...)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient_",
          "kind": "call",
          "label": "AddSingleton<QdrantClient>",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "new QdrantClient(new Uri(qdrantUrl))"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_61_service_registration_61__linear",
          "kind": "statement",
          "label": "Register Neo4j driver singleton",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.AddSingleton<IDriver>(...)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver",
          "kind": "call",
          "label": "GraphDatabase.Driver",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "neo4jUrl, AuthTokens.None"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(pgConnectionString)",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(pgConnectionString))"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__condition",
          "kind": "condition",
          "label": "pgConnectionString not empty",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "If Postgres present, configures Hangfire with PostgreSqlStorage and starts server"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__true",
          "kind": "branch-true",
          "label": "register hangfire",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__false",
          "kind": "branch-false",
          "label": "skip hangfire",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "kind": "statement",
          "label": "merge",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_66_AddHangfire",
          "kind": "call",
          "label": "AddHangfire",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "Configure Hangfire with PostgreSqlStorage using pgConnectionString"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer",
          "kind": "call",
          "label": "AddHangfireServer",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "start Hangfire server"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_72_configure_72__linear",
          "kind": "statement",
          "label": "Bind configuration sections",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.Configure<AiSettings>, services.Configure<StripeSettings>, binds AiSettings instance"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_72_AiSettings_type_",
          "kind": "call",
          "label": "AiSettings (type)",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "Configure and bind AiSettings from configuration"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection_",
          "kind": "call",
          "label": "Get<T> (IConfigurationSection)",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "Bind AiSettings section into AiSettings instance"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition",
          "kind": "condition",
          "label": "aiSettings.ApiKey null/whitespace or 'PLACEHOLDER'",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "Console.WriteLine warning about missing AI API key"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__true",
          "kind": "branch-true",
          "label": "warning",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "kind": "statement",
          "label": "merge",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(aiSettings.ApiKey) || aiSettings.ApiKey == \"PLACEHOLDER\"",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(aiSettings.ApiKey) || aiSettings.ApiKey == \"PLACEHOLDER\")"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_81_retry_policy_81__linear",
          "kind": "statement",
          "label": "AI retry resilience pipeline",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "Adds exponential backoff retry with jitter, max attempts from AiSettings, and custom ShouldHandle predicate checking exception messages (lines 85-91)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline",
          "kind": "call",
          "label": "AddResiliencePipeline",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "define 'ai-retry' retry strategy with PredicateBuilder"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate",
          "kind": "call",
          "label": "ShouldHandle predicate",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "exception -> check message contains 429/Too Many Requests/quota/503/ServiceUnavailable/demand"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_99_service_registration_99__linear",
          "kind": "statement",
          "label": "Register AI chat and embedding clients",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "services.AddChatClient and services.AddEmbeddingGenerator using Gemini clients configured with AiSettings"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_99_AddChatClient",
          "kind": "call",
          "label": "AddChatClient",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "GeminiChatClient configured with AiSettings.ApiKey and ModelId"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator",
          "kind": "call",
          "label": "AddEmbeddingGenerator",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "GeminiEmbeddingGenerator configured with ApiKey and EmbeddingModel"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_111_service_registration_111__linear",
          "kind": "statement",
          "label": "Register application-layer services",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "Registers KnowledgeService, EpubReaderService, EpubMetadataExtractor, BookStorageService, EbookRepository, SignalRSyncBroadcaster with appropriate lifetimes (scoped/transient)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type_",
          "kind": "call",
          "label": "KnowledgeService (type)",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IKnowledgeService (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type_",
          "kind": "call",
          "label": "EpubReaderService (type)",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IEpubReader (transient)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type_",
          "kind": "call",
          "label": "EpubMetadataExtractor (type)",
          "line": 114,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IEpubMetadataExtractor (transient)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type_",
          "kind": "call",
          "label": "BookStorageService (type)",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IBookStorageService (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type_",
          "kind": "call",
          "label": "EbookRepository (type)",
          "line": 121,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IEbookRepository (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type_",
          "kind": "call",
          "label": "SignalRSyncBroadcaster (type)",
          "line": 124,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as ISyncBroadcaster (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_126_authorization_126__linear",
          "kind": "statement",
          "label": "Add 'ProUser' policy and handler",
          "line": 126,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "options.AddPolicy('ProUser', ...); registers ProUserHandler as IAuthorizationHandler"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type_",
          "kind": "call",
          "label": "ProUserHandler (type)",
          "line": 131,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IAuthorizationHandler (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type_",
          "kind": "call",
          "label": "InfrastructureMarker (type)",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "registered as IInfrastructureMarker (scoped)"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "return services;"
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_134_return_134__return",
          "kind": "return",
          "label": "Return modified IServiceCollection",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "returns services to allow chaining"
        }
      ],
      "edges": [
        {
          "id": "method:7atrx1:addinfrastructure__entry__method:7atrx1:addinfrastructure__action_33_branch_33__condition",
          "from": "method:7atrx1:addinfrastructure__entry",
          "to": "method:7atrx1:addinfrastructure__action_33_branch_33__condition",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__condition__method:7atrx1:addinfrastructure__action_33_branch_33__true",
          "from": "method:7atrx1:addinfrastructure__action_33_branch_33__condition",
          "to": "method:7atrx1:addinfrastructure__action_33_branch_33__true",
          "kind": "condition-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__condition__method:7atrx1:addinfrastructure__action_33_branch_33__false",
          "from": "method:7atrx1:addinfrastructure__action_33_branch_33__condition",
          "to": "method:7atrx1:addinfrastructure__action_33_branch_33__false",
          "kind": "condition-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__true__method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "from": "method:7atrx1:addinfrastructure__action_33_branch_33__true",
          "to": "method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__false__method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "from": "method:7atrx1:addinfrastructure__action_33_branch_33__false",
          "to": "method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_33_branch_33__merge__method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition",
          "from": "method:7atrx1:addinfrastructure__action_33_branch_33__merge",
          "to": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition__method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__true",
          "from": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition",
          "to": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition__method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__false",
          "from": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__condition",
          "to": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__true__method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "from": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__true",
          "to": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__false__method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "from": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__false",
          "to": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge__method:7atrx1:addinfrastructure__action_36_service_registration_36__linear",
          "from": "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
          "to": "method:7atrx1:addinfrastructure__action_36_service_registration_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_36_service_registration_36__linear__call_method:7atrx1:addinfrastructure__call_36_AppDbContext_type_",
          "from": "method:7atrx1:addinfrastructure__action_36_service_registration_36__linear",
          "to": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type_",
          "kind": "call",
          "label": "pgConnectionString or sqliteConnectionString passed into UseNpgsql/UseSqlite options",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type___call_method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T_",
          "from": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type_",
          "to": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T_",
          "kind": "call",
          "label": "AppDbContext factory with DB provider options",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T___method:7atrx1:addinfrastructure__action_41_service_registration_41__linear",
          "from": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T_",
          "to": "method:7atrx1:addinfrastructure__action_41_service_registration_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_41_service_registration_41__linear__call_method:7atrx1:addinfrastructure__call_41_AddDbContext_T_",
          "from": "method:7atrx1:addinfrastructure__action_41_service_registration_41__linear",
          "to": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T_",
          "kind": "call",
          "label": "AppDbContext with DB provider options",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T___method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition",
          "from": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T_",
          "to": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition",
          "kind": "fallback",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition__method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__true",
          "from": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition",
          "to": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition__method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__false",
          "from": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__condition",
          "to": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__true__method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "from": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__true",
          "to": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__false__method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "from": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__false",
          "to": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.84
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge__method:7atrx1:addinfrastructure__action_57_service_registration_57__linear",
          "from": "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
          "to": "method:7atrx1:addinfrastructure__action_57_service_registration_57__linear",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_57_service_registration_57__linear__call_method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient_",
          "from": "method:7atrx1:addinfrastructure__action_57_service_registration_57__linear",
          "to": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient_",
          "kind": "call",
          "label": "new QdrantClient(new Uri(qdrantUrl))",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient___method:7atrx1:addinfrastructure__action_61_service_registration_61__linear",
          "from": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient_",
          "to": "method:7atrx1:addinfrastructure__action_61_service_registration_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_61_service_registration_61__linear__call_method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver",
          "from": "method:7atrx1:addinfrastructure__action_61_service_registration_61__linear",
          "to": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver",
          "kind": "call",
          "label": "neo4jUrl, AuthTokens.None",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver__method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition",
          "from": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver",
          "to": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition__method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__true",
          "from": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition",
          "to": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition__method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__false",
          "from": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__condition",
          "to": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__true__method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "from": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__true",
          "to": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__false__method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "from": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__false",
          "to": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge__method:7atrx1:addinfrastructure__action_64_branch_64__condition",
          "from": "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
          "to": "method:7atrx1:addinfrastructure__action_64_branch_64__condition",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__condition__method:7atrx1:addinfrastructure__action_64_branch_64__true",
          "from": "method:7atrx1:addinfrastructure__action_64_branch_64__condition",
          "to": "method:7atrx1:addinfrastructure__action_64_branch_64__true",
          "kind": "condition-true",
          "label": "register hangfire",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__condition__method:7atrx1:addinfrastructure__action_64_branch_64__false",
          "from": "method:7atrx1:addinfrastructure__action_64_branch_64__condition",
          "to": "method:7atrx1:addinfrastructure__action_64_branch_64__false",
          "kind": "condition-false",
          "label": "skip hangfire",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__true__method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "from": "method:7atrx1:addinfrastructure__action_64_branch_64__true",
          "to": "method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__false__method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "from": "method:7atrx1:addinfrastructure__action_64_branch_64__false",
          "to": "method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_64_branch_64__merge__call_method:7atrx1:addinfrastructure__call_66_AddHangfire",
          "from": "method:7atrx1:addinfrastructure__action_64_branch_64__merge",
          "to": "method:7atrx1:addinfrastructure__call_66_AddHangfire",
          "kind": "call",
          "label": "Configure Hangfire with PostgreSqlStorage using pgConnectionString",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_66_AddHangfire__call_method:7atrx1:addinfrastructure__call_69_AddHangfireServer",
          "from": "method:7atrx1:addinfrastructure__call_66_AddHangfire",
          "to": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer",
          "kind": "call",
          "label": "start Hangfire server",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer__method:7atrx1:addinfrastructure__action_72_configure_72__linear",
          "from": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer",
          "to": "method:7atrx1:addinfrastructure__action_72_configure_72__linear",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_72_configure_72__linear__call_method:7atrx1:addinfrastructure__call_72_AiSettings_type_",
          "from": "method:7atrx1:addinfrastructure__action_72_configure_72__linear",
          "to": "method:7atrx1:addinfrastructure__call_72_AiSettings_type_",
          "kind": "call",
          "label": "Configure and bind AiSettings from configuration",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_72_AiSettings_type___call_method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection_",
          "from": "method:7atrx1:addinfrastructure__call_72_AiSettings_type_",
          "to": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection_",
          "kind": "call",
          "label": "Bind AiSettings section into AiSettings instance",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection___method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition",
          "from": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection_",
          "to": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition__method:7atrx1:addinfrastructure__action_76_guard_clause_76__true",
          "from": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition",
          "to": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__true",
          "kind": "condition-true",
          "label": "warning",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition__method:7atrx1:addinfrastructure__action_76_guard_clause_76__false",
          "from": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__condition",
          "to": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__true__method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "from": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__true",
          "to": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__false__method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "from": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__false",
          "to": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge__method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition",
          "from": "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
          "to": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition__method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__true",
          "from": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition",
          "to": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition__method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__false",
          "from": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__condition",
          "to": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__true__method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "from": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__true",
          "to": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__false__method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "from": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__false",
          "to": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.78
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge__method:7atrx1:addinfrastructure__action_81_retry_policy_81__linear",
          "from": "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge",
          "to": "method:7atrx1:addinfrastructure__action_81_retry_policy_81__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_81_retry_policy_81__linear__call_method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline",
          "from": "method:7atrx1:addinfrastructure__action_81_retry_policy_81__linear",
          "to": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline",
          "kind": "call",
          "label": "define 'ai-retry' retry strategy with PredicateBuilder",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline__call_method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate",
          "from": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline",
          "to": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate",
          "kind": "call",
          "label": "exception -> check message contains 429/Too Many Requests/quota/503/ServiceUnavailable/demand",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate__method:7atrx1:addinfrastructure__action_99_service_registration_99__linear",
          "from": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate",
          "to": "method:7atrx1:addinfrastructure__action_99_service_registration_99__linear",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_99_service_registration_99__linear__call_method:7atrx1:addinfrastructure__call_99_AddChatClient",
          "from": "method:7atrx1:addinfrastructure__action_99_service_registration_99__linear",
          "to": "method:7atrx1:addinfrastructure__call_99_AddChatClient",
          "kind": "call",
          "label": "GeminiChatClient configured with AiSettings.ApiKey and ModelId",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_99_AddChatClient__call_method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator",
          "from": "method:7atrx1:addinfrastructure__call_99_AddChatClient",
          "to": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator",
          "kind": "call",
          "label": "GeminiEmbeddingGenerator configured with ApiKey and EmbeddingModel",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator__method:7atrx1:addinfrastructure__action_111_service_registration_111__linear",
          "from": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator",
          "to": "method:7atrx1:addinfrastructure__action_111_service_registration_111__linear",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_111_service_registration_111__linear__call_method:7atrx1:addinfrastructure__call_112_KnowledgeService_type_",
          "from": "method:7atrx1:addinfrastructure__action_111_service_registration_111__linear",
          "to": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type_",
          "kind": "call",
          "label": "registered as IKnowledgeService (scoped)",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type___call_method:7atrx1:addinfrastructure__call_113_EpubReaderService_type_",
          "from": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type_",
          "to": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type_",
          "kind": "call",
          "label": "registered as IEpubReader (transient)",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type___call_method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type_",
          "from": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type_",
          "to": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type_",
          "kind": "call",
          "label": "registered as IEpubMetadataExtractor (transient)",
          "line": 114,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type___call_method:7atrx1:addinfrastructure__call_118_BookStorageService_type_",
          "from": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type_",
          "to": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type_",
          "kind": "call",
          "label": "registered as IBookStorageService (scoped)",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type___call_method:7atrx1:addinfrastructure__call_121_EbookRepository_type_",
          "from": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type_",
          "to": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type_",
          "kind": "call",
          "label": "registered as IEbookRepository (scoped)",
          "line": 121,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type___call_method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type_",
          "from": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type_",
          "to": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type_",
          "kind": "call",
          "label": "registered as ISyncBroadcaster (scoped)",
          "line": 124,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type___method:7atrx1:addinfrastructure__action_126_authorization_126__linear",
          "from": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type_",
          "to": "method:7atrx1:addinfrastructure__action_126_authorization_126__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_126_authorization_126__linear__call_method:7atrx1:addinfrastructure__call_131_ProUserHandler_type_",
          "from": "method:7atrx1:addinfrastructure__action_126_authorization_126__linear",
          "to": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type_",
          "kind": "call",
          "label": "registered as IAuthorizationHandler (scoped)",
          "line": 131,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type___call_method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type_",
          "from": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type_",
          "to": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type_",
          "kind": "call",
          "label": "registered as IInfrastructureMarker (scoped)",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type___method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return",
          "from": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type_",
          "to": "method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return",
          "kind": "return",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return__method:7atrx1:addinfrastructure__action_134_return_134__return",
          "from": "method:7atrx1:addinfrastructure__action_134_addinfrastructure_return_134_4__return",
          "to": "method:7atrx1:addinfrastructure__action_134_return_134__return",
          "kind": "return",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type___jump_NexusReader_Data_Persistence_AppDbContext_cs_AppDbContext_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_36_AppDbContext_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence/AppDbContext.cs",
          "targetHint": "AppDbContext (type)",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AppDbContext (type) in NexusReader.Data.Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T___jump_unknown_AddDbContextFactory_T_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_36_AddDbContextFactory_T_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddDbContextFactory<T>",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddDbContextFactory<T> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T___jump_unknown_AddDbContext_T_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_41_AddDbContext_T_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddDbContext<T>",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddDbContext<T> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient___jump_unknown_AddSingleton_QdrantClient_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_57_AddSingleton_QdrantClient_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddSingleton<QdrantClient>",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddSingleton<QdrantClient> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver__jump_unknown_GraphDatabase_Driver",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_61_GraphDatabase_Driver",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GraphDatabase.Driver",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target GraphDatabase.Driver in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_66_AddHangfire__jump_unknown_AddHangfire",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_66_AddHangfire",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddHangfire",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddHangfire in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer__jump_unknown_AddHangfireServer",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_69_AddHangfireServer",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddHangfireServer",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddHangfireServer in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_72_AiSettings_type___jump_NexusReader_Infrastructure_Configuration_AiSettings_cs_AiSettings_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_72_AiSettings_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "targetHint": "AiSettings (type)",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AiSettings (type) in NexusReader.Infrastructure/Configuration/AiSettings.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection___jump_unknown_Get_T_IConfigurationSection_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_74_Get_T_IConfigurationSection_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Get<T> (IConfigurationSection)",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target Get<T> (IConfigurationSection) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline__jump_unknown_AddResiliencePipeline",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_81_AddResiliencePipeline",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddResiliencePipeline",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddResiliencePipeline in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate__jump_unknown_ShouldHandle_predicate",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_85_ShouldHandle_predicate",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ShouldHandle predicate",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target ShouldHandle predicate in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_99_AddChatClient__jump_unknown_AddChatClient",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_99_AddChatClient",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddChatClient",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddChatClient in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator__jump_unknown_AddEmbeddingGenerator",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_105_AddEmbeddingGenerator",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AddEmbeddingGenerator",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target AddEmbeddingGenerator in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type___jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_KnowledgeService_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_112_KnowledgeService_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "KnowledgeService (type)",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target KnowledgeService (type) in NexusReader.Infrastructure/Services/KnowledgeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type___jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_EpubReaderService_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_113_EpubReaderService_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "EpubReaderService (type)",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target EpubReaderService (type) in NexusReader.Infrastructure/Services/EpubReaderService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type___jump_NexusReader_Infrastructure_Services_EpubMetadataExtractor_cs_EpubMetadataExtractor_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_114_EpubMetadataExtractor_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "targetHint": "EpubMetadataExtractor (type)",
          "line": 114,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target EpubMetadataExtractor (type) in NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type___jump_NexusReader_Infrastructure_Services_BookStorageService_cs_BookStorageService_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_118_BookStorageService_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "BookStorageService (type)",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target BookStorageService (type) in NexusReader.Infrastructure/Services/BookStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type___jump_NexusReader_Infrastructure_Persistence_EbookRepository_cs_EbookRepository_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_121_EbookRepository_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "targetHint": "EbookRepository (type)",
          "line": 121,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target EbookRepository (type) in NexusReader.Infrastructure/Persistence/EbookRepository.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type___jump_NexusReader_Infrastructure_RealTime_SignalRSyncBroadcaster_cs_SignalRSyncBroadcaster_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_124_SignalRSyncBroadcaster_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "targetHint": "SignalRSyncBroadcaster (type)",
          "line": 124,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target SignalRSyncBroadcaster (type) in NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type___jump_NexusReader_Application_Security_Authorization_ProUserHandler_cs_ProUserHandler_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_131_ProUserHandler_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Security.Authorization/ProUserHandler.cs",
          "targetHint": "ProUserHandler (type)",
          "line": 131,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target ProUserHandler (type) in NexusReader.Application.Security.Authorization/ProUserHandler.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type___jump_NexusReader_Infrastructure_DependencyInjection_cs_InfrastructureMarker_type_",
          "fromNodeId": "method:7atrx1:addinfrastructure__call_132_InfrastructureMarker_type_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "targetHint": "InfrastructureMarker (type)",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target InfrastructureMarker (type) in NexusReader.Infrastructure/DependencyInjection.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:7atrx1:addinfrastructure__action_33_branch_33__merge",
        "method:7atrx1:addinfrastructure__action_34_addinfrastructure_branch_34_0__merge",
        "method:7atrx1:addinfrastructure__action_44_addinfrastructure_fallback_44_1__merge",
        "method:7atrx1:addinfrastructure__action_64_addinfrastructure_branch_64_2__merge",
        "method:7atrx1:addinfrastructure__action_64_branch_64__merge",
        "method:7atrx1:addinfrastructure__action_76_guard_clause_76__merge",
        "method:7atrx1:addinfrastructure__action_76_addinfrastructure_branch_76_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 31,
        "end": 134
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 31,
          "summary": "Control-flow fragment extracted for method AddInfrastructure.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1c1pgjw:assembly__fragment",
      "ownerFileId": "file:r7svsj:dependencyinjection-cs",
      "ownerSymbolId": "method:1c1pgjw:assembly",
      "ownerSymbolName": "Assembly",
      "entryNodeId": "method:1c1pgjw:assembly__entry",
      "exitNodeIds": [
        "method:1c1pgjw:assembly__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1c1pgjw:assembly__entry",
          "kind": "entry",
          "label": "Assembly entry",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.99,
          "detail": "Exposes the assembly that contains the DependencyInjection class (useful for scanning/registration reflection)."
        },
        {
          "id": "method:1c1pgjw:assembly__action_137_expose_metadata_137__linear",
          "kind": "statement",
          "label": "Return assembly for scanning",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7,
          "detail": "Used externally to locate types in this assembly"
        },
        {
          "id": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly",
          "kind": "call",
          "label": "typeof(DependencyInjection).Assembly",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88,
          "detail": "reflection on DependencyInjection type"
        },
        {
          "id": "method:1c1pgjw:assembly__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1c1pgjw:assembly__entry__method:1c1pgjw:assembly__action_137_expose_metadata_137__linear",
          "from": "method:1c1pgjw:assembly__entry",
          "to": "method:1c1pgjw:assembly__action_137_expose_metadata_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c1pgjw:assembly__action_137_expose_metadata_137__linear__call_method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly",
          "from": "method:1c1pgjw:assembly__action_137_expose_metadata_137__linear",
          "to": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly",
          "kind": "call",
          "label": "reflection on DependencyInjection type",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly__implicit_return",
          "from": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly",
          "to": "method:1c1pgjw:assembly__implicit_return",
          "kind": "return",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly__jump_NexusReader_Infrastructure_DependencyInjection_cs_typeof_DependencyInjection_Assembly",
          "fromNodeId": "method:1c1pgjw:assembly__call_137_typeof_DependencyInjection_Assembly",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "targetHint": "typeof(DependencyInjection).Assembly",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs",
          "reason": "Call target typeof(DependencyInjection).Assembly in NexusReader.Infrastructure/DependencyInjection.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 137,
        "end": 137
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/DependencyInjection.cs",
          "line": 137,
          "summary": "Control-flow fragment extracted for method Assembly.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:pslukv:computehash__fragment",
      "ownerFileId": "file:13kvr59:contenthasher-cs",
      "ownerSymbolId": "method:pslukv:computehash",
      "ownerSymbolName": "ComputeHash",
      "entryNodeId": "method:pslukv:computehash__entry",
      "exitNodeIds": [
        "method:pslukv:computehash__action_13_computehash_return_13_1__return",
        "method:pslukv:computehash__action_21_computehash_return_21_2__return",
        "method:pslukv:computehash__action_21_return_21__return",
        "method:pslukv:computehash__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:pslukv:computehash__entry",
          "kind": "entry",
          "label": "ComputeHash entry",
          "line": 9,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.99,
          "detail": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input."
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(input)",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "if input is null/empty/whitespace return string.Empty"
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__true",
          "kind": "branch-true",
          "label": "return-empty",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(input)",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(input))"
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_13_computehash_return_13_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 13,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "return string.Empty;"
        },
        {
          "id": "method:pslukv:computehash__action_16_orchestration_16__linear",
          "kind": "statement",
          "label": "Normalization call",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "calls Normalize(input) to produce a deterministic canonical input before hashing"
        },
        {
          "id": "method:pslukv:computehash__call_16_Normalize",
          "kind": "call",
          "label": "Normalize",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.88,
          "detail": "input string to normalize"
        },
        {
          "id": "method:pslukv:computehash__action_18_transform_18__linear",
          "kind": "statement",
          "label": "UTF-8 encoding",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "var inputBytes = Encoding.UTF8.GetBytes(normalizedInput) (framework API)"
        },
        {
          "id": "method:pslukv:computehash__action_19_external_call_19__linear",
          "kind": "http-call",
          "label": "SHA-256 hash computation",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "var hashBytes = SHA256.HashData(inputBytes) (framework API)"
        },
        {
          "id": "method:pslukv:computehash__action_21_computehash_return_21_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "return Convert.ToHexString(hashBytes).ToLowerInvariant();"
        },
        {
          "id": "method:pslukv:computehash__action_21_return_21__return",
          "kind": "return",
          "label": "Returns hash string",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "returns lower-case hex representation of SHA-256 hash"
        },
        {
          "id": "method:pslukv:computehash__action_21_transform_21__linear",
          "kind": "statement",
          "label": "Hex conversion and normalization",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "Convert.ToHexString(hashBytes).ToLowerInvariant() -> final hex string"
        },
        {
          "id": "method:pslukv:computehash__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:pslukv:computehash__entry__method:pslukv:computehash__action_11_guard_clause_11__condition",
          "from": "method:pslukv:computehash__entry",
          "to": "method:pslukv:computehash__action_11_guard_clause_11__condition",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__condition__method:pslukv:computehash__action_11_guard_clause_11__true",
          "from": "method:pslukv:computehash__action_11_guard_clause_11__condition",
          "to": "method:pslukv:computehash__action_11_guard_clause_11__true",
          "kind": "condition-true",
          "label": "return-empty",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__condition__method:pslukv:computehash__action_11_guard_clause_11__false",
          "from": "method:pslukv:computehash__action_11_guard_clause_11__condition",
          "to": "method:pslukv:computehash__action_11_guard_clause_11__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__true__method:pslukv:computehash__action_11_guard_clause_11__merge",
          "from": "method:pslukv:computehash__action_11_guard_clause_11__true",
          "to": "method:pslukv:computehash__action_11_guard_clause_11__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__false__method:pslukv:computehash__action_11_guard_clause_11__merge",
          "from": "method:pslukv:computehash__action_11_guard_clause_11__false",
          "to": "method:pslukv:computehash__action_11_guard_clause_11__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_11_guard_clause_11__merge__method:pslukv:computehash__action_11_computehash_branch_11_0__condition",
          "from": "method:pslukv:computehash__action_11_guard_clause_11__merge",
          "to": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition__method:pslukv:computehash__action_11_computehash_branch_11_0__true",
          "from": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition",
          "to": "method:pslukv:computehash__action_11_computehash_branch_11_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition__method:pslukv:computehash__action_11_computehash_branch_11_0__false",
          "from": "method:pslukv:computehash__action_11_computehash_branch_11_0__condition",
          "to": "method:pslukv:computehash__action_11_computehash_branch_11_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__true__method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "from": "method:pslukv:computehash__action_11_computehash_branch_11_0__true",
          "to": "method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__false__method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "from": "method:pslukv:computehash__action_11_computehash_branch_11_0__false",
          "to": "method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:pslukv:computehash__action_11_computehash_branch_11_0__merge__method:pslukv:computehash__action_13_computehash_return_13_1__return",
          "from": "method:pslukv:computehash__action_11_computehash_branch_11_0__merge",
          "to": "method:pslukv:computehash__action_13_computehash_return_13_1__return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_13_computehash_return_13_1__return__method:pslukv:computehash__action_16_orchestration_16__linear",
          "from": "method:pslukv:computehash__action_13_computehash_return_13_1__return",
          "to": "method:pslukv:computehash__action_16_orchestration_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_16_orchestration_16__linear__call_method:pslukv:computehash__call_16_Normalize",
          "from": "method:pslukv:computehash__action_16_orchestration_16__linear",
          "to": "method:pslukv:computehash__call_16_Normalize",
          "kind": "call",
          "label": "input string to normalize",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.88
        },
        {
          "id": "method:pslukv:computehash__call_16_Normalize__method:pslukv:computehash__action_18_transform_18__linear",
          "from": "method:pslukv:computehash__call_16_Normalize",
          "to": "method:pslukv:computehash__action_18_transform_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_18_transform_18__linear__method:pslukv:computehash__action_19_external_call_19__linear",
          "from": "method:pslukv:computehash__action_18_transform_18__linear",
          "to": "method:pslukv:computehash__action_19_external_call_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_19_external_call_19__linear__method:pslukv:computehash__action_21_computehash_return_21_2__return",
          "from": "method:pslukv:computehash__action_19_external_call_19__linear",
          "to": "method:pslukv:computehash__action_21_computehash_return_21_2__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_21_computehash_return_21_2__return__method:pslukv:computehash__action_21_return_21__return",
          "from": "method:pslukv:computehash__action_21_computehash_return_21_2__return",
          "to": "method:pslukv:computehash__action_21_return_21__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_21_return_21__return__method:pslukv:computehash__action_21_transform_21__linear",
          "from": "method:pslukv:computehash__action_21_return_21__return",
          "to": "method:pslukv:computehash__action_21_transform_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pslukv:computehash__action_21_transform_21__linear__implicit_return",
          "from": "method:pslukv:computehash__action_21_transform_21__linear",
          "to": "method:pslukv:computehash__implicit_return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:pslukv:computehash__call_16_Normalize__jump_NexusReader_Infrastructure_Helpers_ContentHasher_cs_Normalize",
          "fromNodeId": "method:pslukv:computehash__call_16_Normalize",
          "kind": "call-target",
          "targetNodeId": "method:1e84qm4:normalize",
          "targetPath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "targetHint": "Normalize",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "reason": "Call target Normalize resolved to NexusReader.Infrastructure/Helpers/ContentHasher.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:pslukv:computehash__action_11_guard_clause_11__merge",
        "method:pslukv:computehash__action_11_computehash_branch_11_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 9,
        "end": 22
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method ComputeHash.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1e84qm4:normalize__fragment",
      "ownerFileId": "file:13kvr59:contenthasher-cs",
      "ownerSymbolId": "method:1e84qm4:normalize",
      "ownerSymbolName": "Normalize",
      "entryNodeId": "method:1e84qm4:normalize__entry",
      "exitNodeIds": [
        "method:1e84qm4:normalize__action_28_normalize_return_28_1__return",
        "method:1e84qm4:normalize__action_35_normalize_return_35_2__return",
        "method:1e84qm4:normalize__action_35_return_35__return"
      ],
      "nodes": [
        {
          "id": "method:1e84qm4:normalize__entry",
          "kind": "entry",
          "label": "Normalize entry",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.99,
          "detail": "Produce a deterministic normalized version of the input by trimming, collapsing whitespace to single spaces, and lower-casing; returns empty for null/whitespace input."
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(input)",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "if input is null/empty/whitespace return string.Empty"
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__true",
          "kind": "branch-true",
          "label": "return-empty",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(input)",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(input))"
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_28_normalize_return_28_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "return string.Empty;"
        },
        {
          "id": "method:1e84qm4:normalize__action_31_transform_31__linear",
          "kind": "statement",
          "label": "Trim and collapse whitespace",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "Regex.Replace(input.Trim(), @\"\\s+\", \" \") collapses all consecutive whitespace into a single space (framework Regex)"
        },
        {
          "id": "method:1e84qm4:normalize__action_34_transform_34__linear",
          "kind": "statement",
          "label": "Case normalization",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "normalized.ToLowerInvariant() to produce case-insensitive canonical form"
        },
        {
          "id": "method:1e84qm4:normalize__action_35_normalize_return_35_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "return normalized.ToLowerInvariant();"
        },
        {
          "id": "method:1e84qm4:normalize__action_35_return_35__return",
          "kind": "return",
          "label": "Returns normalized string",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7,
          "detail": "returns trimmed, whitespace-collapsed, lower-cased string"
        }
      ],
      "edges": [
        {
          "id": "method:1e84qm4:normalize__entry__method:1e84qm4:normalize__action_26_guard_clause_26__condition",
          "from": "method:1e84qm4:normalize__entry",
          "to": "method:1e84qm4:normalize__action_26_guard_clause_26__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__condition__method:1e84qm4:normalize__action_26_guard_clause_26__true",
          "from": "method:1e84qm4:normalize__action_26_guard_clause_26__condition",
          "to": "method:1e84qm4:normalize__action_26_guard_clause_26__true",
          "kind": "condition-true",
          "label": "return-empty",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__condition__method:1e84qm4:normalize__action_26_guard_clause_26__false",
          "from": "method:1e84qm4:normalize__action_26_guard_clause_26__condition",
          "to": "method:1e84qm4:normalize__action_26_guard_clause_26__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__true__method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "from": "method:1e84qm4:normalize__action_26_guard_clause_26__true",
          "to": "method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__false__method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "from": "method:1e84qm4:normalize__action_26_guard_clause_26__false",
          "to": "method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_26_guard_clause_26__merge__method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition",
          "from": "method:1e84qm4:normalize__action_26_guard_clause_26__merge",
          "to": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition__method:1e84qm4:normalize__action_26_normalize_branch_26_0__true",
          "from": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition",
          "to": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition__method:1e84qm4:normalize__action_26_normalize_branch_26_0__false",
          "from": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__condition",
          "to": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__true__method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "from": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__true",
          "to": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__false__method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "from": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__false",
          "to": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge__method:1e84qm4:normalize__action_28_normalize_return_28_1__return",
          "from": "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge",
          "to": "method:1e84qm4:normalize__action_28_normalize_return_28_1__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_28_normalize_return_28_1__return__method:1e84qm4:normalize__action_31_transform_31__linear",
          "from": "method:1e84qm4:normalize__action_28_normalize_return_28_1__return",
          "to": "method:1e84qm4:normalize__action_31_transform_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_31_transform_31__linear__method:1e84qm4:normalize__action_34_transform_34__linear",
          "from": "method:1e84qm4:normalize__action_31_transform_31__linear",
          "to": "method:1e84qm4:normalize__action_34_transform_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_34_transform_34__linear__method:1e84qm4:normalize__action_35_normalize_return_35_2__return",
          "from": "method:1e84qm4:normalize__action_34_transform_34__linear",
          "to": "method:1e84qm4:normalize__action_35_normalize_return_35_2__return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1e84qm4:normalize__action_35_normalize_return_35_2__return__method:1e84qm4:normalize__action_35_return_35__return",
          "from": "method:1e84qm4:normalize__action_35_normalize_return_35_2__return",
          "to": "method:1e84qm4:normalize__action_35_return_35__return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1e84qm4:normalize__action_26_guard_clause_26__merge",
        "method:1e84qm4:normalize__action_26_normalize_branch_26_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 24,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "line": 24,
          "summary": "Control-flow fragment extracted for method Normalize.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1diht7t:repair__fragment",
      "ownerFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "ownerSymbolId": "method:1diht7t:repair",
      "ownerSymbolName": "Repair",
      "entryNodeId": "method:1diht7t:repair__entry",
      "exitNodeIds": [
        "method:1diht7t:repair__action_64_repair_return_64_18__return",
        "method:1diht7t:repair__action_64_return_64__return",
        "method:1diht7t:repair__action_67_repair_return_67_19__return"
      ],
      "nodes": [
        {
          "id": "method:1diht7t:repair__entry",
          "kind": "entry",
          "label": "Repair entry",
          "line": 8,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.99,
          "detail": "Inspect a JSON string and attempt to repair common truncation/malformed scenarios by trimming, pruning trailing garbage, and appending missing closing characters."
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(json)",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "if input is null/whitespace returns it immediately"
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__true",
          "kind": "branch-true",
          "label": "return-original",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(json)",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(json)) return json;"
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_11_transformation_11__linear",
          "kind": "statement",
          "label": "Trim input",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "json = json.Trim() to remove surrounding whitespace"
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__condition",
          "kind": "condition",
          "label": "!json.EndsWith(\"}\") && !json.EndsWith(\"]\")",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (!json.EndsWith(\"}\") && !json.EndsWith(\"]\"))"
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__condition",
          "kind": "condition",
          "label": "not EndsWith('}') and not EndsWith(']')",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "If JSON doesn't end with '}' or ']', executes repair logic; otherwise returns original"
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__true",
          "kind": "branch-true",
          "label": "attempt-repair",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__false",
          "kind": "branch-false",
          "label": "no-repair-needed",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_18_extraction_18__linear",
          "kind": "statement",
          "label": "Locate last plausible cut point",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "Finds last index of ',', '}', and ']' (lines 18-20) and computes cutoff using Math.Max (line 22)"
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__condition",
          "kind": "condition",
          "label": "cutoff > 0",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "json = json.Substring(0, cutoff) to remove trailing noise (line 27)"
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__true",
          "kind": "branch-true",
          "label": "prune-garbage",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__false",
          "kind": "branch-false",
          "label": "skip-pruning",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__merge",
          "kind": "statement",
          "label": "merge",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__condition",
          "kind": "condition",
          "label": "cutoff > 0",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (cutoff > 0)"
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_31_state_init_31__linear",
          "kind": "statement",
          "label": "Prepare stack and string/escape state",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "Creates Stack<char>, inString=false, escaped=false (lines 31-33)"
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "kind": "loop-entry",
          "label": "char c in json",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86,
          "detail": "foreach (char c in json)"
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_body",
          "kind": "loop-body",
          "label": "foreach (char c in json)",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_entry",
          "kind": "loop-entry",
          "label": "Iterate characters to rebuild structural stack",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "foreach char: handle escape toggling (line 37-38), toggle inString on '\"' (line 39), skip content inside strings (line 40), push '{'/'[' (line 42), and match/pop on '}'/']' (lines 43-51). This implements bracket matching for unclosed structures."
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_body",
          "kind": "loop-body",
          "label": "foreach char: handle escape toggling (line 37-38), toggle inString on '\"' (line 39), skip content inside strings (line 40), push '{'/'[' (line 42), and match/pop on '}'/']' (lines 43-51). This implements bracket matching for unclosed structures.",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition",
          "kind": "condition",
          "label": "escaped",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9,
          "detail": "if (escaped) { escaped = false; continue; }"
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition",
          "kind": "condition",
          "label": "c == '\\\\'",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9,
          "detail": "if (c == '\\\\') { escaped = true; continue; }"
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition",
          "kind": "condition",
          "label": "c == '\"'",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9,
          "detail": "if (c == '\"') { inString = !inString; continue; }"
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition",
          "kind": "condition",
          "label": "inString",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9,
          "detail": "if (inString) continue;"
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__condition",
          "kind": "condition",
          "label": "c == '{' || c == '[') stack.Push(c",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (c == '{' || c == '[') stack.Push(c);"
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__true",
          "kind": "branch-true",
          "label": "true",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__false",
          "kind": "branch-false",
          "label": "false",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84,
          "detail": "else if (c == '}' || c == ']')"
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__condition",
          "kind": "condition",
          "label": "c == '}' || c == ']'",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "else if (c == '}' || c == ']')"
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__condition",
          "kind": "condition",
          "label": "stack.Count > 0",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (stack.Count > 0)"
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__true",
          "kind": "branch-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__false",
          "kind": "branch-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__condition",
          "kind": "condition",
          "label": "(c == '}' && last == '{') || (c == ']' && last == '[')",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if ((c == '}' && last == '{') || (c == ']' && last == '['))"
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__true",
          "kind": "branch-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__false",
          "kind": "branch-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_state_based_action_55__linear",
          "kind": "statement",
          "label": "Handle unterminated string",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "builder.Append('\"') to close an open string"
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__condition",
          "kind": "condition",
          "label": "inString) builder.Append('\"'",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (inString) builder.Append('\"');"
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__true",
          "kind": "branch-true",
          "label": "true",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__false",
          "kind": "branch-false",
          "label": "false",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "kind": "statement",
          "label": "merge",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "kind": "loop-entry",
          "label": "stack.Count > 0",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86,
          "detail": "while (stack.Count > 0)"
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_body",
          "kind": "loop-body",
          "label": "while (stack.Count > 0)",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_entry",
          "kind": "loop-entry",
          "label": "Append closing characters for remaining open brackets/braces",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "While stack not empty, pop and append '}' for '{' and ']' for '[' (lines 57-62)"
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_body",
          "kind": "loop-body",
          "label": "While stack not empty, pop and append '}' for '{' and ']' for '[' (lines 57-62)",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__condition",
          "kind": "condition",
          "label": "c == '{') builder.Append(\"}\"",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "if (c == '{') builder.Append(\"}\");"
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__true",
          "kind": "branch-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__false",
          "kind": "branch-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84,
          "detail": "else if (c == '[') builder.Append(\"]\");"
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__condition",
          "kind": "condition",
          "label": "c == '[') builder.Append(\"]\"",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78,
          "detail": "else if (c == '[') builder.Append(\"]\");"
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__true",
          "kind": "branch-true",
          "label": "true",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__false",
          "kind": "branch-false",
          "label": "false",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "kind": "statement",
          "label": "merge",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_64_repair_return_64_18__return",
          "kind": "return",
          "label": "Returns result",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "return builder.ToString();"
        },
        {
          "id": "method:1diht7t:repair__action_64_return_64__return",
          "kind": "return",
          "label": "Return repaired JSON",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "Returns builder.ToString() after repairs; otherwise returns original json (line 67)"
        },
        {
          "id": "method:1diht7t:repair__action_67_repair_return_67_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7,
          "detail": "return json;"
        }
      ],
      "edges": [
        {
          "id": "method:1diht7t:repair__entry__method:1diht7t:repair__action_10_guard_clause_10__condition",
          "from": "method:1diht7t:repair__entry",
          "to": "method:1diht7t:repair__action_10_guard_clause_10__condition",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__condition__method:1diht7t:repair__action_10_guard_clause_10__true",
          "from": "method:1diht7t:repair__action_10_guard_clause_10__condition",
          "to": "method:1diht7t:repair__action_10_guard_clause_10__true",
          "kind": "condition-true",
          "label": "return-original",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__condition__method:1diht7t:repair__action_10_guard_clause_10__false",
          "from": "method:1diht7t:repair__action_10_guard_clause_10__condition",
          "to": "method:1diht7t:repair__action_10_guard_clause_10__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__true__method:1diht7t:repair__action_10_guard_clause_10__merge",
          "from": "method:1diht7t:repair__action_10_guard_clause_10__true",
          "to": "method:1diht7t:repair__action_10_guard_clause_10__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__false__method:1diht7t:repair__action_10_guard_clause_10__merge",
          "from": "method:1diht7t:repair__action_10_guard_clause_10__false",
          "to": "method:1diht7t:repair__action_10_guard_clause_10__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_10_guard_clause_10__merge__method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition",
          "from": "method:1diht7t:repair__action_10_guard_clause_10__merge",
          "to": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition__method:1diht7t:repair__action_10_repair_guard_clause_10_0__true",
          "from": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition",
          "to": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition__method:1diht7t:repair__action_10_repair_guard_clause_10_0__false",
          "from": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__condition",
          "to": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__true__method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "from": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__true",
          "to": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__false__method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "from": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__false",
          "to": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge__method:1diht7t:repair__action_11_transformation_11__linear",
          "from": "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
          "to": "method:1diht7t:repair__action_11_transformation_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_11_transformation_11__linear__method:1diht7t:repair__action_14_repair_branch_14_1__condition",
          "from": "method:1diht7t:repair__action_11_transformation_11__linear",
          "to": "method:1diht7t:repair__action_14_repair_branch_14_1__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__condition__method:1diht7t:repair__action_14_repair_branch_14_1__true",
          "from": "method:1diht7t:repair__action_14_repair_branch_14_1__condition",
          "to": "method:1diht7t:repair__action_14_repair_branch_14_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__condition__method:1diht7t:repair__action_14_repair_branch_14_1__false",
          "from": "method:1diht7t:repair__action_14_repair_branch_14_1__condition",
          "to": "method:1diht7t:repair__action_14_repair_branch_14_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__true__method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "from": "method:1diht7t:repair__action_14_repair_branch_14_1__true",
          "to": "method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__false__method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "from": "method:1diht7t:repair__action_14_repair_branch_14_1__false",
          "to": "method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_14_repair_branch_14_1__merge__method:1diht7t:repair__action_14_branch_14__condition",
          "from": "method:1diht7t:repair__action_14_repair_branch_14_1__merge",
          "to": "method:1diht7t:repair__action_14_branch_14__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__condition__method:1diht7t:repair__action_14_branch_14__true",
          "from": "method:1diht7t:repair__action_14_branch_14__condition",
          "to": "method:1diht7t:repair__action_14_branch_14__true",
          "kind": "condition-true",
          "label": "attempt-repair",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__condition__method:1diht7t:repair__action_14_branch_14__false",
          "from": "method:1diht7t:repair__action_14_branch_14__condition",
          "to": "method:1diht7t:repair__action_14_branch_14__false",
          "kind": "condition-false",
          "label": "no-repair-needed",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__true__method:1diht7t:repair__action_14_branch_14__merge",
          "from": "method:1diht7t:repair__action_14_branch_14__true",
          "to": "method:1diht7t:repair__action_14_branch_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__false__method:1diht7t:repair__action_14_branch_14__merge",
          "from": "method:1diht7t:repair__action_14_branch_14__false",
          "to": "method:1diht7t:repair__action_14_branch_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_14_branch_14__merge__method:1diht7t:repair__action_18_extraction_18__linear",
          "from": "method:1diht7t:repair__action_14_branch_14__merge",
          "to": "method:1diht7t:repair__action_18_extraction_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_18_extraction_18__linear__method:1diht7t:repair__action_24_guard_clause_24__condition",
          "from": "method:1diht7t:repair__action_18_extraction_18__linear",
          "to": "method:1diht7t:repair__action_24_guard_clause_24__condition",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__condition__method:1diht7t:repair__action_24_guard_clause_24__true",
          "from": "method:1diht7t:repair__action_24_guard_clause_24__condition",
          "to": "method:1diht7t:repair__action_24_guard_clause_24__true",
          "kind": "condition-true",
          "label": "prune-garbage",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__condition__method:1diht7t:repair__action_24_guard_clause_24__false",
          "from": "method:1diht7t:repair__action_24_guard_clause_24__condition",
          "to": "method:1diht7t:repair__action_24_guard_clause_24__false",
          "kind": "condition-false",
          "label": "skip-pruning",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__true__method:1diht7t:repair__action_24_guard_clause_24__merge",
          "from": "method:1diht7t:repair__action_24_guard_clause_24__true",
          "to": "method:1diht7t:repair__action_24_guard_clause_24__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__false__method:1diht7t:repair__action_24_guard_clause_24__merge",
          "from": "method:1diht7t:repair__action_24_guard_clause_24__false",
          "to": "method:1diht7t:repair__action_24_guard_clause_24__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_24_guard_clause_24__merge__method:1diht7t:repair__action_24_repair_branch_24_2__condition",
          "from": "method:1diht7t:repair__action_24_guard_clause_24__merge",
          "to": "method:1diht7t:repair__action_24_repair_branch_24_2__condition",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__condition__method:1diht7t:repair__action_24_repair_branch_24_2__true",
          "from": "method:1diht7t:repair__action_24_repair_branch_24_2__condition",
          "to": "method:1diht7t:repair__action_24_repair_branch_24_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__condition__method:1diht7t:repair__action_24_repair_branch_24_2__false",
          "from": "method:1diht7t:repair__action_24_repair_branch_24_2__condition",
          "to": "method:1diht7t:repair__action_24_repair_branch_24_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__true__method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "from": "method:1diht7t:repair__action_24_repair_branch_24_2__true",
          "to": "method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__false__method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "from": "method:1diht7t:repair__action_24_repair_branch_24_2__false",
          "to": "method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_24_repair_branch_24_2__merge__method:1diht7t:repair__action_31_state_init_31__linear",
          "from": "method:1diht7t:repair__action_24_repair_branch_24_2__merge",
          "to": "method:1diht7t:repair__action_31_state_init_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_31_state_init_31__linear__method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "from": "method:1diht7t:repair__action_31_state_init_31__linear",
          "to": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry__method:1diht7t:repair__action_35_repair_loop_35_3__loop_body",
          "from": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "to": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_body",
          "kind": "loop-body",
          "label": "char c in json",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_body__method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "from": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_body",
          "to": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry__method:1diht7t:repair__action_35_repair_loop_35_3__loop_exit",
          "from": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
          "to": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_exit__method:1diht7t:repair__action_35_loop_35__loop_entry",
          "from": "method:1diht7t:repair__action_35_repair_loop_35_3__loop_exit",
          "to": "method:1diht7t:repair__action_35_loop_35__loop_entry",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_entry__method:1diht7t:repair__action_35_loop_35__loop_body",
          "from": "method:1diht7t:repair__action_35_loop_35__loop_entry",
          "to": "method:1diht7t:repair__action_35_loop_35__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_body__method:1diht7t:repair__action_35_loop_35__loop_entry",
          "from": "method:1diht7t:repair__action_35_loop_35__loop_body",
          "to": "method:1diht7t:repair__action_35_loop_35__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_entry__method:1diht7t:repair__action_35_loop_35__loop_exit",
          "from": "method:1diht7t:repair__action_35_loop_35__loop_entry",
          "to": "method:1diht7t:repair__action_35_loop_35__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_35_loop_35__loop_exit__method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition",
          "from": "method:1diht7t:repair__action_35_loop_35__loop_exit",
          "to": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition__method:1diht7t:repair__action_37_repair_guard_clause_37_4__true",
          "from": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition",
          "to": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition__method:1diht7t:repair__action_37_repair_guard_clause_37_4__false",
          "from": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__condition",
          "to": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__true__method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "from": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__true",
          "to": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__false__method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "from": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__false",
          "to": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge__method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition",
          "from": "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
          "to": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition__method:1diht7t:repair__action_38_repair_guard_clause_38_5__true",
          "from": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition",
          "to": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition__method:1diht7t:repair__action_38_repair_guard_clause_38_5__false",
          "from": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__condition",
          "to": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__true__method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "from": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__true",
          "to": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__false__method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "from": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__false",
          "to": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge__method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition",
          "from": "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
          "to": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition__method:1diht7t:repair__action_39_repair_guard_clause_39_6__true",
          "from": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition",
          "to": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition__method:1diht7t:repair__action_39_repair_guard_clause_39_6__false",
          "from": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__condition",
          "to": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__true__method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "from": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__true",
          "to": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__false__method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "from": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__false",
          "to": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge__method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition",
          "from": "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
          "to": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition__method:1diht7t:repair__action_40_repair_guard_clause_40_7__true",
          "from": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition",
          "to": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition__method:1diht7t:repair__action_40_repair_guard_clause_40_7__false",
          "from": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__condition",
          "to": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__true__method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "from": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__true",
          "to": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__false__method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "from": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__false",
          "to": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge__method:1diht7t:repair__action_42_repair_branch_42_8__condition",
          "from": "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
          "to": "method:1diht7t:repair__action_42_repair_branch_42_8__condition",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__condition__method:1diht7t:repair__action_42_repair_branch_42_8__true",
          "from": "method:1diht7t:repair__action_42_repair_branch_42_8__condition",
          "to": "method:1diht7t:repair__action_42_repair_branch_42_8__true",
          "kind": "condition-true",
          "label": "true",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__condition__method:1diht7t:repair__action_42_repair_branch_42_8__false",
          "from": "method:1diht7t:repair__action_42_repair_branch_42_8__condition",
          "to": "method:1diht7t:repair__action_42_repair_branch_42_8__false",
          "kind": "condition-false",
          "label": "false",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__true__method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "from": "method:1diht7t:repair__action_42_repair_branch_42_8__true",
          "to": "method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__false__method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "from": "method:1diht7t:repair__action_42_repair_branch_42_8__false",
          "to": "method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_42_repair_branch_42_8__merge__method:1diht7t:repair__action_43_repair_fallback_43_10__condition",
          "from": "method:1diht7t:repair__action_42_repair_branch_42_8__merge",
          "to": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition",
          "kind": "fallback",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition__method:1diht7t:repair__action_43_repair_fallback_43_10__true",
          "from": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition",
          "to": "method:1diht7t:repair__action_43_repair_fallback_43_10__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition__method:1diht7t:repair__action_43_repair_fallback_43_10__false",
          "from": "method:1diht7t:repair__action_43_repair_fallback_43_10__condition",
          "to": "method:1diht7t:repair__action_43_repair_fallback_43_10__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__true__method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "from": "method:1diht7t:repair__action_43_repair_fallback_43_10__true",
          "to": "method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__false__method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "from": "method:1diht7t:repair__action_43_repair_fallback_43_10__false",
          "to": "method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_fallback_43_10__merge__method:1diht7t:repair__action_43_repair_branch_43_9__condition",
          "from": "method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
          "to": "method:1diht7t:repair__action_43_repair_branch_43_9__condition",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__condition__method:1diht7t:repair__action_43_repair_branch_43_9__true",
          "from": "method:1diht7t:repair__action_43_repair_branch_43_9__condition",
          "to": "method:1diht7t:repair__action_43_repair_branch_43_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__condition__method:1diht7t:repair__action_43_repair_branch_43_9__false",
          "from": "method:1diht7t:repair__action_43_repair_branch_43_9__condition",
          "to": "method:1diht7t:repair__action_43_repair_branch_43_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__true__method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "from": "method:1diht7t:repair__action_43_repair_branch_43_9__true",
          "to": "method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__false__method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "from": "method:1diht7t:repair__action_43_repair_branch_43_9__false",
          "to": "method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_43_repair_branch_43_9__merge__method:1diht7t:repair__action_45_repair_branch_45_11__condition",
          "from": "method:1diht7t:repair__action_43_repair_branch_43_9__merge",
          "to": "method:1diht7t:repair__action_45_repair_branch_45_11__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__condition__method:1diht7t:repair__action_45_repair_branch_45_11__true",
          "from": "method:1diht7t:repair__action_45_repair_branch_45_11__condition",
          "to": "method:1diht7t:repair__action_45_repair_branch_45_11__true",
          "kind": "condition-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__condition__method:1diht7t:repair__action_45_repair_branch_45_11__false",
          "from": "method:1diht7t:repair__action_45_repair_branch_45_11__condition",
          "to": "method:1diht7t:repair__action_45_repair_branch_45_11__false",
          "kind": "condition-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__true__method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "from": "method:1diht7t:repair__action_45_repair_branch_45_11__true",
          "to": "method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__false__method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "from": "method:1diht7t:repair__action_45_repair_branch_45_11__false",
          "to": "method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_45_repair_branch_45_11__merge__method:1diht7t:repair__action_48_repair_branch_48_12__condition",
          "from": "method:1diht7t:repair__action_45_repair_branch_45_11__merge",
          "to": "method:1diht7t:repair__action_48_repair_branch_48_12__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__condition__method:1diht7t:repair__action_48_repair_branch_48_12__true",
          "from": "method:1diht7t:repair__action_48_repair_branch_48_12__condition",
          "to": "method:1diht7t:repair__action_48_repair_branch_48_12__true",
          "kind": "condition-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__condition__method:1diht7t:repair__action_48_repair_branch_48_12__false",
          "from": "method:1diht7t:repair__action_48_repair_branch_48_12__condition",
          "to": "method:1diht7t:repair__action_48_repair_branch_48_12__false",
          "kind": "condition-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__true__method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "from": "method:1diht7t:repair__action_48_repair_branch_48_12__true",
          "to": "method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__false__method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "from": "method:1diht7t:repair__action_48_repair_branch_48_12__false",
          "to": "method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_48_repair_branch_48_12__merge__method:1diht7t:repair__action_55_state_based_action_55__linear",
          "from": "method:1diht7t:repair__action_48_repair_branch_48_12__merge",
          "to": "method:1diht7t:repair__action_55_state_based_action_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_55_state_based_action_55__linear__method:1diht7t:repair__action_55_repair_branch_55_13__condition",
          "from": "method:1diht7t:repair__action_55_state_based_action_55__linear",
          "to": "method:1diht7t:repair__action_55_repair_branch_55_13__condition",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__condition__method:1diht7t:repair__action_55_repair_branch_55_13__true",
          "from": "method:1diht7t:repair__action_55_repair_branch_55_13__condition",
          "to": "method:1diht7t:repair__action_55_repair_branch_55_13__true",
          "kind": "condition-true",
          "label": "true",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__condition__method:1diht7t:repair__action_55_repair_branch_55_13__false",
          "from": "method:1diht7t:repair__action_55_repair_branch_55_13__condition",
          "to": "method:1diht7t:repair__action_55_repair_branch_55_13__false",
          "kind": "condition-false",
          "label": "false",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__true__method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "from": "method:1diht7t:repair__action_55_repair_branch_55_13__true",
          "to": "method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__false__method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "from": "method:1diht7t:repair__action_55_repair_branch_55_13__false",
          "to": "method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_55_repair_branch_55_13__merge__method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "from": "method:1diht7t:repair__action_55_repair_branch_55_13__merge",
          "to": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry__method:1diht7t:repair__action_57_repair_loop_57_14__loop_body",
          "from": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "to": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_body",
          "kind": "loop-body",
          "label": "stack.Count > 0",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_body__method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "from": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_body",
          "to": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry__method:1diht7t:repair__action_57_repair_loop_57_14__loop_exit",
          "from": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
          "to": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_exit__method:1diht7t:repair__action_57_loop_57__loop_entry",
          "from": "method:1diht7t:repair__action_57_repair_loop_57_14__loop_exit",
          "to": "method:1diht7t:repair__action_57_loop_57__loop_entry",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_entry__method:1diht7t:repair__action_57_loop_57__loop_body",
          "from": "method:1diht7t:repair__action_57_loop_57__loop_entry",
          "to": "method:1diht7t:repair__action_57_loop_57__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_body__method:1diht7t:repair__action_57_loop_57__loop_entry",
          "from": "method:1diht7t:repair__action_57_loop_57__loop_body",
          "to": "method:1diht7t:repair__action_57_loop_57__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_entry__method:1diht7t:repair__action_57_loop_57__loop_exit",
          "from": "method:1diht7t:repair__action_57_loop_57__loop_entry",
          "to": "method:1diht7t:repair__action_57_loop_57__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_57_loop_57__loop_exit__method:1diht7t:repair__action_60_repair_branch_60_15__condition",
          "from": "method:1diht7t:repair__action_57_loop_57__loop_exit",
          "to": "method:1diht7t:repair__action_60_repair_branch_60_15__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__condition__method:1diht7t:repair__action_60_repair_branch_60_15__true",
          "from": "method:1diht7t:repair__action_60_repair_branch_60_15__condition",
          "to": "method:1diht7t:repair__action_60_repair_branch_60_15__true",
          "kind": "condition-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__condition__method:1diht7t:repair__action_60_repair_branch_60_15__false",
          "from": "method:1diht7t:repair__action_60_repair_branch_60_15__condition",
          "to": "method:1diht7t:repair__action_60_repair_branch_60_15__false",
          "kind": "condition-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__true__method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "from": "method:1diht7t:repair__action_60_repair_branch_60_15__true",
          "to": "method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__false__method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "from": "method:1diht7t:repair__action_60_repair_branch_60_15__false",
          "to": "method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_60_repair_branch_60_15__merge__method:1diht7t:repair__action_61_repair_fallback_61_17__condition",
          "from": "method:1diht7t:repair__action_60_repair_branch_60_15__merge",
          "to": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition",
          "kind": "fallback",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition__method:1diht7t:repair__action_61_repair_fallback_61_17__true",
          "from": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition",
          "to": "method:1diht7t:repair__action_61_repair_fallback_61_17__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition__method:1diht7t:repair__action_61_repair_fallback_61_17__false",
          "from": "method:1diht7t:repair__action_61_repair_fallback_61_17__condition",
          "to": "method:1diht7t:repair__action_61_repair_fallback_61_17__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__true__method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "from": "method:1diht7t:repair__action_61_repair_fallback_61_17__true",
          "to": "method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__false__method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "from": "method:1diht7t:repair__action_61_repair_fallback_61_17__false",
          "to": "method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_fallback_61_17__merge__method:1diht7t:repair__action_61_repair_branch_61_16__condition",
          "from": "method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
          "to": "method:1diht7t:repair__action_61_repair_branch_61_16__condition",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__condition__method:1diht7t:repair__action_61_repair_branch_61_16__true",
          "from": "method:1diht7t:repair__action_61_repair_branch_61_16__condition",
          "to": "method:1diht7t:repair__action_61_repair_branch_61_16__true",
          "kind": "condition-true",
          "label": "true",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__condition__method:1diht7t:repair__action_61_repair_branch_61_16__false",
          "from": "method:1diht7t:repair__action_61_repair_branch_61_16__condition",
          "to": "method:1diht7t:repair__action_61_repair_branch_61_16__false",
          "kind": "condition-false",
          "label": "false",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__true__method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "from": "method:1diht7t:repair__action_61_repair_branch_61_16__true",
          "to": "method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__false__method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "from": "method:1diht7t:repair__action_61_repair_branch_61_16__false",
          "to": "method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1diht7t:repair__action_61_repair_branch_61_16__merge__method:1diht7t:repair__action_64_repair_return_64_18__return",
          "from": "method:1diht7t:repair__action_61_repair_branch_61_16__merge",
          "to": "method:1diht7t:repair__action_64_repair_return_64_18__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_64_repair_return_64_18__return__method:1diht7t:repair__action_64_return_64__return",
          "from": "method:1diht7t:repair__action_64_repair_return_64_18__return",
          "to": "method:1diht7t:repair__action_64_return_64__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1diht7t:repair__action_64_return_64__return__method:1diht7t:repair__action_67_repair_return_67_19__return",
          "from": "method:1diht7t:repair__action_64_return_64__return",
          "to": "method:1diht7t:repair__action_67_repair_return_67_19__return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1diht7t:repair__action_35_repair_loop_35_3__loop_body__method:1diht7t:repair__action_35_repair_loop_35_3__loop_entry",
        "method:1diht7t:repair__action_35_loop_35__loop_body__method:1diht7t:repair__action_35_loop_35__loop_entry",
        "method:1diht7t:repair__action_57_repair_loop_57_14__loop_body__method:1diht7t:repair__action_57_repair_loop_57_14__loop_entry",
        "method:1diht7t:repair__action_57_loop_57__loop_body__method:1diht7t:repair__action_57_loop_57__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1diht7t:repair__action_10_guard_clause_10__merge",
        "method:1diht7t:repair__action_10_repair_guard_clause_10_0__merge",
        "method:1diht7t:repair__action_14_repair_branch_14_1__merge",
        "method:1diht7t:repair__action_14_branch_14__merge",
        "method:1diht7t:repair__action_24_guard_clause_24__merge",
        "method:1diht7t:repair__action_24_repair_branch_24_2__merge",
        "method:1diht7t:repair__action_37_repair_guard_clause_37_4__merge",
        "method:1diht7t:repair__action_38_repair_guard_clause_38_5__merge",
        "method:1diht7t:repair__action_39_repair_guard_clause_39_6__merge",
        "method:1diht7t:repair__action_40_repair_guard_clause_40_7__merge",
        "method:1diht7t:repair__action_42_repair_branch_42_8__merge",
        "method:1diht7t:repair__action_43_repair_fallback_43_10__merge",
        "method:1diht7t:repair__action_43_repair_branch_43_9__merge",
        "method:1diht7t:repair__action_45_repair_branch_45_11__merge",
        "method:1diht7t:repair__action_48_repair_branch_48_12__merge",
        "method:1diht7t:repair__action_55_repair_branch_55_13__merge",
        "method:1diht7t:repair__action_60_repair_branch_60_15__merge",
        "method:1diht7t:repair__action_61_repair_fallback_61_17__merge",
        "method:1diht7t:repair__action_61_repair_branch_61_16__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 8,
        "end": 68
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method Repair.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xc3hml:tokenlimithandler__fragment",
      "ownerFileId": "file:38gozs:tokenlimithandler-cs",
      "ownerSymbolId": "method:1xc3hml:tokenlimithandler",
      "ownerSymbolName": "TokenLimitHandler",
      "entryNodeId": "method:1xc3hml:tokenlimithandler__entry",
      "exitNodeIds": [
        "method:1xc3hml:tokenlimithandler__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1xc3hml:tokenlimithandler__entry",
          "kind": "entry",
          "label": "TokenLimitHandler entry",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.99,
          "detail": "Ctor: receives and stores dependencies (DB context factory and UserManager)."
        },
        {
          "id": "method:1xc3hml:tokenlimithandler__action_16_note_16__linear",
          "kind": "statement",
          "label": "UserManager injected but unused in this file",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "UserManager<NexusUser> stored but not referenced elsewhere in this class"
        },
        {
          "id": "method:1xc3hml:tokenlimithandler__action_20_assign_20__linear",
          "kind": "statement",
          "label": "Store injected dependencies",
          "line": 20,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "_dbContextFactory = dbContextFactory; _userManager = userManager"
        },
        {
          "id": "method:1xc3hml:tokenlimithandler__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1xc3hml:tokenlimithandler__entry__method:1xc3hml:tokenlimithandler__action_16_note_16__linear",
          "from": "method:1xc3hml:tokenlimithandler__entry",
          "to": "method:1xc3hml:tokenlimithandler__action_16_note_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xc3hml:tokenlimithandler__action_16_note_16__linear__method:1xc3hml:tokenlimithandler__action_20_assign_20__linear",
          "from": "method:1xc3hml:tokenlimithandler__action_16_note_16__linear",
          "to": "method:1xc3hml:tokenlimithandler__action_20_assign_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xc3hml:tokenlimithandler__action_20_assign_20__linear__implicit_return",
          "from": "method:1xc3hml:tokenlimithandler__action_20_assign_20__linear",
          "to": "method:1xc3hml:tokenlimithandler__implicit_return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 18,
        "end": 22
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method TokenLimitHandler.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13vwa6r:handlerequirementasync__fragment",
      "ownerFileId": "file:38gozs:tokenlimithandler-cs",
      "ownerSymbolId": "method:13vwa6r:handlerequirementasync",
      "ownerSymbolName": "HandleRequirementAsync",
      "entryNodeId": "method:13vwa6r:handlerequirementasync__entry",
      "exitNodeIds": [
        "method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return",
        "method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return",
        "method:13vwa6r:handlerequirementasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13vwa6r:handlerequirementasync__entry",
          "kind": "entry",
          "label": "HandleRequirementAsync entry",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.99,
          "detail": "Authorization handler entrypoint: load current user (including subscription) and succeed the requirement if the user has remaining AI tokens or an unlimited plan."
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_28_handlerequirementasync_repository_read_28_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.86,
          "detail": "var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_28_external_resource_28__linear",
          "kind": "statement",
          "label": "Read user id from ClaimsPrincipal",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "context.User.FindFirstValue(ClaimTypes.NameIdentifier) — reads authenticated user's id"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition",
          "kind": "condition",
          "label": "userId == null",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "if (userId == null) { return; }"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__true",
          "kind": "branch-true",
          "label": "return (deny/stop)",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition",
          "kind": "condition",
          "label": "userId == null",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78,
          "detail": "if (userId == null)"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_34_resource_acquisition_34__linear",
          "kind": "statement",
          "label": "Create DB context via factory (scoped, disposed via using)",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "using var db = _dbContextFactory.CreateDbContext();"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_35_handlerequirementasync_await_35_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.81,
          "detail": "var user = await db.Users"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_35_db_read_35__linear",
          "kind": "statement",
          "label": "Load user including SubscriptionPlan",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "db.Users.Include(u => u.SubscriptionPlan).FirstOrDefaultAsync(u => u.Id == userId)"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "if (user == null) { return; }"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__true",
          "kind": "branch-true",
          "label": "return (deny/stop)",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78,
          "detail": "if (user == null)"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition",
          "kind": "condition",
          "label": "user.SubscriptionPlan?.IsUnlimitedTokens == true || user.AITokensUsed < user.AITokenLimit",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "If condition true then call context.Succeed(requirement)"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__true",
          "kind": "branch-true",
          "label": "succeed requirement",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__false",
          "kind": "branch-false",
          "label": "no action (authorization not granted here)",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "kind": "statement",
          "label": "merge",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition",
          "kind": "condition",
          "label": "user.SubscriptionPlan?.IsUnlimitedTokens == true || user.AITokensUsed < user.AITokenLimit",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78,
          "detail": "if (user.SubscriptionPlan?.IsUnlimitedTokens == true || user.AITokensUsed < user.AITokenLimit)"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_47_state_change_47__linear",
          "kind": "statement",
          "label": "Succeed authorization requirement",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7,
          "detail": "context.Succeed(requirement) to mark requirement satisfied"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_47_handlerequirementasync_repository_read_47_7__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.86,
          "detail": "context.Succeed(requirement);"
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 49,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13vwa6r:handlerequirementasync__entry__method:13vwa6r:handlerequirementasync__action_28_handlerequirementasync_repository_read_28_0__linear",
          "from": "method:13vwa6r:handlerequirementasync__entry",
          "to": "method:13vwa6r:handlerequirementasync__action_28_handlerequirementasync_repository_read_28_0__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_28_handlerequirementasync_repository_read_28_0__linear__method:13vwa6r:handlerequirementasync__action_28_external_resource_28__linear",
          "from": "method:13vwa6r:handlerequirementasync__action_28_handlerequirementasync_repository_read_28_0__linear",
          "to": "method:13vwa6r:handlerequirementasync__action_28_external_resource_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_28_external_resource_28__linear__method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_28_external_resource_28__linear",
          "to": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition__method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__true",
          "from": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__true",
          "kind": "condition-true",
          "label": "return (deny/stop)",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition__method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__false",
          "from": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__true__method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__true",
          "to": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__false__method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__false",
          "to": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge__method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition__method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__true",
          "from": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition__method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__false",
          "from": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__true__method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__true",
          "to": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__false__method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__false",
          "to": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge__method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return",
          "from": "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return__method:13vwa6r:handlerequirementasync__action_34_resource_acquisition_34__linear",
          "from": "method:13vwa6r:handlerequirementasync__action_31_handlerequirementasync_return_31_2__return",
          "to": "method:13vwa6r:handlerequirementasync__action_34_resource_acquisition_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_34_resource_acquisition_34__linear__method:13vwa6r:handlerequirementasync__action_35_handlerequirementasync_await_35_3__await",
          "from": "method:13vwa6r:handlerequirementasync__action_34_resource_acquisition_34__linear",
          "to": "method:13vwa6r:handlerequirementasync__action_35_handlerequirementasync_await_35_3__await",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_35_handlerequirementasync_await_35_3__await__method:13vwa6r:handlerequirementasync__action_35_db_read_35__linear",
          "from": "method:13vwa6r:handlerequirementasync__action_35_handlerequirementasync_await_35_3__await",
          "to": "method:13vwa6r:handlerequirementasync__action_35_db_read_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_35_db_read_35__linear__method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_35_db_read_35__linear",
          "to": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition__method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__true",
          "from": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__true",
          "kind": "condition-true",
          "label": "return (deny/stop)",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition__method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__false",
          "from": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__true__method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__true",
          "to": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__false__method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__false",
          "to": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge__method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition__method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__true",
          "from": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition__method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__false",
          "from": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__true__method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__true",
          "to": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__false__method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__false",
          "to": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge__method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return",
          "from": "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return",
          "kind": "return",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return__method:13vwa6r:handlerequirementasync__action_44_branch_44__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_41_handlerequirementasync_return_41_5__return",
          "to": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition__method:13vwa6r:handlerequirementasync__action_44_branch_44__true",
          "from": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_44_branch_44__true",
          "kind": "condition-true",
          "label": "succeed requirement",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition__method:13vwa6r:handlerequirementasync__action_44_branch_44__false",
          "from": "method:13vwa6r:handlerequirementasync__action_44_branch_44__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_44_branch_44__false",
          "kind": "condition-false",
          "label": "no action (authorization not granted here)",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__true__method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_44_branch_44__true",
          "to": "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__false__method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_44_branch_44__false",
          "to": "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge__method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition",
          "from": "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition__method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__true",
          "from": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition__method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__false",
          "from": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__condition",
          "to": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__true__method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__true",
          "to": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__false__method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "from": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__false",
          "to": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge__method:13vwa6r:handlerequirementasync__action_47_state_change_47__linear",
          "from": "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge",
          "to": "method:13vwa6r:handlerequirementasync__action_47_state_change_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_47_state_change_47__linear__method:13vwa6r:handlerequirementasync__action_47_handlerequirementasync_repository_read_47_7__linear",
          "from": "method:13vwa6r:handlerequirementasync__action_47_state_change_47__linear",
          "to": "method:13vwa6r:handlerequirementasync__action_47_handlerequirementasync_repository_read_47_7__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:13vwa6r:handlerequirementasync__action_47_handlerequirementasync_repository_read_47_7__linear__implicit_return",
          "from": "method:13vwa6r:handlerequirementasync__action_47_handlerequirementasync_repository_read_47_7__linear",
          "to": "method:13vwa6r:handlerequirementasync__implicit_return",
          "kind": "return",
          "line": 49,
          "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:13vwa6r:handlerequirementasync__action_29_guard_clause_29__merge",
        "method:13vwa6r:handlerequirementasync__action_29_handlerequirementasync_branch_29_1__merge",
        "method:13vwa6r:handlerequirementasync__action_39_guard_clause_39__merge",
        "method:13vwa6r:handlerequirementasync__action_39_handlerequirementasync_branch_39_4__merge",
        "method:13vwa6r:handlerequirementasync__action_44_branch_44__merge",
        "method:13vwa6r:handlerequirementasync__action_45_handlerequirementasync_branch_45_6__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 24,
        "end": 49
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs",
          "line": 24,
          "summary": "Control-flow fragment extracted for method HandleRequirementAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13rxvog:ebookrepository__fragment",
      "ownerFileId": "file:veuxa3:ebookrepository-cs",
      "ownerSymbolId": "method:13rxvog:ebookrepository",
      "ownerSymbolName": "EbookRepository",
      "entryNodeId": "method:13rxvog:ebookrepository__entry",
      "exitNodeIds": [
        "method:13rxvog:ebookrepository__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13rxvog:ebookrepository__entry",
          "kind": "entry",
          "label": "EbookRepository entry",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.99,
          "detail": "Constructs the repository and stores the provided AppDbContext for later use."
        },
        {
          "id": "method:13rxvog:ebookrepository__action_18_state_init_18__linear",
          "kind": "statement",
          "label": "Stores DbContext",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "_context = context"
        },
        {
          "id": "method:13rxvog:ebookrepository__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13rxvog:ebookrepository__entry__method:13rxvog:ebookrepository__action_18_state_init_18__linear",
          "from": "method:13rxvog:ebookrepository__entry",
          "to": "method:13rxvog:ebookrepository__action_18_state_init_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13rxvog:ebookrepository__action_18_state_init_18__linear__implicit_return",
          "from": "method:13rxvog:ebookrepository__action_18_state_init_18__linear",
          "to": "method:13rxvog:ebookrepository__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 16,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method EbookRepository.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:101vezb:findauthorbynameasync__fragment",
      "ownerFileId": "file:veuxa3:ebookrepository-cs",
      "ownerSymbolId": "method:101vezb:findauthorbynameasync",
      "ownerSymbolName": "FindAuthorByNameAsync",
      "entryNodeId": "method:101vezb:findauthorbynameasync__entry",
      "exitNodeIds": [
        "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return",
        "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return",
        "method:101vezb:findauthorbynameasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:101vezb:findauthorbynameasync__entry",
          "kind": "entry",
          "label": "FindAuthorByNameAsync entry",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.99,
          "detail": "Finds an Author by name using a case-insensitive search; uses PostgreSQL ILike when running on Npgsql, otherwise falls back to ToLower string comparison."
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_22_findauthorbynameasync_repository_read_22_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.86,
          "detail": "public async Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default)"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition",
          "kind": "condition",
          "label": "_context.Database.IsNpgsql()",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "If Npgsql provider use EF.Functions.ILike, otherwise compare lower-cased strings"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__true",
          "kind": "branch-true",
          "label": "use ILike (Postgres)",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__false",
          "kind": "branch-false",
          "label": "use ToLower fallback",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition",
          "kind": "condition",
          "label": "_context.Database.IsNpgsql()",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78,
          "detail": "if (_context.Database.IsNpgsql())"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_await_28_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.81,
          "detail": "return await _context.Authors"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "return await _context.Authors"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_external_query_28__linear",
          "kind": "statement",
          "label": "Query Authors DbSet",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "Calls FirstOrDefaultAsync on Authors DbSet in both branches"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "kind": "call",
          "label": "Authors.FirstOrDefaultAsync (Npgsql branch)",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "predicate using EF.Functions.ILike(a.Name, name), cancellationToken"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_await_32_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.81,
          "detail": "return await _context.Authors"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "return await _context.Authors"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback_",
          "kind": "call",
          "label": "Authors.FirstOrDefaultAsync (fallback)",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "predicate using a.Name.ToLower() == name.ToLower(), cancellationToken"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:101vezb:findauthorbynameasync__entry__method:101vezb:findauthorbynameasync__action_22_findauthorbynameasync_repository_read_22_0__linear",
          "from": "method:101vezb:findauthorbynameasync__entry",
          "to": "method:101vezb:findauthorbynameasync__action_22_findauthorbynameasync_repository_read_22_0__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.86
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_22_findauthorbynameasync_repository_read_22_0__linear__method:101vezb:findauthorbynameasync__action_26_branch_26__condition",
          "from": "method:101vezb:findauthorbynameasync__action_22_findauthorbynameasync_repository_read_22_0__linear",
          "to": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition__method:101vezb:findauthorbynameasync__action_26_branch_26__true",
          "from": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition",
          "to": "method:101vezb:findauthorbynameasync__action_26_branch_26__true",
          "kind": "condition-true",
          "label": "use ILike (Postgres)",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition__method:101vezb:findauthorbynameasync__action_26_branch_26__false",
          "from": "method:101vezb:findauthorbynameasync__action_26_branch_26__condition",
          "to": "method:101vezb:findauthorbynameasync__action_26_branch_26__false",
          "kind": "condition-false",
          "label": "use ToLower fallback",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__true__method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "from": "method:101vezb:findauthorbynameasync__action_26_branch_26__true",
          "to": "method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__false__method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "from": "method:101vezb:findauthorbynameasync__action_26_branch_26__false",
          "to": "method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_branch_26__merge__method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition",
          "from": "method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
          "to": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition__method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__true",
          "from": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition",
          "to": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition__method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__false",
          "from": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__condition",
          "to": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__true__method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "from": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__true",
          "to": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__false__method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "from": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__false",
          "to": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.78
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge__method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_await_28_2__await",
          "from": "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge",
          "to": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_await_28_2__await",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.81
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_await_28_2__await__method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return",
          "from": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_await_28_2__await",
          "to": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return__method:101vezb:findauthorbynameasync__action_28_external_query_28__linear",
          "from": "method:101vezb:findauthorbynameasync__action_28_findauthorbynameasync_return_28_3__return",
          "to": "method:101vezb:findauthorbynameasync__action_28_external_query_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_28_external_query_28__linear__call_method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "from": "method:101vezb:findauthorbynameasync__action_28_external_query_28__linear",
          "to": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "kind": "call",
          "label": "predicate using EF.Functions.ILike(a.Name, name), cancellationToken",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch___method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_await_32_4__await",
          "from": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "to": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_await_32_4__await",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.81
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_await_32_4__await__method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return",
          "from": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_await_32_4__await",
          "to": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return",
          "kind": "return",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return__call_method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback_",
          "from": "method:101vezb:findauthorbynameasync__action_32_findauthorbynameasync_return_32_5__return",
          "to": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback_",
          "kind": "call",
          "label": "predicate using a.Name.ToLower() == name.ToLower(), cancellationToken",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback___implicit_return",
          "from": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback_",
          "to": "method:101vezb:findauthorbynameasync__implicit_return",
          "kind": "return",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch___jump_NexusReader_Data_Persistence_AppDbContext_cs_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "fromNodeId": "method:101vezb:findauthorbynameasync__call_29_Authors_FirstOrDefaultAsync_Npgsql_branch_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "Authors.FirstOrDefaultAsync (Npgsql branch)",
          "line": 29,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "reason": "Call target Authors.FirstOrDefaultAsync (Npgsql branch) in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback___jump_NexusReader_Data_Persistence_AppDbContext_cs_Authors_FirstOrDefaultAsync_fallback_",
          "fromNodeId": "method:101vezb:findauthorbynameasync__call_33_Authors_FirstOrDefaultAsync_fallback_",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "Authors.FirstOrDefaultAsync (fallback)",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "reason": "Call target Authors.FirstOrDefaultAsync (fallback) in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:101vezb:findauthorbynameasync__action_26_branch_26__merge",
        "method:101vezb:findauthorbynameasync__action_26_findauthorbynameasync_branch_26_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 22,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method FindAuthorByNameAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1dgp7fr:addauthor__fragment",
      "ownerFileId": "file:veuxa3:ebookrepository-cs",
      "ownerSymbolId": "method:1dgp7fr:addauthor",
      "ownerSymbolName": "AddAuthor",
      "entryNodeId": "method:1dgp7fr:addauthor__entry",
      "exitNodeIds": [
        "method:1dgp7fr:addauthor__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1dgp7fr:addauthor__entry",
          "kind": "entry",
          "label": "AddAuthor entry",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.99,
          "detail": "Adds a new Author entity to the DbContext for later persistence."
        },
        {
          "id": "method:1dgp7fr:addauthor__action_39_persistence_write_39__linear",
          "kind": "statement",
          "label": "Stage Author for insert",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "_context.Authors.Add(author)"
        },
        {
          "id": "method:1dgp7fr:addauthor__call_39_Authors_Add",
          "kind": "call",
          "label": "Authors.Add",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "author"
        },
        {
          "id": "method:1dgp7fr:addauthor__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1dgp7fr:addauthor__entry__method:1dgp7fr:addauthor__action_39_persistence_write_39__linear",
          "from": "method:1dgp7fr:addauthor__entry",
          "to": "method:1dgp7fr:addauthor__action_39_persistence_write_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1dgp7fr:addauthor__action_39_persistence_write_39__linear__call_method:1dgp7fr:addauthor__call_39_Authors_Add",
          "from": "method:1dgp7fr:addauthor__action_39_persistence_write_39__linear",
          "to": "method:1dgp7fr:addauthor__call_39_Authors_Add",
          "kind": "call",
          "label": "author",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1dgp7fr:addauthor__call_39_Authors_Add__implicit_return",
          "from": "method:1dgp7fr:addauthor__call_39_Authors_Add",
          "to": "method:1dgp7fr:addauthor__implicit_return",
          "kind": "return",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1dgp7fr:addauthor__call_39_Authors_Add__jump_NexusReader_Data_Persistence_AppDbContext_cs_Authors_Add",
          "fromNodeId": "method:1dgp7fr:addauthor__call_39_Authors_Add",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "Authors.Add",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "reason": "Call target Authors.Add in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 42,
        "end": 39
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 42,
          "summary": "Control-flow fragment extracted for method AddAuthor.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:vkortc:addebook__fragment",
      "ownerFileId": "file:veuxa3:ebookrepository-cs",
      "ownerSymbolId": "method:vkortc:addebook",
      "ownerSymbolName": "AddEbook",
      "entryNodeId": "method:vkortc:addebook__entry",
      "exitNodeIds": [
        "method:vkortc:addebook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:vkortc:addebook__entry",
          "kind": "entry",
          "label": "AddEbook entry",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.99,
          "detail": "Prepares a new Ebook for persistence by setting readiness to false and adding it to the DbContext."
        },
        {
          "id": "method:vkortc:addebook__action_45_state_change_45__linear",
          "kind": "statement",
          "label": "Clear readiness flag",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "Sets ebook.IsReadyForReading = false to ensure newly added ebooks are not marked ready"
        },
        {
          "id": "method:vkortc:addebook__action_46_addebook_repository_write_46_0__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "_context.Ebooks.Add(ebook);"
        },
        {
          "id": "method:vkortc:addebook__action_46_persistence_write_46__linear",
          "kind": "statement",
          "label": "Stage Ebook for insert",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "_context.Ebooks.Add(ebook)"
        },
        {
          "id": "method:vkortc:addebook__call_46_Ebooks_Add",
          "kind": "call",
          "label": "Ebooks.Add",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "ebook"
        },
        {
          "id": "method:vkortc:addebook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:vkortc:addebook__entry__method:vkortc:addebook__action_45_state_change_45__linear",
          "from": "method:vkortc:addebook__entry",
          "to": "method:vkortc:addebook__action_45_state_change_45__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:vkortc:addebook__action_45_state_change_45__linear__method:vkortc:addebook__action_46_addebook_repository_write_46_0__linear",
          "from": "method:vkortc:addebook__action_45_state_change_45__linear",
          "to": "method:vkortc:addebook__action_46_addebook_repository_write_46_0__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:vkortc:addebook__action_46_addebook_repository_write_46_0__linear__method:vkortc:addebook__action_46_persistence_write_46__linear",
          "from": "method:vkortc:addebook__action_46_addebook_repository_write_46_0__linear",
          "to": "method:vkortc:addebook__action_46_persistence_write_46__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:vkortc:addebook__action_46_persistence_write_46__linear__call_method:vkortc:addebook__call_46_Ebooks_Add",
          "from": "method:vkortc:addebook__action_46_persistence_write_46__linear",
          "to": "method:vkortc:addebook__call_46_Ebooks_Add",
          "kind": "call",
          "label": "ebook",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:vkortc:addebook__call_46_Ebooks_Add__implicit_return",
          "from": "method:vkortc:addebook__call_46_Ebooks_Add",
          "to": "method:vkortc:addebook__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:vkortc:addebook__call_46_Ebooks_Add__jump_NexusReader_Data_Persistence_AppDbContext_cs_Ebooks_Add",
          "fromNodeId": "method:vkortc:addebook__call_46_Ebooks_Add",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "Ebooks.Add",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "reason": "Call target Ebooks.Add in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 42,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 42,
          "summary": "Control-flow fragment extracted for method AddEbook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:xqcyw0:savechangesasync__fragment",
      "ownerFileId": "file:veuxa3:ebookrepository-cs",
      "ownerSymbolId": "method:xqcyw0:savechangesasync",
      "ownerSymbolName": "SaveChangesAsync",
      "entryNodeId": "method:xqcyw0:savechangesasync__entry",
      "exitNodeIds": [
        "method:xqcyw0:savechangesasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:xqcyw0:savechangesasync__entry",
          "kind": "entry",
          "label": "SaveChangesAsync entry",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.99,
          "detail": "Saves tracked changes in the DbContext to the underlying database."
        },
        {
          "id": "method:xqcyw0:savechangesasync__action_51_persistence_commit_51__linear",
          "kind": "statement",
          "label": "Persist staged changes",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7,
          "detail": "_context.SaveChangesAsync(cancellationToken)"
        },
        {
          "id": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync",
          "kind": "call",
          "label": "SaveChangesAsync",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:xqcyw0:savechangesasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:xqcyw0:savechangesasync__entry__method:xqcyw0:savechangesasync__action_51_persistence_commit_51__linear",
          "from": "method:xqcyw0:savechangesasync__entry",
          "to": "method:xqcyw0:savechangesasync__action_51_persistence_commit_51__linear",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.7
        },
        {
          "id": "method:xqcyw0:savechangesasync__action_51_persistence_commit_51__linear__call_method:xqcyw0:savechangesasync__call_51_SaveChangesAsync",
          "from": "method:xqcyw0:savechangesasync__action_51_persistence_commit_51__linear",
          "to": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.88
        },
        {
          "id": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync__implicit_return",
          "from": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync",
          "to": "method:xqcyw0:savechangesasync__implicit_return",
          "kind": "return",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync__jump_NexusReader_Data_Persistence_AppDbContext_cs_SaveChangesAsync",
          "fromNodeId": "method:xqcyw0:savechangesasync__call_51_SaveChangesAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data/Persistence/AppDbContext.cs",
          "targetHint": "SaveChangesAsync",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "reason": "Call target SaveChangesAsync in NexusReader.Data/Persistence/AppDbContext.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 50,
        "end": 51
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs",
          "line": 50,
          "summary": "Control-flow fragment extracted for method SaveChangesAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1mtzd71:signalrsyncbroadcaster__fragment",
      "ownerFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "ownerSymbolId": "method:1mtzd71:signalrsyncbroadcaster",
      "ownerSymbolName": "SignalRSyncBroadcaster",
      "entryNodeId": "method:1mtzd71:signalrsyncbroadcaster__entry",
      "exitNodeIds": [
        "method:1mtzd71:signalrsyncbroadcaster__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1mtzd71:signalrsyncbroadcaster__entry",
          "kind": "entry",
          "label": "SignalRSyncBroadcaster entry",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.99,
          "detail": "Constructs the broadcaster with the SignalR hub context."
        },
        {
          "id": "method:1mtzd71:signalrsyncbroadcaster__action_17_assignment_17__linear",
          "kind": "statement",
          "label": "store hub context",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "_hubContext = hubContext"
        },
        {
          "id": "method:1mtzd71:signalrsyncbroadcaster__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1mtzd71:signalrsyncbroadcaster__entry__method:1mtzd71:signalrsyncbroadcaster__action_17_assignment_17__linear",
          "from": "method:1mtzd71:signalrsyncbroadcaster__entry",
          "to": "method:1mtzd71:signalrsyncbroadcaster__action_17_assignment_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1mtzd71:signalrsyncbroadcaster__action_17_assignment_17__linear__implicit_return",
          "from": "method:1mtzd71:signalrsyncbroadcaster__action_17_assignment_17__linear",
          "to": "method:1mtzd71:signalrsyncbroadcaster__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method SignalRSyncBroadcaster.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:115yp5z:broadcastprogressasync__fragment",
      "ownerFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "ownerSymbolId": "method:115yp5z:broadcastprogressasync",
      "ownerSymbolName": "BroadcastProgressAsync",
      "entryNodeId": "method:115yp5z:broadcastprogressasync__entry",
      "exitNodeIds": [
        "method:115yp5z:broadcastprogressasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:115yp5z:broadcastprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastProgressAsync entry",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.99,
          "detail": "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)."
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(excludedConnectionId)",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(excludedConnectionId))"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(excludedConnectionId)",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "If excludedConnectionId present the code enters the if-block but still uses Clients.User(userId).SendAsync (no actual exclusion implemented here)."
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__true",
          "kind": "branch-true",
          "label": "enter branch: attempts exclusion comment",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__false",
          "kind": "branch-false",
          "label": "else: normal send",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "kind": "statement",
          "label": "merge",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_32_broadcastprogressasync_await_32_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81,
          "detail": "await _hubContext.Clients"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_34_external_call_34__linear",
          "kind": "http-call",
          "label": "send progress update to user",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_34_broadcastprogressasync_external_call_34_2__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82,
          "detail": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88,
          "detail": "event 'ProgressUpdated', pageId, timestamp, cancellationToken"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_36_comment_36__linear",
          "kind": "statement",
          "label": "note about exclusion limitations",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Comments state HubContext doesn't support Except when using .User(id) from outside the Hub and suggests groups for strict exclusion."
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_42_broadcastprogressasync_await_42_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81,
          "detail": "await _hubContext.Clients"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_44_external_call_44__linear",
          "kind": "http-call",
          "label": "send progress update to user (else branch)",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Await _hubContext.Clients.User(userId).SendAsync('ProgressUpdated', pageId, timestamp, cancellationToken: cancellationToken)"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_44_broadcastprogressasync_external_call_44_5__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82,
          "detail": ".SendAsync(\"ProgressUpdated\", pageId, timestamp, cancellationToken: cancellationToken);"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88,
          "detail": "event 'ProgressUpdated', pageId, timestamp, cancellationToken"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:115yp5z:broadcastprogressasync__entry__method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition",
          "from": "method:115yp5z:broadcastprogressasync__entry",
          "to": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition__method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__true",
          "from": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition__method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__false",
          "from": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__true__method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__true",
          "to": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__false__method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__false",
          "to": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.78
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge__method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition",
          "from": "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
          "to": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition__method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__true",
          "from": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__true",
          "kind": "condition-true",
          "label": "enter branch: attempts exclusion comment",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition__method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__false",
          "from": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__false",
          "kind": "condition-false",
          "label": "else: normal send",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__true__method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__true",
          "to": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__false__method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__false",
          "to": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge__method:115yp5z:broadcastprogressasync__action_32_broadcastprogressasync_await_32_1__await",
          "from": "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
          "to": "method:115yp5z:broadcastprogressasync__action_32_broadcastprogressasync_await_32_1__await",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_32_broadcastprogressasync_await_32_1__await__method:115yp5z:broadcastprogressasync__action_34_external_call_34__linear",
          "from": "method:115yp5z:broadcastprogressasync__action_32_broadcastprogressasync_await_32_1__await",
          "to": "method:115yp5z:broadcastprogressasync__action_34_external_call_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_34_external_call_34__linear__method:115yp5z:broadcastprogressasync__action_34_broadcastprogressasync_external_call_34_2__linear",
          "from": "method:115yp5z:broadcastprogressasync__action_34_external_call_34__linear",
          "to": "method:115yp5z:broadcastprogressasync__action_34_broadcastprogressasync_external_call_34_2__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_34_broadcastprogressasync_external_call_34_2__linear__call_method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync",
          "from": "method:115yp5z:broadcastprogressasync__action_34_broadcastprogressasync_external_call_34_2__linear",
          "to": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "event 'ProgressUpdated', pageId, timestamp, cancellationToken",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync__method:115yp5z:broadcastprogressasync__action_36_comment_36__linear",
          "from": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync",
          "to": "method:115yp5z:broadcastprogressasync__action_36_comment_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_36_comment_36__linear__method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition",
          "from": "method:115yp5z:broadcastprogressasync__action_36_comment_36__linear",
          "to": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition",
          "kind": "fallback",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition__method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__true",
          "from": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition__method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__false",
          "from": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__condition",
          "to": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__true__method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__true",
          "to": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__false__method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "from": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__false",
          "to": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.84
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge__method:115yp5z:broadcastprogressasync__action_42_broadcastprogressasync_await_42_4__await",
          "from": "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge",
          "to": "method:115yp5z:broadcastprogressasync__action_42_broadcastprogressasync_await_42_4__await",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_42_broadcastprogressasync_await_42_4__await__method:115yp5z:broadcastprogressasync__action_44_external_call_44__linear",
          "from": "method:115yp5z:broadcastprogressasync__action_42_broadcastprogressasync_await_42_4__await",
          "to": "method:115yp5z:broadcastprogressasync__action_44_external_call_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_44_external_call_44__linear__method:115yp5z:broadcastprogressasync__action_44_broadcastprogressasync_external_call_44_5__linear",
          "from": "method:115yp5z:broadcastprogressasync__action_44_external_call_44__linear",
          "to": "method:115yp5z:broadcastprogressasync__action_44_broadcastprogressasync_external_call_44_5__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__action_44_broadcastprogressasync_external_call_44_5__linear__call_method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync",
          "from": "method:115yp5z:broadcastprogressasync__action_44_broadcastprogressasync_external_call_44_5__linear",
          "to": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "event 'ProgressUpdated', pageId, timestamp, cancellationToken",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync__implicit_return",
          "from": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync",
          "to": "method:115yp5z:broadcastprogressasync__implicit_return",
          "kind": "return",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync__jump_unknown_IHubContext_SyncHub_Clients_User_SendAsync",
          "fromNodeId": "method:115yp5z:broadcastprogressasync__call_34_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "reason": "Call target IHubContext<SyncHub>.Clients.User(...).SendAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync__jump_unknown_IHubContext_SyncHub_Clients_User_SendAsync",
          "fromNodeId": "method:115yp5z:broadcastprogressasync__call_44_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 44,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "reason": "Call target IHubContext<SyncHub>.Clients.User(...).SendAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:115yp5z:broadcastprogressasync__action_30_broadcastprogressasync_branch_30_0__merge",
        "method:115yp5z:broadcastprogressasync__action_30_guard_clause_30__merge",
        "method:115yp5z:broadcastprogressasync__action_40_broadcastprogressasync_fallback_40_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 21,
        "end": 46
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method BroadcastProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1s8oq59:broadcastingestionprogressasync__fragment",
      "ownerFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "ownerSymbolId": "method:1s8oq59:broadcastingestionprogressasync",
      "ownerSymbolName": "BroadcastIngestionProgressAsync",
      "entryNodeId": "method:1s8oq59:broadcastingestionprogressasync__entry",
      "exitNodeIds": [
        "method:1s8oq59:broadcastingestionprogressasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastIngestionProgressAsync entry",
          "line": 49,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.99,
          "detail": "Pushes ingestion status messages and numeric progress (0.0-1.0) to a user's active sessions via SignalR."
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_55_comment_55__linear",
          "kind": "statement",
          "label": "intent comment",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Comments explain this pushes ingestion status to user UI components (e.g., BookIngestionModal)."
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_57_broadcastingestionprogressasync_await_57_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81,
          "detail": "await _hubContext.Clients"
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_59_external_call_59__linear",
          "kind": "http-call",
          "label": "send ingestion progress to user",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7,
          "detail": "Await _hubContext.Clients.User(userId).SendAsync('IngestionProgress', message, progress, cancellationToken: cancellationToken)"
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_59_broadcastingestionprogressasync_external_call_59_1__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82,
          "detail": ".SendAsync(\"IngestionProgress\", message, progress, cancellationToken: cancellationToken);"
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88,
          "detail": "event 'IngestionProgress', message, progress, cancellationToken"
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__entry__method:1s8oq59:broadcastingestionprogressasync__action_55_comment_55__linear",
          "from": "method:1s8oq59:broadcastingestionprogressasync__entry",
          "to": "method:1s8oq59:broadcastingestionprogressasync__action_55_comment_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_55_comment_55__linear__method:1s8oq59:broadcastingestionprogressasync__action_57_broadcastingestionprogressasync_await_57_0__await",
          "from": "method:1s8oq59:broadcastingestionprogressasync__action_55_comment_55__linear",
          "to": "method:1s8oq59:broadcastingestionprogressasync__action_57_broadcastingestionprogressasync_await_57_0__await",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_57_broadcastingestionprogressasync_await_57_0__await__method:1s8oq59:broadcastingestionprogressasync__action_59_external_call_59__linear",
          "from": "method:1s8oq59:broadcastingestionprogressasync__action_57_broadcastingestionprogressasync_await_57_0__await",
          "to": "method:1s8oq59:broadcastingestionprogressasync__action_59_external_call_59__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_59_external_call_59__linear__method:1s8oq59:broadcastingestionprogressasync__action_59_broadcastingestionprogressasync_external_call_59_1__linear",
          "from": "method:1s8oq59:broadcastingestionprogressasync__action_59_external_call_59__linear",
          "to": "method:1s8oq59:broadcastingestionprogressasync__action_59_broadcastingestionprogressasync_external_call_59_1__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__action_59_broadcastingestionprogressasync_external_call_59_1__linear__call_method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync",
          "from": "method:1s8oq59:broadcastingestionprogressasync__action_59_broadcastingestionprogressasync_external_call_59_1__linear",
          "to": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call",
          "label": "event 'IngestionProgress', message, progress, cancellationToken",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync__implicit_return",
          "from": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync",
          "to": "method:1s8oq59:broadcastingestionprogressasync__implicit_return",
          "kind": "return",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync__jump_unknown_IHubContext_SyncHub_Clients_User_SendAsync",
          "fromNodeId": "method:1s8oq59:broadcastingestionprogressasync__call_59_IHubContext_SyncHub_Clients_User_SendAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IHubContext<SyncHub>.Clients.User(...).SendAsync",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "reason": "Call target IHubContext<SyncHub>.Clients.User(...).SendAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8299999999999998,
      "lineSpan": {
        "start": 49,
        "end": 60
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "line": 49,
          "summary": "Control-flow fragment extracted for method BroadcastIngestionProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:vlrx66:synchub__fragment",
      "ownerFileId": "file:47d4sb:synchub-cs",
      "ownerSymbolId": "method:vlrx66:synchub",
      "ownerSymbolName": "SyncHub",
      "entryNodeId": "method:vlrx66:synchub__entry",
      "exitNodeIds": [
        "method:vlrx66:synchub__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:vlrx66:synchub__entry",
          "kind": "entry",
          "label": "SyncHub entry",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.99,
          "detail": "Constructs the hub and stores an IMediator reference."
        },
        {
          "id": "method:vlrx66:synchub__action_16_assign_16__linear",
          "kind": "statement",
          "label": "Store IMediator",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "_mediator = mediator"
        },
        {
          "id": "method:vlrx66:synchub__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:vlrx66:synchub__entry__method:vlrx66:synchub__action_16_assign_16__linear",
          "from": "method:vlrx66:synchub__entry",
          "to": "method:vlrx66:synchub__action_16_assign_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:vlrx66:synchub__action_16_assign_16__linear__implicit_return",
          "from": "method:vlrx66:synchub__action_16_assign_16__linear",
          "to": "method:vlrx66:synchub__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method SyncHub.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1gkzz9r:updateprogress__fragment",
      "ownerFileId": "file:47d4sb:synchub-cs",
      "ownerSymbolId": "method:1gkzz9r:updateprogress",
      "ownerSymbolName": "UpdateProgress",
      "entryNodeId": "method:1gkzz9r:updateprogress__entry",
      "exitNodeIds": [
        "method:1gkzz9r:updateprogress__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1gkzz9r:updateprogress__entry",
          "kind": "entry",
          "label": "UpdateProgress entry",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.99,
          "detail": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR."
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition",
          "kind": "condition",
          "label": "Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value != null",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "If userId is null the method returns without sending a command"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__true",
          "kind": "branch-true",
          "label": "skip (no userId)",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__false",
          "kind": "branch-false",
          "label": "continue (has userId)",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_updateprogress_repository_read_21_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition",
          "kind": "condition",
          "label": "userId != null",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78,
          "detail": "if (userId != null)"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_updateprogress_await_24_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81,
          "detail": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_updateprogress_repository_read_24_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "await _mediator.Send(new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId));"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_external_orchestration_24__linear",
          "kind": "statement",
          "label": "Forward command via mediator",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "_mediator.Send(command) sends the command into application layer (MediatR)"
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_construct_24__linear",
          "kind": "statement",
          "label": "Create UpdateReadingProgressCommand",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "new UpdateReadingProgressCommand(pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId)"
        },
        {
          "id": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor_",
          "kind": "call",
          "label": "UpdateReadingProgressCommand (ctor)",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.88,
          "detail": "pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId"
        },
        {
          "id": "method:1gkzz9r:updateprogress__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1gkzz9r:updateprogress__entry__method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition",
          "from": "method:1gkzz9r:updateprogress__entry",
          "to": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition__method:1gkzz9r:updateprogress__action_21_guard_clause_21__true",
          "from": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition",
          "to": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__true",
          "kind": "condition-true",
          "label": "skip (no userId)",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition__method:1gkzz9r:updateprogress__action_21_guard_clause_21__false",
          "from": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__condition",
          "to": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__false",
          "kind": "condition-false",
          "label": "continue (has userId)",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__true__method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "from": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__true",
          "to": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__false__method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "from": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__false",
          "to": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge__method:1gkzz9r:updateprogress__action_21_updateprogress_repository_read_21_0__linear",
          "from": "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
          "to": "method:1gkzz9r:updateprogress__action_21_updateprogress_repository_read_21_0__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_21_updateprogress_repository_read_21_0__linear__method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition",
          "from": "method:1gkzz9r:updateprogress__action_21_updateprogress_repository_read_21_0__linear",
          "to": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition__method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__true",
          "from": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition",
          "to": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition__method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__false",
          "from": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__condition",
          "to": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__true__method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "from": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__true",
          "to": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__false__method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "from": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__false",
          "to": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge__method:1gkzz9r:updateprogress__action_24_updateprogress_await_24_3__await",
          "from": "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge",
          "to": "method:1gkzz9r:updateprogress__action_24_updateprogress_await_24_3__await",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_updateprogress_await_24_3__await__method:1gkzz9r:updateprogress__action_24_updateprogress_repository_read_24_2__linear",
          "from": "method:1gkzz9r:updateprogress__action_24_updateprogress_await_24_3__await",
          "to": "method:1gkzz9r:updateprogress__action_24_updateprogress_repository_read_24_2__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_updateprogress_repository_read_24_2__linear__method:1gkzz9r:updateprogress__action_24_external_orchestration_24__linear",
          "from": "method:1gkzz9r:updateprogress__action_24_updateprogress_repository_read_24_2__linear",
          "to": "method:1gkzz9r:updateprogress__action_24_external_orchestration_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_external_orchestration_24__linear__method:1gkzz9r:updateprogress__action_24_construct_24__linear",
          "from": "method:1gkzz9r:updateprogress__action_24_external_orchestration_24__linear",
          "to": "method:1gkzz9r:updateprogress__action_24_construct_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gkzz9r:updateprogress__action_24_construct_24__linear__call_method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor_",
          "from": "method:1gkzz9r:updateprogress__action_24_construct_24__linear",
          "to": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor_",
          "kind": "call",
          "label": "pageId, userId, ebookId, progress, chapterTitle, chapterIndex, Context.ConnectionId",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor___implicit_return",
          "from": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor_",
          "to": "method:1gkzz9r:updateprogress__implicit_return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor___jump_NexusReader_Application_Commands_Sync_UpdateReadingProgressCommand_ctor_",
          "fromNodeId": "method:1gkzz9r:updateprogress__call_24_UpdateReadingProgressCommand_ctor_",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Commands.Sync",
          "targetHint": "UpdateReadingProgressCommand (ctor)",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "reason": "Call target UpdateReadingProgressCommand (ctor) in NexusReader.Application.Commands.Sync could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1gkzz9r:updateprogress__action_21_guard_clause_21__merge",
        "method:1gkzz9r:updateprogress__action_22_updateprogress_branch_22_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 19,
        "end": 26
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method UpdateProgress.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1whrhth:onconnectedasync__fragment",
      "ownerFileId": "file:47d4sb:synchub-cs",
      "ownerSymbolId": "method:1whrhth:onconnectedasync",
      "ownerSymbolName": "OnConnectedAsync",
      "entryNodeId": "method:1whrhth:onconnectedasync__entry",
      "exitNodeIds": [
        "method:1whrhth:onconnectedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1whrhth:onconnectedasync__entry",
          "kind": "entry",
          "label": "OnConnectedAsync entry",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.99,
          "detail": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync."
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_30_onconnectedasync_repository_read_30_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "var userId = Context.UserIdentifier;"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(Context.UserIdentifier)",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "Prevents group join for anonymous connections"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__true",
          "kind": "branch-true",
          "label": "skip (no UserIdentifier)",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__false",
          "kind": "branch-false",
          "label": "add-to-group",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(userId)",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(userId))"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_await_33_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81,
          "detail": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_repository_read_33_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "await Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\");"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_external_call_33__linear",
          "kind": "http-call",
          "label": "Add connection to per-user group",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "Groups.AddToGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_35_onconnectedasync_await_35_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81,
          "detail": "await base.OnConnectedAsync();"
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_35_external_call_35__linear",
          "kind": "http-call",
          "label": "Call base hub connect handler",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "await base.OnConnectedAsync()"
        },
        {
          "id": "method:1whrhth:onconnectedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1whrhth:onconnectedasync__entry__method:1whrhth:onconnectedasync__action_30_onconnectedasync_repository_read_30_0__linear",
          "from": "method:1whrhth:onconnectedasync__entry",
          "to": "method:1whrhth:onconnectedasync__action_30_onconnectedasync_repository_read_30_0__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_30_onconnectedasync_repository_read_30_0__linear__method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition",
          "from": "method:1whrhth:onconnectedasync__action_30_onconnectedasync_repository_read_30_0__linear",
          "to": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition__method:1whrhth:onconnectedasync__action_31_guard_clause_31__true",
          "from": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition",
          "to": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__true",
          "kind": "condition-true",
          "label": "skip (no UserIdentifier)",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition__method:1whrhth:onconnectedasync__action_31_guard_clause_31__false",
          "from": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__condition",
          "to": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__false",
          "kind": "condition-false",
          "label": "add-to-group",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__true__method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "from": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__true",
          "to": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__false__method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "from": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__false",
          "to": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge__method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition",
          "from": "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
          "to": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition__method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__true",
          "from": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition",
          "to": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition__method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__false",
          "from": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__condition",
          "to": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__true__method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "from": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__true",
          "to": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__false__method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "from": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__false",
          "to": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge__method:1whrhth:onconnectedasync__action_33_onconnectedasync_await_33_3__await",
          "from": "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge",
          "to": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_await_33_3__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_await_33_3__await__method:1whrhth:onconnectedasync__action_33_onconnectedasync_repository_read_33_2__linear",
          "from": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_await_33_3__await",
          "to": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_repository_read_33_2__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_repository_read_33_2__linear__method:1whrhth:onconnectedasync__action_33_external_call_33__linear",
          "from": "method:1whrhth:onconnectedasync__action_33_onconnectedasync_repository_read_33_2__linear",
          "to": "method:1whrhth:onconnectedasync__action_33_external_call_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_33_external_call_33__linear__method:1whrhth:onconnectedasync__action_35_onconnectedasync_await_35_4__await",
          "from": "method:1whrhth:onconnectedasync__action_33_external_call_33__linear",
          "to": "method:1whrhth:onconnectedasync__action_35_onconnectedasync_await_35_4__await",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_35_onconnectedasync_await_35_4__await__method:1whrhth:onconnectedasync__action_35_external_call_35__linear",
          "from": "method:1whrhth:onconnectedasync__action_35_onconnectedasync_await_35_4__await",
          "to": "method:1whrhth:onconnectedasync__action_35_external_call_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1whrhth:onconnectedasync__action_35_external_call_35__linear__implicit_return",
          "from": "method:1whrhth:onconnectedasync__action_35_external_call_35__linear",
          "to": "method:1whrhth:onconnectedasync__implicit_return",
          "kind": "return",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1whrhth:onconnectedasync__action_31_guard_clause_31__merge",
        "method:1whrhth:onconnectedasync__action_31_onconnectedasync_branch_31_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 28,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 28,
          "summary": "Control-flow fragment extracted for method OnConnectedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jy35qw:ondisconnectedasync__fragment",
      "ownerFileId": "file:47d4sb:synchub-cs",
      "ownerSymbolId": "method:1jy35qw:ondisconnectedasync",
      "ownerSymbolName": "OnDisconnectedAsync",
      "entryNodeId": "method:1jy35qw:ondisconnectedasync__entry",
      "exitNodeIds": [
        "method:1jy35qw:ondisconnectedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jy35qw:ondisconnectedasync__entry",
          "kind": "entry",
          "label": "OnDisconnectedAsync entry",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.99,
          "detail": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception)."
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_40_ondisconnectedasync_repository_read_40_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "var userId = Context.UserIdentifier;"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(Context.UserIdentifier)",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "Prevents group removal for anonymous connections"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__true",
          "kind": "branch-true",
          "label": "skip (no UserIdentifier)",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__false",
          "kind": "branch-false",
          "label": "remove-from-group",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(userId)",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(userId))"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_await_43_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81,
          "detail": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_external_call_43__linear",
          "kind": "http-call",
          "label": "Remove connection from per-user group",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\") — SignalR group membership change"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_repository_read_43_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86,
          "detail": "await Groups.RemoveFromGroupAsync(Context.ConnectionId, $\"User_{userId}\");"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_45_ondisconnectedasync_await_45_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81,
          "detail": "await base.OnDisconnectedAsync(exception);"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_45_external_call_45__linear",
          "kind": "http-call",
          "label": "Call base hub disconnect handler",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7,
          "detail": "await base.OnDisconnectedAsync(exception)"
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jy35qw:ondisconnectedasync__entry__method:1jy35qw:ondisconnectedasync__action_40_ondisconnectedasync_repository_read_40_0__linear",
          "from": "method:1jy35qw:ondisconnectedasync__entry",
          "to": "method:1jy35qw:ondisconnectedasync__action_40_ondisconnectedasync_repository_read_40_0__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_40_ondisconnectedasync_repository_read_40_0__linear__method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition",
          "from": "method:1jy35qw:ondisconnectedasync__action_40_ondisconnectedasync_repository_read_40_0__linear",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition__method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__true",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__true",
          "kind": "condition-true",
          "label": "skip (no UserIdentifier)",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition__method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__false",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__condition",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__false",
          "kind": "condition-false",
          "label": "remove-from-group",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__true__method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__true",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__false__method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__false",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge__method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition__method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__true",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition__method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__false",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__condition",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__true__method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__true",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__false__method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__false",
          "to": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge__method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_await_43_3__await",
          "from": "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge",
          "to": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_await_43_3__await",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_await_43_3__await__method:1jy35qw:ondisconnectedasync__action_43_external_call_43__linear",
          "from": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_await_43_3__await",
          "to": "method:1jy35qw:ondisconnectedasync__action_43_external_call_43__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_external_call_43__linear__method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_repository_read_43_2__linear",
          "from": "method:1jy35qw:ondisconnectedasync__action_43_external_call_43__linear",
          "to": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_repository_read_43_2__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_repository_read_43_2__linear__method:1jy35qw:ondisconnectedasync__action_45_ondisconnectedasync_await_45_4__await",
          "from": "method:1jy35qw:ondisconnectedasync__action_43_ondisconnectedasync_repository_read_43_2__linear",
          "to": "method:1jy35qw:ondisconnectedasync__action_45_ondisconnectedasync_await_45_4__await",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_45_ondisconnectedasync_await_45_4__await__method:1jy35qw:ondisconnectedasync__action_45_external_call_45__linear",
          "from": "method:1jy35qw:ondisconnectedasync__action_45_ondisconnectedasync_await_45_4__await",
          "to": "method:1jy35qw:ondisconnectedasync__action_45_external_call_45__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jy35qw:ondisconnectedasync__action_45_external_call_45__linear__implicit_return",
          "from": "method:1jy35qw:ondisconnectedasync__action_45_external_call_45__linear",
          "to": "method:1jy35qw:ondisconnectedasync__implicit_return",
          "kind": "return",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1jy35qw:ondisconnectedasync__action_41_guard_clause_41__merge",
        "method:1jy35qw:ondisconnectedasync__action_41_ondisconnectedasync_branch_41_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 38,
        "end": 46
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "line": 38,
          "summary": "Control-flow fragment extracted for method OnDisconnectedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ctlycb:handlesubscriptionupdatedasync__fragment",
      "ownerFileId": "file:13phiik:billingservice-cs",
      "ownerSymbolId": "method:1ctlycb:handlesubscriptionupdatedasync",
      "ownerSymbolName": "HandleSubscriptionUpdatedAsync",
      "entryNodeId": "method:1ctlycb:handlesubscriptionupdatedasync__entry",
      "exitNodeIds": [
        "method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_82_handlesubscriptionupdatedasync_return_82_25__return"
      ],
      "nodes": [
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__entry",
          "kind": "entry",
          "label": "HandleSubscriptionUpdatedAsync entry",
          "line": 32,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.99,
          "detail": "Handle a Stripe subscription update: map Stripe product id to a local SubscriptionPlan, update the user's plan and AI token limit, and persist via UserManager."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_try_catch_34__linear",
          "kind": "statement",
          "label": "Surrounds whole operation with try/catch",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception, logs error and returns Result.Fail with caused exception."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_handlesubscriptionupdatedasync_try_34_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_await_36_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var user = await _userManager.FindByEmailAsync(customerEmail);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_repository_read_36_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "var user = await _userManager.FindByEmailAsync(customerEmail);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_external_read_36__linear",
          "kind": "statement",
          "label": "Load user by email",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.FindByEmailAsync(customerEmail) - returns NexusUser or null."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Logs warning and returns Result.Fail when user missing."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__true",
          "kind": "branch-true",
          "label": "log-warning",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__false",
          "kind": "branch-false",
          "label": "return-fail",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (user == null)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_handlesubscriptionupdatedasync_log_39_4__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(\"Attempted to update subscription for non-existent user: {Email}\", customerEmail);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_log_39__linear",
          "kind": "statement",
          "label": "Informational and warning logs",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Logs warning when user missing, warning on unknown product ID, error on update failure, and error on unexpected exceptions (various lines)."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"User {customerEmail} not found.\");"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property_",
          "kind": "call",
          "label": "FreeName (static property)",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88,
          "detail": "read default Free plan name"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition",
          "kind": "condition",
          "label": "Map stripeProductId to target plan and token limit",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "If matches ProProductId => Pro (50k tokens); else if BasicProductId => Basic (10k); else if non-empty and not FreeProductId => log unrecognized and fallback to Free."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__true",
          "kind": "branch-true",
          "label": "true",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__false",
          "kind": "branch-false",
          "label": "false",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "kind": "statement",
          "label": "merge",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition",
          "kind": "condition",
          "label": "stripeProductId == _stripeSettings.ProProductId",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (stripeProductId == _stripeSettings.ProProductId)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access_",
          "kind": "call",
          "label": "ProProductId/BasicProductId/FreeProductId (property access)",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88,
          "detail": "compare incoming stripeProductId to configured product ids"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84,
          "detail": "else if (stripeProductId == _stripeSettings.BasicProductId)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition",
          "kind": "condition",
          "label": "stripeProductId == _stripeSettings.BasicProductId",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "else if (stripeProductId == _stripeSettings.BasicProductId)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84,
          "detail": "else if (!string.IsNullOrEmpty(stripeProductId) && stripeProductId != _stripeSettings.FreeProductId)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(stripeProductId) && stripeProductId != _stripeSettings.FreeProductId",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "else if (!string.IsNullOrEmpty(stripeProductId) && stripeProductId != _stripeSettings.FreeProductId)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_58_handlesubscriptionupdatedasync_log_58_11__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(\"Unrecognized Stripe Product ID: {ProductId} for user {Email}. Falling back to Free tier.\", stripeProductId, customerEmail);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_handlesubscriptionupdatedasync_await_61_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_db_read_61__linear",
          "kind": "statement",
          "label": "Read SubscriptionPlan entity",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Creates DbContext and queries SubscriptionPlans for targetPlanName."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_62_handlesubscriptionupdatedasync_await_62_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var plan = await dbContext.SubscriptionPlans.FirstOrDefaultAsync(p => p.PlanName == targetPlanName);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "SubscriptionPlans.FirstOrDefaultAsync",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88,
          "detail": "predicate p => p.PlanName == targetPlanName"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition",
          "kind": "condition",
          "label": "plan != null",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (plan != null)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__true",
          "kind": "branch-true",
          "label": "true",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__false",
          "kind": "branch-false",
          "label": "false",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_65_persistence_write_65__linear",
          "kind": "statement",
          "label": "Apply plan and token limit to user object",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "user.SubscriptionPlanId = plan.Id; user.AITokenLimit = tokenLimit;"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_handlesubscriptionupdatedasync_await_69_15__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var result = await _userManager.UpdateAsync(user);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_external_write_69__linear",
          "kind": "statement",
          "label": "Persist user changes",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.UpdateAsync(user) and check IdentityResult.Succeeded."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition",
          "kind": "condition",
          "label": "Handle update failure",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "If update failed, logs error with result.Errors and returns Result.Fail with first error description."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__true",
          "kind": "branch-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__false",
          "kind": "branch-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition",
          "kind": "condition",
          "label": "!result.Succeeded",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (!result.Succeeded)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__true",
          "kind": "branch-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__false",
          "kind": "branch-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_72_handlesubscriptionupdatedasync_log_72_17__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(\"Failed to update user {Email} after subscription change: {Errors}\","
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_73_handlesubscriptionupdatedasync_mapping_73_18__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74,
          "detail": "customerEmail, string.Join(\", \", result.Errors.Select(e => e.Description)));"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return",
          "kind": "return",
          "label": "Returns result",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_repository_read_74_19__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_mapping_74_20__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to update user profile.\");"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return",
          "kind": "return",
          "label": "Returns result",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return",
          "kind": "return",
          "label": "Return success",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on success."
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_79_handlesubscriptionupdatedasync_catch_79_23__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_81_handlesubscriptionupdatedasync_log_81_24__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"Unexpected error during subscription update for {Email}\", customerEmail);"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_82_handlesubscriptionupdatedasync_return_82_25__return",
          "kind": "return",
          "label": "Returns result",
          "line": 82,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Unexpected error during subscription update.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__entry__method:1ctlycb:handlesubscriptionupdatedasync__action_34_try_catch_34__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__entry",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_try_catch_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_try_catch_34__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_34_handlesubscriptionupdatedasync_try_34_0__try",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_try_catch_34__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_handlesubscriptionupdatedasync_try_34_0__try",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_handlesubscriptionupdatedasync_try_34_0__try__method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_await_36_2__await",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_34_handlesubscriptionupdatedasync_try_34_0__try",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_await_36_2__await",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_await_36_2__await__method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_repository_read_36_1__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_await_36_2__await",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_repository_read_36_1__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_repository_read_36_1__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_36_external_read_36__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_handlesubscriptionupdatedasync_repository_read_36_1__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_external_read_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_external_read_36__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_36_external_read_36__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__true",
          "kind": "condition-true",
          "label": "log-warning",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__false",
          "kind": "condition-false",
          "label": "return-fail",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__true__method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__false__method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__true__method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__false__method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_39_handlesubscriptionupdatedasync_log_39_4__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_handlesubscriptionupdatedasync_log_39_4__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_handlesubscriptionupdatedasync_log_39_4__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_39_log_39__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_handlesubscriptionupdatedasync_log_39_4__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_log_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_log_39__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_39_log_39__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return__call_method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property_",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_40_handlesubscriptionupdatedasync_return_40_5__return",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property_",
          "kind": "call",
          "label": "read default Free plan name",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property___method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property_",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__true",
          "kind": "condition-true",
          "label": "true",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__false",
          "kind": "condition-false",
          "label": "false",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__true__method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__false__method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__true__method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__false__method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge__call_method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access_",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access_",
          "kind": "call",
          "label": "compare incoming stripeProductId to configured product ids",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access___method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access_",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition",
          "kind": "fallback",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__true__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__false__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__true__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__false__method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition",
          "kind": "fallback",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__true__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__false__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__true__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__false__method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_58_handlesubscriptionupdatedasync_log_58_11__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_58_handlesubscriptionupdatedasync_log_58_11__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_58_handlesubscriptionupdatedasync_log_58_11__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_61_handlesubscriptionupdatedasync_await_61_12__await",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_58_handlesubscriptionupdatedasync_log_58_11__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_handlesubscriptionupdatedasync_await_61_12__await",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_handlesubscriptionupdatedasync_await_61_12__await__method:1ctlycb:handlesubscriptionupdatedasync__action_61_db_read_61__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_handlesubscriptionupdatedasync_await_61_12__await",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_db_read_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_db_read_61__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_62_handlesubscriptionupdatedasync_await_62_13__await",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_61_db_read_61__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_62_handlesubscriptionupdatedasync_await_62_13__await",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_62_handlesubscriptionupdatedasync_await_62_13__await__call_method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_62_handlesubscriptionupdatedasync_await_62_13__await",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "predicate p => p.PlanName == targetPlanName",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync__method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__true",
          "kind": "condition-true",
          "label": "true",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__false",
          "kind": "condition-false",
          "label": "false",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__true__method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__false__method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_65_persistence_write_65__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_65_persistence_write_65__linear",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_65_persistence_write_65__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_69_handlesubscriptionupdatedasync_await_69_15__await",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_65_persistence_write_65__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_handlesubscriptionupdatedasync_await_69_15__await",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_handlesubscriptionupdatedasync_await_69_15__await__method:1ctlycb:handlesubscriptionupdatedasync__action_69_external_write_69__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_handlesubscriptionupdatedasync_await_69_15__await",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_external_write_69__linear",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_external_write_69__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_69_external_write_69__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__true",
          "kind": "condition-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__false",
          "kind": "condition-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__true__method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__false__method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__true",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__true",
          "kind": "condition-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition__method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__false",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__condition",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__false",
          "kind": "condition-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__true__method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__true",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__false__method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__false",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge__method:1ctlycb:handlesubscriptionupdatedasync__action_72_handlesubscriptionupdatedasync_log_72_17__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_72_handlesubscriptionupdatedasync_log_72_17__linear",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_72_handlesubscriptionupdatedasync_log_72_17__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_73_handlesubscriptionupdatedasync_mapping_73_18__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_72_handlesubscriptionupdatedasync_log_72_17__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_73_handlesubscriptionupdatedasync_mapping_73_18__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_73_handlesubscriptionupdatedasync_mapping_73_18__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_73_handlesubscriptionupdatedasync_mapping_73_18__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return",
          "kind": "return",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return__method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_repository_read_74_19__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_return_74_21__return",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_repository_read_74_19__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_repository_read_74_19__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_mapping_74_20__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_repository_read_74_19__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_mapping_74_20__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_mapping_74_20__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_74_handlesubscriptionupdatedasync_mapping_74_20__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return",
          "kind": "return",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return__method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_handlesubscriptionupdatedasync_return_77_22__return",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return",
          "kind": "return",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return__method:1ctlycb:handlesubscriptionupdatedasync__action_79_handlesubscriptionupdatedasync_catch_79_23__catch",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_77_return_77__return",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_79_handlesubscriptionupdatedasync_catch_79_23__catch",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_79_handlesubscriptionupdatedasync_catch_79_23__catch__method:1ctlycb:handlesubscriptionupdatedasync__action_81_handlesubscriptionupdatedasync_log_81_24__linear",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_79_handlesubscriptionupdatedasync_catch_79_23__catch",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_81_handlesubscriptionupdatedasync_log_81_24__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__action_81_handlesubscriptionupdatedasync_log_81_24__linear__method:1ctlycb:handlesubscriptionupdatedasync__action_82_handlesubscriptionupdatedasync_return_82_25__return",
          "from": "method:1ctlycb:handlesubscriptionupdatedasync__action_81_handlesubscriptionupdatedasync_log_81_24__linear",
          "to": "method:1ctlycb:handlesubscriptionupdatedasync__action_82_handlesubscriptionupdatedasync_return_82_25__return",
          "kind": "return",
          "line": 82,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property___jump_NexusReader_Domain_Entities_SubscriptionPlan_FreeName_static_property_",
          "fromNodeId": "method:1ctlycb:handlesubscriptionupdatedasync__call_43_FreeName_static_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain.Entities/SubscriptionPlan",
          "targetHint": "FreeName (static property)",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Call target FreeName (static property) in NexusReader.Domain.Entities/SubscriptionPlan could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access___jump_NexusReader_Infrastructure_Configuration_StripeSettings_ProProductId_BasicProductId_FreeProductId_property_access_",
          "fromNodeId": "method:1ctlycb:handlesubscriptionupdatedasync__call_46_ProProductId_BasicProductId_FreeProductId_property_access_",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Configuration/StripeSettings",
          "targetHint": "ProProductId/BasicProductId/FreeProductId (property access)",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Call target ProProductId/BasicProductId/FreeProductId (property access) in NexusReader.Infrastructure/Configuration/StripeSettings could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync__jump_NexusReader_Data_Persistence_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "fromNodeId": "method:1ctlycb:handlesubscriptionupdatedasync__call_62_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence/AppDbContext",
          "targetHint": "SubscriptionPlans.FirstOrDefaultAsync",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Call target SubscriptionPlans.FirstOrDefaultAsync in NexusReader.Data.Persistence/AppDbContext could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ctlycb:handlesubscriptionupdatedasync__action_37_guard_clause_37__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_37_handlesubscriptionupdatedasync_branch_37_3__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_46_branch_46__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_46_handlesubscriptionupdatedasync_branch_46_6__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_fallback_51_8__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_51_handlesubscriptionupdatedasync_branch_51_7__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_fallback_56_10__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_56_handlesubscriptionupdatedasync_branch_56_9__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_63_handlesubscriptionupdatedasync_branch_63_14__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_70_branch_70__merge",
        "method:1ctlycb:handlesubscriptionupdatedasync__action_70_handlesubscriptionupdatedasync_branch_70_16__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 32,
        "end": 84
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 32,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionUpdatedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:174nry:handlesubscriptiondeletedasync__fragment",
      "ownerFileId": "file:13phiik:billingservice-cs",
      "ownerSymbolId": "method:174nry:handlesubscriptiondeletedasync",
      "ownerSymbolName": "HandleSubscriptionDeletedAsync",
      "entryNodeId": "method:174nry:handlesubscriptiondeletedasync__entry",
      "exitNodeIds": [
        "method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return",
        "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return",
        "method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return",
        "method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return",
        "method:174nry:handlesubscriptiondeletedasync__action_118_handlesubscriptiondeletedasync_return_118_19__return"
      ],
      "nodes": [
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__entry",
          "kind": "entry",
          "label": "HandleSubscriptionDeletedAsync entry",
          "line": 86,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.99,
          "detail": "Handle a Stripe subscription deletion: reset the user's subscription to the Free plan and restore its AI token limit, persisting via UserManager."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_88_try_catch_88__linear",
          "kind": "statement",
          "label": "Surrounds operation with try/catch",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception, logs error and returns Result.Fail with caused exception."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_88_handlesubscriptiondeletedasync_try_88_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_await_90_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var user = await _userManager.FindByEmailAsync(customerEmail);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_repository_read_90_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "var user = await _userManager.FindByEmailAsync(customerEmail);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_external_read_90__linear",
          "kind": "statement",
          "label": "Load user by email",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.FindByEmailAsync(customerEmail) and validate existence."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Logs and returns Result.Fail when user missing."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__true",
          "kind": "branch-true",
          "label": "log-warning",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__false",
          "kind": "branch-false",
          "label": "return-fail",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (user == null)"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_93_log_93__linear",
          "kind": "statement",
          "label": "Warning and error logs",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Logs warning when user missing, error on update failure, and error on unexpected exceptions (various lines)."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_93_handlesubscriptiondeletedasync_log_93_4__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(\"Attempted to delete subscription for non-existent user: {Email}\", customerEmail);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 94,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"User {customerEmail} not found.\");"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_97_handlesubscriptiondeletedasync_await_97_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 97,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_97_db_read_97__linear",
          "kind": "statement",
          "label": "Fetch Free SubscriptionPlan",
          "line": 97,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Creates DbContext and queries SubscriptionPlans for FreeName."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_98_handlesubscriptiondeletedasync_await_98_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var freePlan = await dbContext.SubscriptionPlans.FirstOrDefaultAsync(p => p.PlanName == SubscriptionPlan.FreeName);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property_",
          "kind": "call",
          "label": "FreeName (static property)",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88,
          "detail": "read Free plan name to find DB record"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "SubscriptionPlans.FirstOrDefaultAsync",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88,
          "detail": "predicate p => p.PlanName == SubscriptionPlan.FreeName"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition",
          "kind": "condition",
          "label": "freePlan != null",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (freePlan != null)"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__true",
          "kind": "branch-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__false",
          "kind": "branch-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_101_persistence_write_101__linear",
          "kind": "statement",
          "label": "Reset user's SubscriptionPlanId and AITokenLimit",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "user.SubscriptionPlanId = freePlan.Id; user.AITokenLimit = freePlan.AITokenLimit;"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_105_handlesubscriptiondeletedasync_await_105_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81,
          "detail": "var result = await _userManager.UpdateAsync(user);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_105_external_write_105__linear",
          "kind": "statement",
          "label": "Persist user changes",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.UpdateAsync(user) and check IdentityResult.Succeeded."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition",
          "kind": "condition",
          "label": "Handle update failure",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "If update failed, logs error with result.Errors and returns Result.Fail with first error description."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__true",
          "kind": "branch-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__false",
          "kind": "branch-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition",
          "kind": "condition",
          "label": "!result.Succeeded",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78,
          "detail": "if (!result.Succeeded)"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_108_handlesubscriptiondeletedasync_log_108_11__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 108,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(\"Failed to reset user {Email} to Free tier after subscription deletion: {Errors}\","
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_109_handlesubscriptiondeletedasync_mapping_109_12__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 109,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74,
          "detail": "customerEmail, string.Join(\", \", result.Errors.Select(e => e.Description)));"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return",
          "kind": "return",
          "label": "Returns result",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_repository_read_110_13__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_mapping_110_14__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Failed to reset user to free tier.\");"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return",
          "kind": "return",
          "label": "Returns result",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return",
          "kind": "return",
          "label": "Return success",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on success."
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_115_handlesubscriptiondeletedasync_catch_115_17__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_117_handlesubscriptiondeletedasync_log_117_18__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 117,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"Unexpected error during subscription deletion for {Email}\", customerEmail);"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_118_handlesubscriptiondeletedasync_return_118_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Unexpected error during subscription deletion.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__entry__method:174nry:handlesubscriptiondeletedasync__action_88_try_catch_88__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__entry",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_88_try_catch_88__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_88_try_catch_88__linear__method:174nry:handlesubscriptiondeletedasync__action_88_handlesubscriptiondeletedasync_try_88_0__try",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_88_try_catch_88__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_88_handlesubscriptiondeletedasync_try_88_0__try",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_88_handlesubscriptiondeletedasync_try_88_0__try__method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_await_90_2__await",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_88_handlesubscriptiondeletedasync_try_88_0__try",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_await_90_2__await",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_await_90_2__await__method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_repository_read_90_1__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_await_90_2__await",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_repository_read_90_1__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_repository_read_90_1__linear__method:174nry:handlesubscriptiondeletedasync__action_90_external_read_90__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_90_handlesubscriptiondeletedasync_repository_read_90_1__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_90_external_read_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_90_external_read_90__linear__method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_90_external_read_90__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition__method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__true",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__true",
          "kind": "condition-true",
          "label": "log-warning",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition__method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__false",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__false",
          "kind": "condition-false",
          "label": "return-fail",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__true__method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__true",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__false__method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__false",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge__method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition__method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__true",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition__method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__false",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__true__method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__true",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__false__method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__false",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge__method:174nry:handlesubscriptiondeletedasync__action_93_log_93__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_93_log_93__linear",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_93_log_93__linear__method:174nry:handlesubscriptiondeletedasync__action_93_handlesubscriptiondeletedasync_log_93_4__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_93_log_93__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_93_handlesubscriptiondeletedasync_log_93_4__linear",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_93_handlesubscriptiondeletedasync_log_93_4__linear__method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_93_handlesubscriptiondeletedasync_log_93_4__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return__method:174nry:handlesubscriptiondeletedasync__action_97_handlesubscriptiondeletedasync_await_97_6__await",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_94_handlesubscriptiondeletedasync_return_94_5__return",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_97_handlesubscriptiondeletedasync_await_97_6__await",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_97_handlesubscriptiondeletedasync_await_97_6__await__method:174nry:handlesubscriptiondeletedasync__action_97_db_read_97__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_97_handlesubscriptiondeletedasync_await_97_6__await",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_97_db_read_97__linear",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_97_db_read_97__linear__method:174nry:handlesubscriptiondeletedasync__action_98_handlesubscriptiondeletedasync_await_98_7__await",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_97_db_read_97__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_98_handlesubscriptiondeletedasync_await_98_7__await",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_98_handlesubscriptiondeletedasync_await_98_7__await__call_method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property_",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_98_handlesubscriptiondeletedasync_await_98_7__await",
          "to": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property_",
          "kind": "call",
          "label": "read Free plan name to find DB record",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property___call_method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync",
          "from": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property_",
          "to": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "predicate p => p.PlanName == SubscriptionPlan.FreeName",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync__method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition",
          "from": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition__method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__true",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__true",
          "kind": "condition-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition__method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__false",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__false",
          "kind": "condition-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__true__method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__true",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__false__method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__false",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge__method:174nry:handlesubscriptiondeletedasync__action_101_persistence_write_101__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_101_persistence_write_101__linear",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_101_persistence_write_101__linear__method:174nry:handlesubscriptiondeletedasync__action_105_handlesubscriptiondeletedasync_await_105_9__await",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_101_persistence_write_101__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_105_handlesubscriptiondeletedasync_await_105_9__await",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_105_handlesubscriptiondeletedasync_await_105_9__await__method:174nry:handlesubscriptiondeletedasync__action_105_external_write_105__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_105_handlesubscriptiondeletedasync_await_105_9__await",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_105_external_write_105__linear",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_105_external_write_105__linear__method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_105_external_write_105__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition__method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__true",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__true",
          "kind": "condition-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition__method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__false",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__false",
          "kind": "condition-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__true__method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__true",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__false__method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__false",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge__method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition__method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__true",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition__method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__false",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__condition",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__true__method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__true",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__false__method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__false",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge__method:174nry:handlesubscriptiondeletedasync__action_108_handlesubscriptiondeletedasync_log_108_11__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_108_handlesubscriptiondeletedasync_log_108_11__linear",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_108_handlesubscriptiondeletedasync_log_108_11__linear__method:174nry:handlesubscriptiondeletedasync__action_109_handlesubscriptiondeletedasync_mapping_109_12__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_108_handlesubscriptiondeletedasync_log_108_11__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_109_handlesubscriptiondeletedasync_mapping_109_12__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_109_handlesubscriptiondeletedasync_mapping_109_12__linear__method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_109_handlesubscriptiondeletedasync_mapping_109_12__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return",
          "kind": "return",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return__method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_repository_read_110_13__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_return_110_15__return",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_repository_read_110_13__linear",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_repository_read_110_13__linear__method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_mapping_110_14__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_repository_read_110_13__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_mapping_110_14__linear",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_mapping_110_14__linear__method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_110_handlesubscriptiondeletedasync_mapping_110_14__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return",
          "kind": "return",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return__method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_113_handlesubscriptiondeletedasync_return_113_16__return",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return",
          "kind": "return",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return__method:174nry:handlesubscriptiondeletedasync__action_115_handlesubscriptiondeletedasync_catch_115_17__catch",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_113_return_113__return",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_115_handlesubscriptiondeletedasync_catch_115_17__catch",
          "kind": "exception",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_115_handlesubscriptiondeletedasync_catch_115_17__catch__method:174nry:handlesubscriptiondeletedasync__action_117_handlesubscriptiondeletedasync_log_117_18__linear",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_115_handlesubscriptiondeletedasync_catch_115_17__catch",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_117_handlesubscriptiondeletedasync_log_117_18__linear",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__action_117_handlesubscriptiondeletedasync_log_117_18__linear__method:174nry:handlesubscriptiondeletedasync__action_118_handlesubscriptiondeletedasync_return_118_19__return",
          "from": "method:174nry:handlesubscriptiondeletedasync__action_117_handlesubscriptiondeletedasync_log_117_18__linear",
          "to": "method:174nry:handlesubscriptiondeletedasync__action_118_handlesubscriptiondeletedasync_return_118_19__return",
          "kind": "return",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property___jump_NexusReader_Domain_Entities_SubscriptionPlan_FreeName_static_property_",
          "fromNodeId": "method:174nry:handlesubscriptiondeletedasync__call_98_FreeName_static_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.Domain.Entities/SubscriptionPlan",
          "targetHint": "FreeName (static property)",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Call target FreeName (static property) in NexusReader.Domain.Entities/SubscriptionPlan could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync__jump_NexusReader_Data_Persistence_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "fromNodeId": "method:174nry:handlesubscriptiondeletedasync__call_98_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence/AppDbContext",
          "targetHint": "SubscriptionPlans.FirstOrDefaultAsync",
          "line": 98,
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Call target SubscriptionPlans.FirstOrDefaultAsync in NexusReader.Data.Persistence/AppDbContext could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:174nry:handlesubscriptiondeletedasync__action_91_guard_clause_91__merge",
        "method:174nry:handlesubscriptiondeletedasync__action_91_handlesubscriptiondeletedasync_branch_91_3__merge",
        "method:174nry:handlesubscriptiondeletedasync__action_99_handlesubscriptiondeletedasync_branch_99_8__merge",
        "method:174nry:handlesubscriptiondeletedasync__action_106_branch_106__merge",
        "method:174nry:handlesubscriptiondeletedasync__action_106_handlesubscriptiondeletedasync_branch_106_10__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 86,
        "end": 120
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "line": 86,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionDeletedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:axmshz:bookstorageservice__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:axmshz:bookstorageservice",
      "ownerSymbolName": "BookStorageService",
      "entryNodeId": "method:axmshz:bookstorageservice__entry",
      "exitNodeIds": [
        "method:axmshz:bookstorageservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:axmshz:bookstorageservice__entry",
          "kind": "entry",
          "label": "BookStorageService entry",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Ctor; captures IWebHostEnvironment for resolving web root paths."
        },
        {
          "id": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "kind": "statement",
          "label": "Store IWebHostEnvironment",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "_environment = environment"
        },
        {
          "id": "method:axmshz:bookstorageservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:axmshz:bookstorageservice__entry__method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "from": "method:axmshz:bookstorageservice__entry",
          "to": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:axmshz:bookstorageservice__action_16_assign_16__linear__implicit_return",
          "from": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "to": "method:axmshz:bookstorageservice__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method BookStorageService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mpmpcx:saveebookasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:mpmpcx:saveebookasync",
      "ownerSymbolName": "SaveEbookAsync",
      "entryNodeId": "method:mpmpcx:saveebookasync__entry",
      "exitNodeIds": [
        "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
        "method:mpmpcx:saveebookasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mpmpcx:saveebookasync__entry",
          "kind": "entry",
          "label": "SaveEbookAsync entry",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook."
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "kind": "statement",
          "label": "Create MemoryStream for byte[]",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using var stream = new MemoryStream(data)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "return await SaveEbookAsync(stream, fileName);"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return await SaveEbookAsync(stream, fileName);"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "kind": "statement",
          "label": "Delegate to Stream-based save",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "await SaveEbookAsync(stream, fileName)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call",
          "label": "SaveEbookAsync",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "MemoryStream(stream from data), fileName"
        },
        {
          "id": "method:mpmpcx:saveebookasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mpmpcx:saveebookasync__entry__method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "from": "method:mpmpcx:saveebookasync__entry",
          "to": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear__method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "from": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "to": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await__method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "from": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "to": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return__method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "from": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "to": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear__call_method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "from": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "to": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call",
          "label": "MemoryStream(stream from data), fileName",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync__implicit_return",
          "from": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "to": "method:mpmpcx:saveebookasync__implicit_return",
          "kind": "return",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_SaveEbookAsync",
          "fromNodeId": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call-target",
          "targetNodeId": "method:1iw78py:saveebookasync",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "SaveEbookAsync",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target SaveEbookAsync resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 19,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1o0t990:savecoverasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:1o0t990:savecoverasync",
      "ownerSymbolName": "SaveCoverAsync",
      "entryNodeId": "method:1o0t990:savecoverasync__entry",
      "exitNodeIds": [
        "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
        "method:1o0t990:savecoverasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1o0t990:savecoverasync__entry",
          "kind": "entry",
          "label": "SaveCoverAsync entry",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input."
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "kind": "condition",
          "label": "data == null || data.Length == 0",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "if (data == null || data.Length == 0) return null;"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "kind": "branch-true",
          "label": "return-null",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "kind": "condition",
          "label": "data == null || data.Length == 0",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9,
          "detail": "if (data == null || data.Length == 0) return null;"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "kind": "statement",
          "label": "Create MemoryStream for byte[]",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using var stream = new MemoryStream(data)"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "return await SaveCoverAsync(stream, fileName);"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return await SaveCoverAsync(stream, fileName);"
        },
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call",
          "label": "SaveCoverAsync",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "MemoryStream(stream from data), fileName"
        },
        {
          "id": "method:1o0t990:savecoverasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1o0t990:savecoverasync__entry__method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "from": "method:1o0t990:savecoverasync__entry",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition__method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "kind": "condition-true",
          "label": "return-null",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition__method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true__method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false__method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge__method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "to": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear__method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "from": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "to": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await__method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "from": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "to": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return__call_method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "from": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "to": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call",
          "label": "MemoryStream(stream from data), fileName",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync__implicit_return",
          "from": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "to": "method:1o0t990:savecoverasync__implicit_return",
          "kind": "return",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_SaveCoverAsync",
          "fromNodeId": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call-target",
          "targetNodeId": "method:1ouv7tw:savecoverasync",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "SaveCoverAsync",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target SaveCoverAsync resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
        "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 43,
        "end": 48
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 43,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:je6l0s:ensuredirectoryexists__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:je6l0s:ensuredirectoryexists",
      "ownerSymbolName": "EnsureDirectoryExists",
      "entryNodeId": "method:je6l0s:ensuredirectoryexists__entry",
      "exitNodeIds": [
        "method:je6l0s:ensuredirectoryexists__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:je6l0s:ensuredirectoryexists__entry",
          "kind": "entry",
          "label": "EnsureDirectoryExists entry",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Checks for the existence of a directory and creates it if missing."
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78,
          "detail": "if (!Directory.Exists(path))"
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "Directory.CreateDirectory(path)"
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "kind": "branch-true",
          "label": "create-directory",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "statement",
          "label": "merge",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:je6l0s:ensuredirectoryexists__entry__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "from": "method:je6l0s:ensuredirectoryexists__entry",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "kind": "condition-true",
          "label": "create-directory",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge__implicit_return",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "to": "method:je6l0s:ensuredirectoryexists__implicit_return",
          "kind": "return",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
        "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge"
      ],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 66,
        "end": 72
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 66,
          "summary": "Control-flow fragment extracted for method EnsureDirectoryExists.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1vt6hc7:extractmetadataasync__fragment",
      "ownerFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "ownerSymbolId": "method:1vt6hc7:extractmetadataasync",
      "ownerSymbolName": "ExtractMetadataAsync",
      "entryNodeId": "method:1vt6hc7:extractmetadataasync__entry",
      "exitNodeIds": [
        "method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return",
        "method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return",
        "method:1vt6hc7:extractmetadataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1vt6hc7:extractmetadataasync__entry",
          "kind": "entry",
          "label": "ExtractMetadataAsync entry",
          "line": 15,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.99,
          "detail": "Opens an EPUB stream, reads title/author/description/cover (async), and returns a FluentResults success with LocalEpubMetadata or a failure wrapping the exception."
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_17_extractmetadataasync_try_17_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_19_extractmetadataasync_await_19_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.81,
          "detail": "using var bookRef = await EpubReader.OpenBookAsync(epubStream);"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_19_resource_open_await_19__linear",
          "kind": "statement",
          "label": "Open EPUB book asynchronously",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "using var bookRef = await EpubReader.OpenBookAsync(epubStream) — opens EPUB via VersOne.Epub and ensures disposal"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_20_fallback_default_20__linear",
          "kind": "statement",
          "label": "Default title when missing",
          "line": 20,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "var title = bookRef.Title ?? \"Unknown Title\""
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_21_fallback_default_21__linear",
          "kind": "statement",
          "label": "Default author when missing",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "var author = bookRef.Author ?? \"Unknown Author\""
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_22_read_property_22__linear",
          "kind": "statement",
          "label": "Read description",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "var description = bookRef.Description"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_23_extractmetadataasync_await_23_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.81,
          "detail": "byte[]? cover = await bookRef.ReadCoverAsync();"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_23_async_call_23__linear",
          "kind": "statement",
          "label": "Read cover image bytes",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "byte[]? cover = await bookRef.ReadCoverAsync() — async read of embedded cover (library call)"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new LocalEpubMetadata { Title = title, Author = author, CoverImage = cover, Description = description });"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_24_return_success_24__linear",
          "kind": "statement",
          "label": "Return metadata success",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(new LocalEpubMetadata { Title = title, Author = author, CoverImage = cover, Description = description })"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_26_extractmetadataasync_catch_26_4__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_26_try_catch_26__linear",
          "kind": "statement",
          "label": "Catch and convert any exception to a FluentResults failure",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "catch (Exception ex) { return Result.Fail(new Error(...).CausedBy(ex)); }"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Failed to extract EPUB metadata locally: {ex.Message}\").CausedBy(ex));"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_28_return_failure_28__linear",
          "kind": "statement",
          "label": "Return failure with diagnostic message",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(new Error($\"Failed to extract EPUB metadata locally: {ex.Message}\").CausedBy(ex))"
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1vt6hc7:extractmetadataasync__entry__method:1vt6hc7:extractmetadataasync__action_17_extractmetadataasync_try_17_0__try",
          "from": "method:1vt6hc7:extractmetadataasync__entry",
          "to": "method:1vt6hc7:extractmetadataasync__action_17_extractmetadataasync_try_17_0__try",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_17_extractmetadataasync_try_17_0__try__method:1vt6hc7:extractmetadataasync__action_19_extractmetadataasync_await_19_1__await",
          "from": "method:1vt6hc7:extractmetadataasync__action_17_extractmetadataasync_try_17_0__try",
          "to": "method:1vt6hc7:extractmetadataasync__action_19_extractmetadataasync_await_19_1__await",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_19_extractmetadataasync_await_19_1__await__method:1vt6hc7:extractmetadataasync__action_19_resource_open_await_19__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_19_extractmetadataasync_await_19_1__await",
          "to": "method:1vt6hc7:extractmetadataasync__action_19_resource_open_await_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_19_resource_open_await_19__linear__method:1vt6hc7:extractmetadataasync__action_20_fallback_default_20__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_19_resource_open_await_19__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_20_fallback_default_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_20_fallback_default_20__linear__method:1vt6hc7:extractmetadataasync__action_21_fallback_default_21__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_20_fallback_default_20__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_21_fallback_default_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_21_fallback_default_21__linear__method:1vt6hc7:extractmetadataasync__action_22_read_property_22__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_21_fallback_default_21__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_22_read_property_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_22_read_property_22__linear__method:1vt6hc7:extractmetadataasync__action_23_extractmetadataasync_await_23_2__await",
          "from": "method:1vt6hc7:extractmetadataasync__action_22_read_property_22__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_23_extractmetadataasync_await_23_2__await",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_23_extractmetadataasync_await_23_2__await__method:1vt6hc7:extractmetadataasync__action_23_async_call_23__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_23_extractmetadataasync_await_23_2__await",
          "to": "method:1vt6hc7:extractmetadataasync__action_23_async_call_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_23_async_call_23__linear__method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return",
          "from": "method:1vt6hc7:extractmetadataasync__action_23_async_call_23__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return__method:1vt6hc7:extractmetadataasync__action_24_return_success_24__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_24_extractmetadataasync_return_24_3__return",
          "to": "method:1vt6hc7:extractmetadataasync__action_24_return_success_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_24_return_success_24__linear__method:1vt6hc7:extractmetadataasync__action_26_extractmetadataasync_catch_26_4__catch",
          "from": "method:1vt6hc7:extractmetadataasync__action_24_return_success_24__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_26_extractmetadataasync_catch_26_4__catch",
          "kind": "exception",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_26_extractmetadataasync_catch_26_4__catch__method:1vt6hc7:extractmetadataasync__action_26_try_catch_26__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_26_extractmetadataasync_catch_26_4__catch",
          "to": "method:1vt6hc7:extractmetadataasync__action_26_try_catch_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_26_try_catch_26__linear__method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return",
          "from": "method:1vt6hc7:extractmetadataasync__action_26_try_catch_26__linear",
          "to": "method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return__method:1vt6hc7:extractmetadataasync__action_28_return_failure_28__linear",
          "from": "method:1vt6hc7:extractmetadataasync__action_28_extractmetadataasync_return_28_5__return",
          "to": "method:1vt6hc7:extractmetadataasync__action_28_return_failure_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1vt6hc7:extractmetadataasync__action_28_return_failure_28__linear__implicit_return",
          "from": "method:1vt6hc7:extractmetadataasync__action_28_return_failure_28__linear",
          "to": "method:1vt6hc7:extractmetadataasync__implicit_return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 15,
        "end": 30
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method ExtractMetadataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1y3guy7:epubreaderservice__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:1y3guy7:epubreaderservice",
      "ownerSymbolName": "EpubReaderService",
      "entryNodeId": "method:1y3guy7:epubreaderservice__entry",
      "exitNodeIds": [
        "method:1y3guy7:epubreaderservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1y3guy7:epubreaderservice__entry",
          "kind": "entry",
          "label": "EpubReaderService entry",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Constructor that injects the DB context factory and logger."
        },
        {
          "id": "method:1y3guy7:epubreaderservice__action_25_dependency_injection_25__linear",
          "kind": "statement",
          "label": "stores dependencies",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "_dbContextFactory and _logger assigned"
        },
        {
          "id": "method:1y3guy7:epubreaderservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1y3guy7:epubreaderservice__entry__method:1y3guy7:epubreaderservice__action_25_dependency_injection_25__linear",
          "from": "method:1y3guy7:epubreaderservice__entry",
          "to": "method:1y3guy7:epubreaderservice__action_25_dependency_injection_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1y3guy7:epubreaderservice__action_25_dependency_injection_25__linear__implicit_return",
          "from": "method:1y3guy7:epubreaderservice__action_25_dependency_injection_25__linear",
          "to": "method:1y3guy7:epubreaderservice__implicit_return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 21,
        "end": 27
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method EpubReaderService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:bamm0e:getepubcontentasync__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:bamm0e:getepubcontentasync",
      "ownerSymbolName": "GetEpubContentAsync",
      "entryNodeId": "method:bamm0e:getepubcontentasync__entry",
      "exitNodeIds": [
        "method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return",
        "method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return",
        "method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return",
        "method:bamm0e:getepubcontentasync__action_111_return_111__return",
        "method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return",
        "method:bamm0e:getepubcontentasync__action_116_getepubcontentasync_return_116_22__return"
      ],
      "nodes": [
        {
          "id": "method:bamm0e:getepubcontentasync__entry",
          "kind": "entry",
          "label": "GetEpubContentAsync entry",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Main runtime method: resolves the ebook file via DB, parses an EPUB, extracts chapter text into content blocks, inserts AI triggers based on word threshold, and returns a ReaderPageViewModel or a failure result."
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_36_try_catch_36__linear",
          "kind": "statement",
          "label": "overall error handling",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "wraps the full operation and on exception logs and returns Result.Fail"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_36_getepubcontentasync_try_36_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_39_getepubcontentasync_await_39_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81,
          "detail": "using var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_39_persistence_read_39__linear",
          "kind": "statement",
          "label": "resolve ebook row",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "CreateDbContextAsync and query context.Ebooks.FirstOrDefaultAsync to find ebook by id and optional userId"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_await_41_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81,
          "detail": "var ebook = await context.Ebooks"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_repository_read_41_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "var ebook = await context.Ebooks"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition",
          "kind": "condition",
          "label": "ebook == null",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (ebook == null)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition",
          "kind": "condition",
          "label": "ebook == null",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail with message"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__true",
          "kind": "branch-true",
          "label": "fail-return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 49,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Ebook '{ebookId}' not found for user '{userId}'.\");"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_54_external_file_check_54__linear",
          "kind": "statement",
          "label": "resolve filesystem path and verify file exists",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "_logger.LogError and Result.Fail when file missing"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_54_ResolvePath",
          "kind": "call",
          "label": "ResolvePath",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "ebook.FilePath (web-relative path)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition",
          "kind": "condition",
          "label": "fullPath == null || !File.Exists(fullPath)",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (fullPath == null || !File.Exists(fullPath))"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_57_getepubcontentasync_log_57_7__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(\"EPUB file for ebook {EbookId} not found at path '{FilePath}'.\", ebookId, ebook.FilePath);"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"The EPUB file for this book could not be found on the server.\");"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_62_getepubcontentasync_await_62_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81,
          "detail": "using var bookRef = await EpubReader.OpenBookAsync(fullPath);"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_62_external_call_62__linear",
          "kind": "http-call",
          "label": "open EPUB",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Calls VersOne.Epub.EpubReader.OpenBookAsync to open the EPUB (external library)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition",
          "kind": "condition",
          "label": "readingOrder == null || !readingOrder.Any()",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail if EPUB has no readable content"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__true",
          "kind": "branch-true",
          "label": "fail-return",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition",
          "kind": "condition",
          "label": "readingOrder == null || !readingOrder.Any()",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (readingOrder == null || !readingOrder.Any())"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return",
          "kind": "return",
          "label": "Returns result",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"The EPUB has no readable content files in ReadingOrder.\");"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition",
          "kind": "condition",
          "label": "chapterIndex out of bounds",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "sets chapterIndex = 0 when invalid"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__true",
          "kind": "branch-true",
          "label": "reset-to-0",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition",
          "kind": "condition",
          "label": "chapterIndex < 0 || chapterIndex >= readingOrder.Count",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (chapterIndex < 0 || chapterIndex >= readingOrder.Count)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__true",
          "kind": "branch-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__false",
          "kind": "branch-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_77_getepubcontentasync_repository_read_77_13__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "var chapterTitle = FindTitleInNavigation(navigation, chapterRef.FilePath)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation",
          "kind": "call",
          "label": "FindTitleInNavigation",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "navigation, chapterRef.FilePath"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_81_getepubcontentasync_await_81_14__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81,
          "detail": "var chapterContent = await chapterRef.ReadContentAsTextAsync();"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_81_external_call_81__linear",
          "kind": "http-call",
          "label": "read chapter text",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "chapterRef.ReadContentAsTextAsync() (external EPUB object)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs",
          "kind": "call",
          "label": "ExtractParagraphs",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "chapterContent (HTML string)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "kind": "loop-entry",
          "label": "var p in paragraphs",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "foreach (var p in paragraphs)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body",
          "kind": "loop-body",
          "label": "foreach (var p in paragraphs)",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "kind": "loop-entry",
          "label": "iterate paragraphs",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "foreach paragraphs: sanitize, skip empties, add TextSegmentBlock, count words, insert AI trigger when threshold reached"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body",
          "kind": "loop-body",
          "label": "foreach paragraphs: sanitize, skip empties, add TextSegmentBlock, count words, insert AI trigger when threshold reached",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph",
          "kind": "call",
          "label": "SanitizeParagraph",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "paragraph HTML"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(sanitizedContent)",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(sanitizedContent)) continue;"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_96_CountWords",
          "kind": "call",
          "label": "CountWords",
          "line": 96,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "sanitized paragraph text"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_threshold_99__linear",
          "kind": "statement",
          "label": "insert AI trigger after WordThreshold words",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "totalWordCount compared to WordThreshold and resets after inserting trigger block"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition",
          "kind": "condition",
          "label": "totalWordCount >= WordThreshold",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (totalWordCount >= WordThreshold)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__true",
          "kind": "branch-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__false",
          "kind": "branch-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger",
          "kind": "call",
          "label": "CreateAiTrigger",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "generated trigger id"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition",
          "kind": "condition",
          "label": "blocks.Any() && blocks.Last() is not AiActionTriggerBlock",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (blocks.Any() && blocks.Last() is not AiActionTriggerBlock)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__true",
          "kind": "branch-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__false",
          "kind": "branch-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_post_condition_106__linear",
          "kind": "statement",
          "label": "ensure trailing AI trigger",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "adds trigger if last block is not an AiActionTriggerBlock"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger",
          "kind": "call",
          "label": "CreateAiTrigger",
          "line": 108,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "generated trigger id"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_111_return_111__return",
          "kind": "return",
          "label": "successful result",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Ok with ReaderPageViewModel"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new ReaderPageViewModel(blocks, chapterIndex, readingOrder.Count, chapterTitle, ebook.Id));"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_113_getepubcontentasync_catch_113_20__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_115_getepubcontentasync_log_115_21__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"Failed to process EPUB for ebook {EbookId}.\", ebookId);"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_115_log_115__linear",
          "kind": "statement",
          "label": "log error on exception",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "_logger.LogError in catch, returns failure containing exception"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_116_getepubcontentasync_return_116_22__return",
          "kind": "return",
          "label": "Returns result",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Failed to process EPUB: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:bamm0e:getepubcontentasync__entry__method:bamm0e:getepubcontentasync__action_36_try_catch_36__linear",
          "from": "method:bamm0e:getepubcontentasync__entry",
          "to": "method:bamm0e:getepubcontentasync__action_36_try_catch_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_36_try_catch_36__linear__method:bamm0e:getepubcontentasync__action_36_getepubcontentasync_try_36_0__try",
          "from": "method:bamm0e:getepubcontentasync__action_36_try_catch_36__linear",
          "to": "method:bamm0e:getepubcontentasync__action_36_getepubcontentasync_try_36_0__try",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_36_getepubcontentasync_try_36_0__try__method:bamm0e:getepubcontentasync__action_39_getepubcontentasync_await_39_1__await",
          "from": "method:bamm0e:getepubcontentasync__action_36_getepubcontentasync_try_36_0__try",
          "to": "method:bamm0e:getepubcontentasync__action_39_getepubcontentasync_await_39_1__await",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_39_getepubcontentasync_await_39_1__await__method:bamm0e:getepubcontentasync__action_39_persistence_read_39__linear",
          "from": "method:bamm0e:getepubcontentasync__action_39_getepubcontentasync_await_39_1__await",
          "to": "method:bamm0e:getepubcontentasync__action_39_persistence_read_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_39_persistence_read_39__linear__method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_await_41_3__await",
          "from": "method:bamm0e:getepubcontentasync__action_39_persistence_read_39__linear",
          "to": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_await_41_3__await",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_await_41_3__await__method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_repository_read_41_2__linear",
          "from": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_await_41_3__await",
          "to": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_repository_read_41_2__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_repository_read_41_2__linear__method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition",
          "from": "method:bamm0e:getepubcontentasync__action_41_getepubcontentasync_repository_read_41_2__linear",
          "to": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition__method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__true",
          "from": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition",
          "to": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition__method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__false",
          "from": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__condition",
          "to": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__true__method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "from": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__true",
          "to": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__false__method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "from": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__false",
          "to": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge__method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition",
          "from": "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
          "to": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition__method:bamm0e:getepubcontentasync__action_47_guard_clause_47__true",
          "from": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition",
          "to": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__true",
          "kind": "condition-true",
          "label": "fail-return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition__method:bamm0e:getepubcontentasync__action_47_guard_clause_47__false",
          "from": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__condition",
          "to": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__true__method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "from": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__true",
          "to": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__false__method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "from": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__false",
          "to": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge__method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return",
          "from": "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
          "to": "method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return",
          "kind": "return",
          "line": 49,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return__method:bamm0e:getepubcontentasync__action_54_external_file_check_54__linear",
          "from": "method:bamm0e:getepubcontentasync__action_49_getepubcontentasync_return_49_5__return",
          "to": "method:bamm0e:getepubcontentasync__action_54_external_file_check_54__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_54_external_file_check_54__linear__call_method:bamm0e:getepubcontentasync__call_54_ResolvePath",
          "from": "method:bamm0e:getepubcontentasync__action_54_external_file_check_54__linear",
          "to": "method:bamm0e:getepubcontentasync__call_54_ResolvePath",
          "kind": "call",
          "label": "ebook.FilePath (web-relative path)",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_54_ResolvePath__method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition",
          "from": "method:bamm0e:getepubcontentasync__call_54_ResolvePath",
          "to": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition__method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__true",
          "from": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition",
          "to": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition__method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__false",
          "from": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__condition",
          "to": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__true__method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "from": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__true",
          "to": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__false__method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "from": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__false",
          "to": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge__method:bamm0e:getepubcontentasync__action_57_getepubcontentasync_log_57_7__linear",
          "from": "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
          "to": "method:bamm0e:getepubcontentasync__action_57_getepubcontentasync_log_57_7__linear",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_57_getepubcontentasync_log_57_7__linear__method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return",
          "from": "method:bamm0e:getepubcontentasync__action_57_getepubcontentasync_log_57_7__linear",
          "to": "method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return",
          "kind": "return",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return__method:bamm0e:getepubcontentasync__action_62_getepubcontentasync_await_62_9__await",
          "from": "method:bamm0e:getepubcontentasync__action_58_getepubcontentasync_return_58_8__return",
          "to": "method:bamm0e:getepubcontentasync__action_62_getepubcontentasync_await_62_9__await",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_62_getepubcontentasync_await_62_9__await__method:bamm0e:getepubcontentasync__action_62_external_call_62__linear",
          "from": "method:bamm0e:getepubcontentasync__action_62_getepubcontentasync_await_62_9__await",
          "to": "method:bamm0e:getepubcontentasync__action_62_external_call_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_62_external_call_62__linear__method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition",
          "from": "method:bamm0e:getepubcontentasync__action_62_external_call_62__linear",
          "to": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition__method:bamm0e:getepubcontentasync__action_65_guard_clause_65__true",
          "from": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition",
          "to": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__true",
          "kind": "condition-true",
          "label": "fail-return",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition__method:bamm0e:getepubcontentasync__action_65_guard_clause_65__false",
          "from": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__condition",
          "to": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__true__method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "from": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__true",
          "to": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__false__method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "from": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__false",
          "to": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge__method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition",
          "from": "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
          "to": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition__method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__true",
          "from": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition",
          "to": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition__method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__false",
          "from": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__condition",
          "to": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__true__method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "from": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__true",
          "to": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__false__method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "from": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__false",
          "to": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge__method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return",
          "from": "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
          "to": "method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return__method:bamm0e:getepubcontentasync__action_70_branch_70__condition",
          "from": "method:bamm0e:getepubcontentasync__action_67_getepubcontentasync_return_67_11__return",
          "to": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition__method:bamm0e:getepubcontentasync__action_70_branch_70__true",
          "from": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition",
          "to": "method:bamm0e:getepubcontentasync__action_70_branch_70__true",
          "kind": "condition-true",
          "label": "reset-to-0",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition__method:bamm0e:getepubcontentasync__action_70_branch_70__false",
          "from": "method:bamm0e:getepubcontentasync__action_70_branch_70__condition",
          "to": "method:bamm0e:getepubcontentasync__action_70_branch_70__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__true__method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "from": "method:bamm0e:getepubcontentasync__action_70_branch_70__true",
          "to": "method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__false__method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "from": "method:bamm0e:getepubcontentasync__action_70_branch_70__false",
          "to": "method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_branch_70__merge__method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition",
          "from": "method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
          "to": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition__method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__true",
          "from": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition",
          "to": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__true",
          "kind": "condition-true",
          "label": "true",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition__method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__false",
          "from": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__condition",
          "to": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__false",
          "kind": "condition-false",
          "label": "false",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__true__method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "from": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__true",
          "to": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__false__method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "from": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__false",
          "to": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge__method:bamm0e:getepubcontentasync__action_77_getepubcontentasync_repository_read_77_13__linear",
          "from": "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
          "to": "method:bamm0e:getepubcontentasync__action_77_getepubcontentasync_repository_read_77_13__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_77_getepubcontentasync_repository_read_77_13__linear__call_method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation",
          "from": "method:bamm0e:getepubcontentasync__action_77_getepubcontentasync_repository_read_77_13__linear",
          "to": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation",
          "kind": "call",
          "label": "navigation, chapterRef.FilePath",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation__method:bamm0e:getepubcontentasync__action_81_getepubcontentasync_await_81_14__await",
          "from": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation",
          "to": "method:bamm0e:getepubcontentasync__action_81_getepubcontentasync_await_81_14__await",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_81_getepubcontentasync_await_81_14__await__method:bamm0e:getepubcontentasync__action_81_external_call_81__linear",
          "from": "method:bamm0e:getepubcontentasync__action_81_getepubcontentasync_await_81_14__await",
          "to": "method:bamm0e:getepubcontentasync__action_81_external_call_81__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_81_external_call_81__linear__call_method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs",
          "from": "method:bamm0e:getepubcontentasync__action_81_external_call_81__linear",
          "to": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs",
          "kind": "call",
          "label": "chapterContent (HTML string)",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs__method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "from": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs",
          "to": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry__method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body",
          "from": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "to": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body",
          "kind": "loop-body",
          "label": "var p in paragraphs",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body__method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "from": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body",
          "to": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry__method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_exit",
          "from": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
          "to": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_exit__method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "from": "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_exit",
          "to": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry__method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body",
          "from": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "to": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body__method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "from": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body",
          "to": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry__method:bamm0e:getepubcontentasync__action_89_loop_89__loop_exit",
          "from": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry",
          "to": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 89,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_exit__call_method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph",
          "from": "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_exit",
          "to": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph",
          "kind": "call",
          "label": "paragraph HTML",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph__method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition",
          "from": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph",
          "to": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition__method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__true",
          "from": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition",
          "to": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition__method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__false",
          "from": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__condition",
          "to": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__true__method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "from": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__true",
          "to": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__false__method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "from": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__false",
          "to": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge__call_method:bamm0e:getepubcontentasync__call_96_CountWords",
          "from": "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
          "to": "method:bamm0e:getepubcontentasync__call_96_CountWords",
          "kind": "call",
          "label": "sanitized paragraph text",
          "line": 96,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_96_CountWords__method:bamm0e:getepubcontentasync__action_99_threshold_99__linear",
          "from": "method:bamm0e:getepubcontentasync__call_96_CountWords",
          "to": "method:bamm0e:getepubcontentasync__action_99_threshold_99__linear",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_threshold_99__linear__method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition",
          "from": "method:bamm0e:getepubcontentasync__action_99_threshold_99__linear",
          "to": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition__method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__true",
          "from": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition",
          "to": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__true",
          "kind": "condition-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition__method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__false",
          "from": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__condition",
          "to": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__false",
          "kind": "condition-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__true__method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "from": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__true",
          "to": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__false__method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "from": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__false",
          "to": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge__call_method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger",
          "from": "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
          "to": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger",
          "kind": "call",
          "label": "generated trigger id",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger__method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition",
          "from": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger",
          "to": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition__method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__true",
          "from": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition",
          "to": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__true",
          "kind": "condition-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition__method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__false",
          "from": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__condition",
          "to": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__false",
          "kind": "condition-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__true__method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "from": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__true",
          "to": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__false__method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "from": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__false",
          "to": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge__method:bamm0e:getepubcontentasync__action_106_post_condition_106__linear",
          "from": "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge",
          "to": "method:bamm0e:getepubcontentasync__action_106_post_condition_106__linear",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_106_post_condition_106__linear__call_method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger",
          "from": "method:bamm0e:getepubcontentasync__action_106_post_condition_106__linear",
          "to": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger",
          "kind": "call",
          "label": "generated trigger id",
          "line": 108,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger__method:bamm0e:getepubcontentasync__action_111_return_111__return",
          "from": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger",
          "to": "method:bamm0e:getepubcontentasync__action_111_return_111__return",
          "kind": "return",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_111_return_111__return__method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return",
          "from": "method:bamm0e:getepubcontentasync__action_111_return_111__return",
          "to": "method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return",
          "kind": "return",
          "line": 111,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return__method:bamm0e:getepubcontentasync__action_113_getepubcontentasync_catch_113_20__catch",
          "from": "method:bamm0e:getepubcontentasync__action_111_getepubcontentasync_return_111_19__return",
          "to": "method:bamm0e:getepubcontentasync__action_113_getepubcontentasync_catch_113_20__catch",
          "kind": "exception",
          "line": 113,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_113_getepubcontentasync_catch_113_20__catch__method:bamm0e:getepubcontentasync__action_115_getepubcontentasync_log_115_21__linear",
          "from": "method:bamm0e:getepubcontentasync__action_113_getepubcontentasync_catch_113_20__catch",
          "to": "method:bamm0e:getepubcontentasync__action_115_getepubcontentasync_log_115_21__linear",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_115_getepubcontentasync_log_115_21__linear__method:bamm0e:getepubcontentasync__action_115_log_115__linear",
          "from": "method:bamm0e:getepubcontentasync__action_115_getepubcontentasync_log_115_21__linear",
          "to": "method:bamm0e:getepubcontentasync__action_115_log_115__linear",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:bamm0e:getepubcontentasync__action_115_log_115__linear__method:bamm0e:getepubcontentasync__action_116_getepubcontentasync_return_116_22__return",
          "from": "method:bamm0e:getepubcontentasync__action_115_log_115__linear",
          "to": "method:bamm0e:getepubcontentasync__action_116_getepubcontentasync_return_116_22__return",
          "kind": "return",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:bamm0e:getepubcontentasync__call_54_ResolvePath__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_ResolvePath",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_54_ResolvePath",
          "kind": "call-target",
          "targetNodeId": "method:fxyqm0:resolvepath",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "ResolvePath",
          "line": 54,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target ResolvePath resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_FindTitleInNavigation",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_77_FindTitleInNavigation",
          "kind": "call-target",
          "targetNodeId": "method:12jssth:findtitleinnavigation",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "FindTitleInNavigation",
          "line": 77,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target FindTitleInNavigation resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_ExtractParagraphs",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_88_ExtractParagraphs",
          "kind": "call-target",
          "targetNodeId": "method:1tcm0y0:extractparagraphs",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "ExtractParagraphs",
          "line": 88,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target ExtractParagraphs resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_SanitizeParagraph",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_91_SanitizeParagraph",
          "kind": "call-target",
          "targetNodeId": "method:1mthy2:sanitizeparagraph",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "SanitizeParagraph",
          "line": 91,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target SanitizeParagraph resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_96_CountWords__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_CountWords",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_96_CountWords",
          "kind": "call-target",
          "targetNodeId": "method:85035t:countwords",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "CountWords",
          "line": 96,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target CountWords resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_CreateAiTrigger",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_101_CreateAiTrigger",
          "kind": "call-target",
          "targetNodeId": "method:9ls8js:createaitrigger",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "CreateAiTrigger",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target CreateAiTrigger resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_CreateAiTrigger",
          "fromNodeId": "method:bamm0e:getepubcontentasync__call_108_CreateAiTrigger",
          "kind": "call-target",
          "targetNodeId": "method:9ls8js:createaitrigger",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "CreateAiTrigger",
          "line": 108,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target CreateAiTrigger resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_body__method:bamm0e:getepubcontentasync__action_89_getepubcontentasync_loop_89_15__loop_entry",
        "method:bamm0e:getepubcontentasync__action_89_loop_89__loop_body__method:bamm0e:getepubcontentasync__action_89_loop_89__loop_entry"
      ],
      "mergeNodeIds": [
        "method:bamm0e:getepubcontentasync__action_47_getepubcontentasync_branch_47_4__merge",
        "method:bamm0e:getepubcontentasync__action_47_guard_clause_47__merge",
        "method:bamm0e:getepubcontentasync__action_55_getepubcontentasync_branch_55_6__merge",
        "method:bamm0e:getepubcontentasync__action_65_guard_clause_65__merge",
        "method:bamm0e:getepubcontentasync__action_65_getepubcontentasync_branch_65_10__merge",
        "method:bamm0e:getepubcontentasync__action_70_branch_70__merge",
        "method:bamm0e:getepubcontentasync__action_70_getepubcontentasync_branch_70_12__merge",
        "method:bamm0e:getepubcontentasync__action_92_getepubcontentasync_guard_clause_92_16__merge",
        "method:bamm0e:getepubcontentasync__action_99_getepubcontentasync_branch_99_17__merge",
        "method:bamm0e:getepubcontentasync__action_106_getepubcontentasync_branch_106_18__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 30,
        "end": 118
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 30,
          "summary": "Control-flow fragment extracted for method GetEpubContentAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:fxyqm0:resolvepath__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:fxyqm0:resolvepath",
      "ownerSymbolName": "ResolvePath",
      "entryNodeId": "method:fxyqm0:resolvepath__entry",
      "exitNodeIds": [
        "method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return",
        "method:fxyqm0:resolvepath__action_142_return_142__return"
      ],
      "nodes": [
        {
          "id": "method:fxyqm0:resolvepath__entry",
          "kind": "entry",
          "label": "ResolvePath entry",
          "line": 124,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Resolves a web-relative storage path to an absolute filesystem path by searching up the app base directory for wwwroot (and a development src path)."
        },
        {
          "id": "method:fxyqm0:resolvepath__action_127_normalization_127__linear",
          "kind": "statement",
          "label": "normalize path separators",
          "line": 127,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "converts '/' to OS directory separator"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "kind": "loop-entry",
          "label": "walk parent directories",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "iteratively checks currentDir and its parents for candidate and devCandidate locations"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_body",
          "kind": "loop-body",
          "label": "iteratively checks currentDir and its parents for candidate and devCandidate locations",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "kind": "loop-entry",
          "label": "currentDir != null",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "while (currentDir != null)"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body",
          "kind": "loop-body",
          "label": "while (currentDir != null)",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_132_file_exists_check_132__linear",
          "kind": "statement",
          "label": "check candidate paths",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns candidate or devCandidate when File.Exists"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition",
          "kind": "condition",
          "label": "File.Exists(candidate)",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (File.Exists(candidate)) return candidate;"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition",
          "kind": "condition",
          "label": "File.Exists(devCandidate)",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (File.Exists(devCandidate)) return devCandidate;"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 142,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:fxyqm0:resolvepath__action_142_return_142__return",
          "kind": "return",
          "label": "not found",
          "line": 142,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns null if no candidate found"
        }
      ],
      "edges": [
        {
          "id": "method:fxyqm0:resolvepath__entry__method:fxyqm0:resolvepath__action_127_normalization_127__linear",
          "from": "method:fxyqm0:resolvepath__entry",
          "to": "method:fxyqm0:resolvepath__action_127_normalization_127__linear",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_127_normalization_127__linear__method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "from": "method:fxyqm0:resolvepath__action_127_normalization_127__linear",
          "to": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry__method:fxyqm0:resolvepath__action_130_loop_130__loop_body",
          "from": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "to": "method:fxyqm0:resolvepath__action_130_loop_130__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_body__method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "from": "method:fxyqm0:resolvepath__action_130_loop_130__loop_body",
          "to": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry__method:fxyqm0:resolvepath__action_130_loop_130__loop_exit",
          "from": "method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
          "to": "method:fxyqm0:resolvepath__action_130_loop_130__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_loop_130__loop_exit__method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "from": "method:fxyqm0:resolvepath__action_130_loop_130__loop_exit",
          "to": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry__method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body",
          "from": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "to": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body",
          "kind": "loop-body",
          "label": "currentDir != null",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body__method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "from": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body",
          "to": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry__method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_exit",
          "from": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry",
          "to": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 130,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_exit__method:fxyqm0:resolvepath__action_132_file_exists_check_132__linear",
          "from": "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_exit",
          "to": "method:fxyqm0:resolvepath__action_132_file_exists_check_132__linear",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_132_file_exists_check_132__linear__method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition",
          "from": "method:fxyqm0:resolvepath__action_132_file_exists_check_132__linear",
          "to": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition__method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__true",
          "from": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition",
          "to": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition__method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__false",
          "from": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__condition",
          "to": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__true__method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "from": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__true",
          "to": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__false__method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "from": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__false",
          "to": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge__method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition",
          "from": "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
          "to": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition__method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__true",
          "from": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition",
          "to": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition__method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__false",
          "from": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__condition",
          "to": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__true__method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "from": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__true",
          "to": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__false__method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "from": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__false",
          "to": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge__method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return",
          "from": "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge",
          "to": "method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return",
          "kind": "return",
          "line": 142,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return__method:fxyqm0:resolvepath__action_142_return_142__return",
          "from": "method:fxyqm0:resolvepath__action_142_resolvepath_return_142_3__return",
          "to": "method:fxyqm0:resolvepath__action_142_return_142__return",
          "kind": "return",
          "line": 142,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:fxyqm0:resolvepath__action_130_loop_130__loop_body__method:fxyqm0:resolvepath__action_130_loop_130__loop_entry",
        "method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_body__method:fxyqm0:resolvepath__action_130_resolvepath_loop_130_0__loop_entry"
      ],
      "mergeNodeIds": [
        "method:fxyqm0:resolvepath__action_133_resolvepath_guard_clause_133_1__merge",
        "method:fxyqm0:resolvepath__action_137_resolvepath_guard_clause_137_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 124,
        "end": 143
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 124,
          "summary": "Control-flow fragment extracted for method ResolvePath.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1tcm0y0:extractparagraphs__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:1tcm0y0:extractparagraphs",
      "ownerSymbolName": "ExtractParagraphs",
      "entryNodeId": "method:1tcm0y0:extractparagraphs__entry",
      "exitNodeIds": [
        "method:1tcm0y0:extractparagraphs__action_163_extractparagraphs_return_163_2__return"
      ],
      "nodes": [
        {
          "id": "method:1tcm0y0:extractparagraphs__entry",
          "kind": "entry",
          "label": "ExtractParagraphs entry",
          "line": 145,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Extracts paragraph-like blocks from HTML by selecting <p>, headings, lists, blockquote, pre, hr or splitting on breaks when none found."
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_147_regex_parse_147__linear",
          "kind": "statement",
          "label": "extract body content",
          "line": 147,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Regex.Match to capture <body> contents or fallback to full html"
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_151_regex_parse_151__linear",
          "kind": "statement",
          "label": "find paragraph-like tags",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Regex.Matches selects p, h1-6, ul, ol, blockquote, pre, hr"
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "kind": "loop-entry",
          "label": "Match match in matches",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "foreach (Match match in matches)"
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body",
          "kind": "loop-body",
          "label": "foreach (Match match in matches)",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_fallback_split_158__linear",
          "kind": "statement",
          "label": "split by breaks when no matches",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "splits on <br />, <br>, double newlines"
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition",
          "kind": "condition",
          "label": "paragraphs.Count == 0",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (paragraphs.Count == 0)"
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_163_extractparagraphs_return_163_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 163,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return paragraphs;"
        }
      ],
      "edges": [
        {
          "id": "method:1tcm0y0:extractparagraphs__entry__method:1tcm0y0:extractparagraphs__action_147_regex_parse_147__linear",
          "from": "method:1tcm0y0:extractparagraphs__entry",
          "to": "method:1tcm0y0:extractparagraphs__action_147_regex_parse_147__linear",
          "kind": "next",
          "line": 147,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_147_regex_parse_147__linear__method:1tcm0y0:extractparagraphs__action_151_regex_parse_151__linear",
          "from": "method:1tcm0y0:extractparagraphs__action_147_regex_parse_147__linear",
          "to": "method:1tcm0y0:extractparagraphs__action_151_regex_parse_151__linear",
          "kind": "next",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_151_regex_parse_151__linear__method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "from": "method:1tcm0y0:extractparagraphs__action_151_regex_parse_151__linear",
          "to": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry__method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body",
          "from": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "to": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body",
          "kind": "loop-body",
          "label": "Match match in matches",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body__method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "from": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body",
          "to": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry__method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_exit",
          "from": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry",
          "to": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 153,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_exit__method:1tcm0y0:extractparagraphs__action_158_fallback_split_158__linear",
          "from": "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_exit",
          "to": "method:1tcm0y0:extractparagraphs__action_158_fallback_split_158__linear",
          "kind": "next",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_fallback_split_158__linear__method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition",
          "from": "method:1tcm0y0:extractparagraphs__action_158_fallback_split_158__linear",
          "to": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition",
          "kind": "next",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition__method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__true",
          "from": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition",
          "to": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition__method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__false",
          "from": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__condition",
          "to": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__true__method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "from": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__true",
          "to": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "kind": "next",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__false__method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "from": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__false",
          "to": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "kind": "next",
          "line": 158,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge__method:1tcm0y0:extractparagraphs__action_163_extractparagraphs_return_163_2__return",
          "from": "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge",
          "to": "method:1tcm0y0:extractparagraphs__action_163_extractparagraphs_return_163_2__return",
          "kind": "return",
          "line": 163,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_body__method:1tcm0y0:extractparagraphs__action_153_extractparagraphs_loop_153_0__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1tcm0y0:extractparagraphs__action_158_extractparagraphs_branch_158_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 145,
        "end": 164
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 145,
          "summary": "Control-flow fragment extracted for method ExtractParagraphs.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1mthy2:sanitizeparagraph__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:1mthy2:sanitizeparagraph",
      "ownerSymbolName": "SanitizeParagraph",
      "entryNodeId": "method:1mthy2:sanitizeparagraph__entry",
      "exitNodeIds": [
        "method:1mthy2:sanitizeparagraph__action_172_sanitizeparagraph_return_172_0__return"
      ],
      "nodes": [
        {
          "id": "method:1mthy2:sanitizeparagraph__entry",
          "kind": "entry",
          "label": "SanitizeParagraph entry",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Sanitizes HTML paragraph content by removing scripts/styles, stripping disallowed tags, normalizing allowed tags, HTML-decoding and trimming."
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_168_regex_clean_168__linear",
          "kind": "statement",
          "label": "remove script/style blocks",
          "line": 168,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Regex.Replace to remove <script> and <style> contents"
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_169_regex_clean_169__linear",
          "kind": "statement",
          "label": "strip disallowed tags",
          "line": 169,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Regex.Replace removes tags not in allow-list"
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_170_regex_normalize_170__linear",
          "kind": "statement",
          "label": "normalize allowed tags",
          "line": 170,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "Regex.Replace to simplify allowed tags to base form"
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_171_html_decode_171__linear",
          "kind": "statement",
          "label": "decode entities",
          "line": 171,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "System.Net.WebUtility.HtmlDecode"
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_172_sanitizeparagraph_return_172_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 172,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return clean.Trim();"
        }
      ],
      "edges": [
        {
          "id": "method:1mthy2:sanitizeparagraph__entry__method:1mthy2:sanitizeparagraph__action_168_regex_clean_168__linear",
          "from": "method:1mthy2:sanitizeparagraph__entry",
          "to": "method:1mthy2:sanitizeparagraph__action_168_regex_clean_168__linear",
          "kind": "next",
          "line": 168,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_168_regex_clean_168__linear__method:1mthy2:sanitizeparagraph__action_169_regex_clean_169__linear",
          "from": "method:1mthy2:sanitizeparagraph__action_168_regex_clean_168__linear",
          "to": "method:1mthy2:sanitizeparagraph__action_169_regex_clean_169__linear",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_169_regex_clean_169__linear__method:1mthy2:sanitizeparagraph__action_170_regex_normalize_170__linear",
          "from": "method:1mthy2:sanitizeparagraph__action_169_regex_clean_169__linear",
          "to": "method:1mthy2:sanitizeparagraph__action_170_regex_normalize_170__linear",
          "kind": "next",
          "line": 170,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_170_regex_normalize_170__linear__method:1mthy2:sanitizeparagraph__action_171_html_decode_171__linear",
          "from": "method:1mthy2:sanitizeparagraph__action_170_regex_normalize_170__linear",
          "to": "method:1mthy2:sanitizeparagraph__action_171_html_decode_171__linear",
          "kind": "next",
          "line": 171,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1mthy2:sanitizeparagraph__action_171_html_decode_171__linear__method:1mthy2:sanitizeparagraph__action_172_sanitizeparagraph_return_172_0__return",
          "from": "method:1mthy2:sanitizeparagraph__action_171_html_decode_171__linear",
          "to": "method:1mthy2:sanitizeparagraph__action_172_sanitizeparagraph_return_172_0__return",
          "kind": "return",
          "line": 172,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 166,
        "end": 173
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 166,
          "summary": "Control-flow fragment extracted for method SanitizeParagraph.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:85035t:countwords__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:85035t:countwords",
      "ownerSymbolName": "CountWords",
      "entryNodeId": "method:85035t:countwords__entry",
      "exitNodeIds": [
        "method:85035t:countwords__action_178_countwords_return_178_1__return"
      ],
      "nodes": [
        {
          "id": "method:85035t:countwords__entry",
          "kind": "entry",
          "label": "CountWords entry",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input."
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(text)",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(text)) return 0;"
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__condition",
          "kind": "condition",
          "label": "empty check",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns 0 if string.IsNullOrWhiteSpace"
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__true",
          "kind": "branch-true",
          "label": "true",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__false",
          "kind": "branch-false",
          "label": "false",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__merge",
          "kind": "statement",
          "label": "merge",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_178_split_count_178__linear",
          "kind": "statement",
          "label": "split on whitespace and count",
          "line": 178,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "text.Split with separators [' ', '\\r', '\\n', '\\t']"
        },
        {
          "id": "method:85035t:countwords__action_178_countwords_return_178_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 178,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return text.Split(new[] { ' ', '\\r', '\\n', '\\t' }, StringSplitOptions.RemoveEmptyEntries).Length;"
        }
      ],
      "edges": [
        {
          "id": "method:85035t:countwords__entry__method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition",
          "from": "method:85035t:countwords__entry",
          "to": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition__method:85035t:countwords__action_177_countwords_guard_clause_177_0__true",
          "from": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition",
          "to": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition__method:85035t:countwords__action_177_countwords_guard_clause_177_0__false",
          "from": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__condition",
          "to": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__true__method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "from": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__true",
          "to": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__false__method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "from": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__false",
          "to": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge__method:85035t:countwords__action_177_guard_clause_177__condition",
          "from": "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
          "to": "method:85035t:countwords__action_177_guard_clause_177__condition",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__condition__method:85035t:countwords__action_177_guard_clause_177__true",
          "from": "method:85035t:countwords__action_177_guard_clause_177__condition",
          "to": "method:85035t:countwords__action_177_guard_clause_177__true",
          "kind": "condition-true",
          "label": "true",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__condition__method:85035t:countwords__action_177_guard_clause_177__false",
          "from": "method:85035t:countwords__action_177_guard_clause_177__condition",
          "to": "method:85035t:countwords__action_177_guard_clause_177__false",
          "kind": "condition-false",
          "label": "false",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__true__method:85035t:countwords__action_177_guard_clause_177__merge",
          "from": "method:85035t:countwords__action_177_guard_clause_177__true",
          "to": "method:85035t:countwords__action_177_guard_clause_177__merge",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__false__method:85035t:countwords__action_177_guard_clause_177__merge",
          "from": "method:85035t:countwords__action_177_guard_clause_177__false",
          "to": "method:85035t:countwords__action_177_guard_clause_177__merge",
          "kind": "next",
          "line": 177,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_177_guard_clause_177__merge__method:85035t:countwords__action_178_split_count_178__linear",
          "from": "method:85035t:countwords__action_177_guard_clause_177__merge",
          "to": "method:85035t:countwords__action_178_split_count_178__linear",
          "kind": "next",
          "line": 178,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:85035t:countwords__action_178_split_count_178__linear__method:85035t:countwords__action_178_countwords_return_178_1__return",
          "from": "method:85035t:countwords__action_178_split_count_178__linear",
          "to": "method:85035t:countwords__action_178_countwords_return_178_1__return",
          "kind": "return",
          "line": 178,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:85035t:countwords__action_177_countwords_guard_clause_177_0__merge",
        "method:85035t:countwords__action_177_guard_clause_177__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 175,
        "end": 179
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 175,
          "summary": "Control-flow fragment extracted for method CountWords.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:9ls8js:createaitrigger__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:9ls8js:createaitrigger",
      "ownerSymbolName": "CreateAiTrigger",
      "entryNodeId": "method:9ls8js:createaitrigger__entry",
      "exitNodeIds": [
        "method:9ls8js:createaitrigger__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:9ls8js:createaitrigger__entry",
          "kind": "entry",
          "label": "CreateAiTrigger entry",
          "line": 181,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Factory that creates an AiActionTriggerBlock with localized prompt and action labels."
        },
        {
          "id": "method:9ls8js:createaitrigger__action_181_factory_181__linear",
          "kind": "statement",
          "label": "instantiate AiActionTriggerBlock",
          "line": 181,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns new AiActionTriggerBlock with id, Polish prompt and choices"
        },
        {
          "id": "method:9ls8js:createaitrigger__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 184,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:9ls8js:createaitrigger__entry__method:9ls8js:createaitrigger__action_181_factory_181__linear",
          "from": "method:9ls8js:createaitrigger__entry",
          "to": "method:9ls8js:createaitrigger__action_181_factory_181__linear",
          "kind": "next",
          "line": 181,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:9ls8js:createaitrigger__action_181_factory_181__linear__implicit_return",
          "from": "method:9ls8js:createaitrigger__action_181_factory_181__linear",
          "to": "method:9ls8js:createaitrigger__implicit_return",
          "kind": "return",
          "line": 184,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 181,
        "end": 184
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 181,
          "summary": "Control-flow fragment extracted for method CreateAiTrigger.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:12jssth:findtitleinnavigation__fragment",
      "ownerFileId": "file:q4k94a:epubreaderservice-cs",
      "ownerSymbolId": "method:12jssth:findtitleinnavigation",
      "ownerSymbolName": "FindTitleInNavigation",
      "entryNodeId": "method:12jssth:findtitleinnavigation__entry",
      "exitNodeIds": [
        "method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return",
        "method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return",
        "method:12jssth:findtitleinnavigation__action_203_return_203__return"
      ],
      "nodes": [
        {
          "id": "method:12jssth:findtitleinnavigation__entry",
          "kind": "entry",
          "label": "FindTitleInNavigation entry",
          "line": 186,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.99,
          "detail": "Recursively searches EPUB navigation items for a title that matches a given file path or file name."
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_186_findtitleinnavigation_repository_read_186_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 186,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "private static string? FindTitleInNavigation(IEnumerable<EpubNavigationItemRef> navigation, string? filePath)"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition",
          "kind": "condition",
          "label": "null/empty filePath",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns null when filePath is null or empty"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__true",
          "kind": "branch-true",
          "label": "true",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__false",
          "kind": "branch-false",
          "label": "false",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "kind": "statement",
          "label": "merge",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(filePath)",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(filePath)) return null;"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "kind": "loop-entry",
          "label": "var item in navigation",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "foreach (var item in navigation)"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body",
          "kind": "loop-body",
          "label": "foreach (var item in navigation)",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "kind": "loop-entry",
          "label": "iterate navigation items",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "for each navigation item compare Link.ContentFilePath or fileName and return item.Title if match"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body",
          "kind": "loop-body",
          "label": "for each navigation item compare Link.ContentFilePath or fileName and return item.Title if match",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition",
          "kind": "condition",
          "label": "item.Link?.ContentFilePath == filePath || item.Link?.ContentFilePath == fileName",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (item.Link?.ContentFilePath == filePath || item.Link?.ContentFilePath == fileName)"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return item.Title;"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_recursion_196__linear",
          "kind": "statement",
          "label": "search nested items",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "recursively calls itself for nested navigation items and returns childTitle when found"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition",
          "kind": "condition",
          "label": "item.NestedItems?.Any() == true",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78,
          "detail": "if (item.NestedItems?.Any() == true)"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_198_findtitleinnavigation_repository_read_198_6__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 198,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86,
          "detail": "var childTitle = FindTitleInNavigation(item.NestedItems, filePath);"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation",
          "kind": "call",
          "label": "FindTitleInNavigation",
          "line": 198,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88,
          "detail": "item.NestedItems, filePath (recursive search)"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition",
          "kind": "condition",
          "label": "childTitle != null",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9,
          "detail": "if (childTitle != null) return childTitle;"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 203,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_203_return_203__return",
          "kind": "return",
          "label": "not found",
          "line": 203,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7,
          "detail": "returns null if no matching title found"
        }
      ],
      "edges": [
        {
          "id": "method:12jssth:findtitleinnavigation__entry__method:12jssth:findtitleinnavigation__action_186_findtitleinnavigation_repository_read_186_0__linear",
          "from": "method:12jssth:findtitleinnavigation__entry",
          "to": "method:12jssth:findtitleinnavigation__action_186_findtitleinnavigation_repository_read_186_0__linear",
          "kind": "next",
          "line": 186,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_186_findtitleinnavigation_repository_read_186_0__linear__method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition",
          "from": "method:12jssth:findtitleinnavigation__action_186_findtitleinnavigation_repository_read_186_0__linear",
          "to": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition__method:12jssth:findtitleinnavigation__action_188_guard_clause_188__true",
          "from": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition",
          "to": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__true",
          "kind": "condition-true",
          "label": "true",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition__method:12jssth:findtitleinnavigation__action_188_guard_clause_188__false",
          "from": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__condition",
          "to": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__false",
          "kind": "condition-false",
          "label": "false",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__true__method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "from": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__true",
          "to": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__false__method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "from": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__false",
          "to": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge__method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition",
          "from": "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
          "to": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition__method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__true",
          "from": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition",
          "to": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition__method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__false",
          "from": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__condition",
          "to": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__true__method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "from": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__true",
          "to": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__false__method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "from": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__false",
          "to": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge__method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "from": "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
          "to": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "kind": "next",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry__method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body",
          "from": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "to": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body",
          "kind": "loop-body",
          "label": "var item in navigation",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body__method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "from": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body",
          "to": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry__method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_exit",
          "from": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
          "to": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_exit__method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "from": "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_exit",
          "to": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "kind": "next",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry__method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body",
          "from": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "to": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body__method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "from": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body",
          "to": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry__method:12jssth:findtitleinnavigation__action_191_loop_191__loop_exit",
          "from": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry",
          "to": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 191,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_exit__method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition",
          "from": "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_exit",
          "to": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition__method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__true",
          "from": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition",
          "to": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition__method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__false",
          "from": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__condition",
          "to": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__true__method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "from": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__true",
          "to": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__false__method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "from": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__false",
          "to": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge__method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return",
          "from": "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
          "to": "method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return",
          "kind": "return",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return__method:12jssth:findtitleinnavigation__action_196_recursion_196__linear",
          "from": "method:12jssth:findtitleinnavigation__action_194_findtitleinnavigation_return_194_4__return",
          "to": "method:12jssth:findtitleinnavigation__action_196_recursion_196__linear",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_recursion_196__linear__method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition",
          "from": "method:12jssth:findtitleinnavigation__action_196_recursion_196__linear",
          "to": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition__method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__true",
          "from": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition",
          "to": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition__method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__false",
          "from": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__condition",
          "to": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__true__method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "from": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__true",
          "to": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__false__method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "from": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__false",
          "to": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge__method:12jssth:findtitleinnavigation__action_198_findtitleinnavigation_repository_read_198_6__linear",
          "from": "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
          "to": "method:12jssth:findtitleinnavigation__action_198_findtitleinnavigation_repository_read_198_6__linear",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_198_findtitleinnavigation_repository_read_198_6__linear__call_method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation",
          "from": "method:12jssth:findtitleinnavigation__action_198_findtitleinnavigation_repository_read_198_6__linear",
          "to": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation",
          "kind": "call",
          "label": "item.NestedItems, filePath (recursive search)",
          "line": 198,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation__method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition",
          "from": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation",
          "to": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition",
          "kind": "next",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition__method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__true",
          "from": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition",
          "to": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition__method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__false",
          "from": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__condition",
          "to": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__true__method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "from": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__true",
          "to": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "kind": "next",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__false__method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "from": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__false",
          "to": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "kind": "next",
          "line": 199,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge__method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return",
          "from": "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge",
          "to": "method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return",
          "kind": "return",
          "line": 203,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return__method:12jssth:findtitleinnavigation__action_203_return_203__return",
          "from": "method:12jssth:findtitleinnavigation__action_203_findtitleinnavigation_return_203_8__return",
          "to": "method:12jssth:findtitleinnavigation__action_203_return_203__return",
          "kind": "return",
          "line": 203,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation__jump_NexusReader_Infrastructure_Services_EpubReaderService_cs_FindTitleInNavigation",
          "fromNodeId": "method:12jssth:findtitleinnavigation__call_198_FindTitleInNavigation",
          "kind": "call-target",
          "targetNodeId": "method:12jssth:findtitleinnavigation",
          "targetPath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "targetHint": "FindTitleInNavigation",
          "line": 198,
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Call target FindTitleInNavigation resolved to NexusReader.Infrastructure/Services/EpubReaderService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_body__method:12jssth:findtitleinnavigation__action_191_findtitleinnavigation_loop_191_2__loop_entry",
        "method:12jssth:findtitleinnavigation__action_191_loop_191__loop_body__method:12jssth:findtitleinnavigation__action_191_loop_191__loop_entry"
      ],
      "mergeNodeIds": [
        "method:12jssth:findtitleinnavigation__action_188_guard_clause_188__merge",
        "method:12jssth:findtitleinnavigation__action_188_findtitleinnavigation_guard_clause_188_1__merge",
        "method:12jssth:findtitleinnavigation__action_193_findtitleinnavigation_branch_193_3__merge",
        "method:12jssth:findtitleinnavigation__action_196_findtitleinnavigation_branch_196_5__merge",
        "method:12jssth:findtitleinnavigation__action_199_findtitleinnavigation_guard_clause_199_7__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 186,
        "end": 204
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "line": 186,
          "summary": "Control-flow fragment extracted for method FindTitleInNavigation.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4eprgx:knowledgeservice__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:4eprgx:knowledgeservice",
      "ownerSymbolName": "KnowledgeService",
      "entryNodeId": "method:4eprgx:knowledgeservice__entry",
      "exitNodeIds": [
        "method:4eprgx:knowledgeservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4eprgx:knowledgeservice__entry",
          "kind": "entry",
          "label": "KnowledgeService entry",
          "line": 38,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Constructor wiring dependencies, configuring retry pipeline and tokenizer"
        },
        {
          "id": "method:4eprgx:knowledgeservice__action_48_assignment_48__linear",
          "kind": "statement",
          "label": "store dependencies",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "assigns injected services to private fields"
        },
        {
          "id": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline",
          "kind": "call",
          "label": "ResiliencePipelineProvider.GetPipeline",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "\"ai-retry\" pipeline name"
        },
        {
          "id": "method:4eprgx:knowledgeservice__action_58_initialization_58__linear",
          "kind": "statement",
          "label": "init tokenizer",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "sets _tokenizer using TiktokenTokenizer.CreateForModel(\"gpt-4\")"
        },
        {
          "id": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel",
          "kind": "call",
          "label": "TiktokenTokenizer.CreateForModel",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "\"gpt-4\" model for token estimation"
        },
        {
          "id": "method:4eprgx:knowledgeservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4eprgx:knowledgeservice__entry__method:4eprgx:knowledgeservice__action_48_assignment_48__linear",
          "from": "method:4eprgx:knowledgeservice__entry",
          "to": "method:4eprgx:knowledgeservice__action_48_assignment_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4eprgx:knowledgeservice__action_48_assignment_48__linear__call_method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline",
          "from": "method:4eprgx:knowledgeservice__action_48_assignment_48__linear",
          "to": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline",
          "kind": "call",
          "label": "\"ai-retry\" pipeline name",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline__method:4eprgx:knowledgeservice__action_58_initialization_58__linear",
          "from": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline",
          "to": "method:4eprgx:knowledgeservice__action_58_initialization_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4eprgx:knowledgeservice__action_58_initialization_58__linear__call_method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel",
          "from": "method:4eprgx:knowledgeservice__action_58_initialization_58__linear",
          "to": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel",
          "kind": "call",
          "label": "\"gpt-4\" model for token estimation",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel__implicit_return",
          "from": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel",
          "to": "method:4eprgx:knowledgeservice__implicit_return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline__jump_unknown_ResiliencePipelineProvider_GetPipeline",
          "fromNodeId": "method:4eprgx:knowledgeservice__call_51_ResiliencePipelineProvider_GetPipeline",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ResiliencePipelineProvider.GetPipeline",
          "line": 51,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ResiliencePipelineProvider.GetPipeline in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_TiktokenTokenizer_CreateForModel",
          "fromNodeId": "method:4eprgx:knowledgeservice__call_58_TiktokenTokenizer_CreateForModel",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "TiktokenTokenizer.CreateForModel",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target TiktokenTokenizer.CreateForModel in NexusReader.Infrastructure/Services/KnowledgeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.75,
      "lineSpan": {
        "start": 38,
        "end": 59
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 38,
          "summary": "Control-flow fragment extracted for method KnowledgeService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lrpkzo:getknowledgeasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1lrpkzo:getknowledgeasync",
      "ownerSymbolName": "GetKnowledgeAsync",
      "entryNodeId": "method:1lrpkzo:getknowledgeasync__entry",
      "exitNodeIds": [
        "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return",
        "method:1lrpkzo:getknowledgeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lrpkzo:getknowledgeasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeAsync entry",
          "line": 61,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Public entry that requests full knowledge extraction using internal routine"
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_await_63_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.KnowledgeExtractionSystemPrompt, \"full\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.KnowledgeExtractionSystemPrompt, \"full\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_orchestration_63__linear",
          "kind": "statement",
          "label": "delegates to internal flow",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "simple wrapper calling GetKnowledgeInternalAsync"
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "GetKnowledgeInternalAsync",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "text, tenantId, PromptRegistry.KnowledgeExtractionSystemPrompt, traceType='full', ebookId"
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lrpkzo:getknowledgeasync__entry__method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_await_63_0__await",
          "from": "method:1lrpkzo:getknowledgeasync__entry",
          "to": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_await_63_0__await",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_await_63_0__await__method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return",
          "from": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_await_63_0__await",
          "to": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return__method:1lrpkzo:getknowledgeasync__action_63_orchestration_63__linear",
          "from": "method:1lrpkzo:getknowledgeasync__action_63_getknowledgeasync_return_63_1__return",
          "to": "method:1lrpkzo:getknowledgeasync__action_63_orchestration_63__linear",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__action_63_orchestration_63__linear__call_method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync",
          "from": "method:1lrpkzo:getknowledgeasync__action_63_orchestration_63__linear",
          "to": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "text, tenantId, PromptRegistry.KnowledgeExtractionSystemPrompt, traceType='full', ebookId",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync__implicit_return",
          "from": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync",
          "to": "method:1lrpkzo:getknowledgeasync__implicit_return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_GetKnowledgeInternalAsync",
          "fromNodeId": "method:1lrpkzo:getknowledgeasync__call_63_GetKnowledgeInternalAsync",
          "kind": "call-target",
          "targetNodeId": "method:965937:getknowledgeinternalasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "GetKnowledgeInternalAsync",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target GetKnowledgeInternalAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 61,
        "end": 64
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 61,
          "summary": "Control-flow fragment extracted for method GetKnowledgeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1fgpnj9:getgraphdataasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1fgpnj9:getgraphdataasync",
      "ownerSymbolName": "GetGraphDataAsync",
      "entryNodeId": "method:1fgpnj9:getgraphdataasync__entry",
      "exitNodeIds": [
        "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return",
        "method:1fgpnj9:getgraphdataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1fgpnj9:getgraphdataasync__entry",
          "kind": "entry",
          "label": "GetGraphDataAsync entry",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Public entry that requests graph-structured extraction"
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_await_68_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.GraphExtractionPrompt, \"graph\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.GraphExtractionPrompt, \"graph\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_orchestration_68__linear",
          "kind": "statement",
          "label": "delegates to internal flow",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "GetKnowledgeInternalAsync",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "text, tenantId, PromptRegistry.GraphExtractionPrompt, traceType='graph', ebookId"
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1fgpnj9:getgraphdataasync__entry__method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_await_68_0__await",
          "from": "method:1fgpnj9:getgraphdataasync__entry",
          "to": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_await_68_0__await",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_await_68_0__await__method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return",
          "from": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_await_68_0__await",
          "to": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return__method:1fgpnj9:getgraphdataasync__action_68_orchestration_68__linear",
          "from": "method:1fgpnj9:getgraphdataasync__action_68_getgraphdataasync_return_68_1__return",
          "to": "method:1fgpnj9:getgraphdataasync__action_68_orchestration_68__linear",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__action_68_orchestration_68__linear__call_method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync",
          "from": "method:1fgpnj9:getgraphdataasync__action_68_orchestration_68__linear",
          "to": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "text, tenantId, PromptRegistry.GraphExtractionPrompt, traceType='graph', ebookId",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync__implicit_return",
          "from": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync",
          "to": "method:1fgpnj9:getgraphdataasync__implicit_return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_GetKnowledgeInternalAsync",
          "fromNodeId": "method:1fgpnj9:getgraphdataasync__call_68_GetKnowledgeInternalAsync",
          "kind": "call-target",
          "targetNodeId": "method:965937:getknowledgeinternalasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "GetKnowledgeInternalAsync",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target GetKnowledgeInternalAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 66,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 66,
          "summary": "Control-flow fragment extracted for method GetGraphDataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1025f5z:getsummaryandquizasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1025f5z:getsummaryandquizasync",
      "ownerSymbolName": "GetSummaryAndQuizAsync",
      "entryNodeId": "method:1025f5z:getsummaryandquizasync__entry",
      "exitNodeIds": [
        "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return",
        "method:1025f5z:getsummaryandquizasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1025f5z:getsummaryandquizasync__entry",
          "kind": "entry",
          "label": "GetSummaryAndQuizAsync entry",
          "line": 71,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Public entry for summary + quiz extraction"
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_await_73_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.SummaryAndQuizPrompt, \"summary_quiz\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.SummaryAndQuizPrompt, \"summary_quiz\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_orchestration_73__linear",
          "kind": "statement",
          "label": "delegates to internal flow",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "GetKnowledgeInternalAsync",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "text, tenantId, PromptRegistry.SummaryAndQuizPrompt, traceType='summary_quiz', ebookId"
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1025f5z:getsummaryandquizasync__entry__method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_await_73_0__await",
          "from": "method:1025f5z:getsummaryandquizasync__entry",
          "to": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_await_73_0__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_await_73_0__await__method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return",
          "from": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_await_73_0__await",
          "to": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return",
          "kind": "return",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return__method:1025f5z:getsummaryandquizasync__action_73_orchestration_73__linear",
          "from": "method:1025f5z:getsummaryandquizasync__action_73_getsummaryandquizasync_return_73_1__return",
          "to": "method:1025f5z:getsummaryandquizasync__action_73_orchestration_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__action_73_orchestration_73__linear__call_method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync",
          "from": "method:1025f5z:getsummaryandquizasync__action_73_orchestration_73__linear",
          "to": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "text, tenantId, PromptRegistry.SummaryAndQuizPrompt, traceType='summary_quiz', ebookId",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync__implicit_return",
          "from": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync",
          "to": "method:1025f5z:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "line": 74,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_GetKnowledgeInternalAsync",
          "fromNodeId": "method:1025f5z:getsummaryandquizasync__call_73_GetKnowledgeInternalAsync",
          "kind": "call-target",
          "targetNodeId": "method:965937:getknowledgeinternalasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "GetKnowledgeInternalAsync",
          "line": 73,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target GetKnowledgeInternalAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 71,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 71,
          "summary": "Control-flow fragment extracted for method GetSummaryAndQuizAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1anyvp0:getknowledgemapasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1anyvp0:getknowledgemapasync",
      "ownerSymbolName": "GetKnowledgeMapAsync",
      "entryNodeId": "method:1anyvp0:getknowledgemapasync__entry",
      "exitNodeIds": [
        "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return",
        "method:1anyvp0:getknowledgemapasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1anyvp0:getknowledgemapasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeMapAsync entry",
          "line": 76,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Public entry for knowledge map extraction"
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_await_78_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.KM_ExtractionPrompt, \"km_map\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await GetKnowledgeInternalAsync(text, tenantId, PromptRegistry.KM_ExtractionPrompt, \"km_map\", ebookId, cancellationToken);"
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_orchestration_78__linear",
          "kind": "statement",
          "label": "delegates to internal flow",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "GetKnowledgeInternalAsync",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "text, tenantId, PromptRegistry.KM_ExtractionPrompt, traceType='km_map', ebookId"
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1anyvp0:getknowledgemapasync__entry__method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_await_78_0__await",
          "from": "method:1anyvp0:getknowledgemapasync__entry",
          "to": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_await_78_0__await",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_await_78_0__await__method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return",
          "from": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_await_78_0__await",
          "to": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return__method:1anyvp0:getknowledgemapasync__action_78_orchestration_78__linear",
          "from": "method:1anyvp0:getknowledgemapasync__action_78_getknowledgemapasync_return_78_1__return",
          "to": "method:1anyvp0:getknowledgemapasync__action_78_orchestration_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__action_78_orchestration_78__linear__call_method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync",
          "from": "method:1anyvp0:getknowledgemapasync__action_78_orchestration_78__linear",
          "to": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync",
          "kind": "call",
          "label": "text, tenantId, PromptRegistry.KM_ExtractionPrompt, traceType='km_map', ebookId",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync__implicit_return",
          "from": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync",
          "to": "method:1anyvp0:getknowledgemapasync__implicit_return",
          "kind": "return",
          "line": 79,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_GetKnowledgeInternalAsync",
          "fromNodeId": "method:1anyvp0:getknowledgemapasync__call_78_GetKnowledgeInternalAsync",
          "kind": "call-target",
          "targetNodeId": "method:965937:getknowledgeinternalasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "GetKnowledgeInternalAsync",
          "line": 78,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target GetKnowledgeInternalAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 76,
        "end": 79
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 76,
          "summary": "Control-flow fragment extracted for method GetKnowledgeMapAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:965937:getknowledgeinternalasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:965937:getknowledgeinternalasync",
      "ownerSymbolName": "GetKnowledgeInternalAsync",
      "entryNodeId": "method:965937:getknowledgeinternalasync__entry",
      "exitNodeIds": [
        "method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return",
        "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
        "method:965937:getknowledgeinternalasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:965937:getknowledgeinternalasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeInternalAsync entry",
          "line": 81,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Core flow: validate input, check cache, deduplicate concurrent requests, and invoke AI + caching if needed"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(text)",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail if input empty"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "kind": "statement",
          "label": "merge",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(text)) return Result.Fail(\"Input text is empty.\"",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(text)) return Result.Fail(\"Input text is empty.\");"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_85_getknowledgeinternalasync_await_85_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory.CreateDbContextAsync",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash",
          "kind": "call",
          "label": "ContentHasher.ComputeHash",
          "line": 87,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "normalizedText"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_90_getknowledgeinternalasync_await_90_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var cached = await dbContext.SemanticKnowledgeCache"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_90_persistence_read_90__linear",
          "kind": "statement",
          "label": "cache lookup",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "queries dbContext.SemanticKnowledgeCache for ContentHash & TenantId"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition",
          "kind": "condition",
          "label": "cached != null && cached.PromptVersion == PromptVersion",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (cached != null && cached.PromptVersion == PromptVersion)"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition",
          "kind": "condition",
          "label": "cache hit and valid prompt version",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "attempts to deserialize cached JSON and return cached packet; on JsonException logs and continues"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__true",
          "kind": "branch-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__false",
          "kind": "branch-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_95_getknowledgeinternalasync_log_95_4__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 95,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogDebug(\"[KnowledgeService] Cache Hit for {TraceType} ({Hash})\", traceType, hash);"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_96_getknowledgeinternalasync_try_96_5__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 96,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition",
          "kind": "condition",
          "label": "packet != null) return Result.Ok(packet",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "if (packet != null) return Result.Ok(packet);"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_101_getknowledgeinternalasync_catch_101_7__catch",
          "kind": "catch",
          "label": "catch JsonException ex",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (JsonException ex)"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_103_getknowledgeinternalasync_log_103_8__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 103,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(ex, \"[KnowledgeService] Cached JSON for {Hash} was invalid; regenerating.\", hash);"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_110_concurrency_dedup_110__linear",
          "kind": "statement",
          "label": "deduplicate concurrent identical requests",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "uses _activeRequests ConcurrentDictionary + Lazy<Task> keyed by tenant:hash:traceType"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync",
          "kind": "call",
          "label": "ExecuteAiRequestAndCacheAsync",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "normalizedText, tenantId, systemPrompt, traceType, ebookId, hash"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_116_try_catch_finally_116__linear",
          "kind": "statement",
          "label": "ensure activeRequests cleanup",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "catches exceptions, removes key, rethrows; finally removes key"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_116_getknowledgeinternalasync_try_116_9__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_118_getknowledgeinternalasync_await_118_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var result = await lazyTask.Value;"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_118_external_call_118__linear",
          "kind": "http-call",
          "label": "await AI/cache execution",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "awaits Lazy.Value which invokes ExecuteAiRequestAndCacheAsync"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition",
          "kind": "condition",
          "label": "remove failed active request so future attempts can retry",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "on result.IsFailed TryRemove(requestKey)"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__true",
          "kind": "branch-true",
          "label": "true",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__false",
          "kind": "branch-false",
          "label": "false",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "kind": "statement",
          "label": "merge",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition",
          "kind": "condition",
          "label": "result.IsFailed",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (result.IsFailed)"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__true",
          "kind": "branch-true",
          "label": "true",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__false",
          "kind": "branch-false",
          "label": "false",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return",
          "kind": "return",
          "label": "Returns result",
          "line": 127,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return result;"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_129_getknowledgeinternalasync_catch_129_13__catch",
          "kind": "catch",
          "label": "catch Exception",
          "line": 129,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception)"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "throw;"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_134_getknowledgeinternalasync_finally_134_15__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 138,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:965937:getknowledgeinternalasync__entry__method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition",
          "from": "method:965937:getknowledgeinternalasync__entry",
          "to": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition__method:965937:getknowledgeinternalasync__action_83_guard_clause_83__true",
          "from": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition",
          "to": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition__method:965937:getknowledgeinternalasync__action_83_guard_clause_83__false",
          "from": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__condition",
          "to": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__true__method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "from": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__true",
          "to": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__false__method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "from": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__false",
          "to": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge__method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition",
          "from": "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
          "to": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition__method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__true",
          "from": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition",
          "to": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition__method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__false",
          "from": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__condition",
          "to": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__true__method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "from": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__true",
          "to": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__false__method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "from": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__false",
          "to": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge__method:965937:getknowledgeinternalasync__action_85_getknowledgeinternalasync_await_85_1__await",
          "from": "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
          "to": "method:965937:getknowledgeinternalasync__action_85_getknowledgeinternalasync_await_85_1__await",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_85_getknowledgeinternalasync_await_85_1__await__call_method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync",
          "from": "method:965937:getknowledgeinternalasync__action_85_getknowledgeinternalasync_await_85_1__await",
          "to": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync__call_method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash",
          "from": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync",
          "to": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash",
          "kind": "call",
          "label": "normalizedText",
          "line": 87,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash__method:965937:getknowledgeinternalasync__action_90_getknowledgeinternalasync_await_90_2__await",
          "from": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash",
          "to": "method:965937:getknowledgeinternalasync__action_90_getknowledgeinternalasync_await_90_2__await",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_90_getknowledgeinternalasync_await_90_2__await__method:965937:getknowledgeinternalasync__action_90_persistence_read_90__linear",
          "from": "method:965937:getknowledgeinternalasync__action_90_getknowledgeinternalasync_await_90_2__await",
          "to": "method:965937:getknowledgeinternalasync__action_90_persistence_read_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_90_persistence_read_90__linear__method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition",
          "from": "method:965937:getknowledgeinternalasync__action_90_persistence_read_90__linear",
          "to": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition__method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__true",
          "from": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition",
          "to": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition__method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__false",
          "from": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__condition",
          "to": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__true__method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "from": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__true",
          "to": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__false__method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "from": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__false",
          "to": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge__method:965937:getknowledgeinternalasync__action_93_branch_93__condition",
          "from": "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
          "to": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition__method:965937:getknowledgeinternalasync__action_93_branch_93__true",
          "from": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition",
          "to": "method:965937:getknowledgeinternalasync__action_93_branch_93__true",
          "kind": "condition-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition__method:965937:getknowledgeinternalasync__action_93_branch_93__false",
          "from": "method:965937:getknowledgeinternalasync__action_93_branch_93__condition",
          "to": "method:965937:getknowledgeinternalasync__action_93_branch_93__false",
          "kind": "condition-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__true__method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "from": "method:965937:getknowledgeinternalasync__action_93_branch_93__true",
          "to": "method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__false__method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "from": "method:965937:getknowledgeinternalasync__action_93_branch_93__false",
          "to": "method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_93_branch_93__merge__method:965937:getknowledgeinternalasync__action_95_getknowledgeinternalasync_log_95_4__linear",
          "from": "method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
          "to": "method:965937:getknowledgeinternalasync__action_95_getknowledgeinternalasync_log_95_4__linear",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_95_getknowledgeinternalasync_log_95_4__linear__method:965937:getknowledgeinternalasync__action_96_getknowledgeinternalasync_try_96_5__try",
          "from": "method:965937:getknowledgeinternalasync__action_95_getknowledgeinternalasync_log_95_4__linear",
          "to": "method:965937:getknowledgeinternalasync__action_96_getknowledgeinternalasync_try_96_5__try",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_96_getknowledgeinternalasync_try_96_5__try__method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition",
          "from": "method:965937:getknowledgeinternalasync__action_96_getknowledgeinternalasync_try_96_5__try",
          "to": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition__method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__true",
          "from": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition",
          "to": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition__method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__false",
          "from": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__condition",
          "to": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__true__method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "from": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__true",
          "to": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__false__method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "from": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__false",
          "to": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge__method:965937:getknowledgeinternalasync__action_101_getknowledgeinternalasync_catch_101_7__catch",
          "from": "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
          "to": "method:965937:getknowledgeinternalasync__action_101_getknowledgeinternalasync_catch_101_7__catch",
          "kind": "exception",
          "line": 101,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_101_getknowledgeinternalasync_catch_101_7__catch__method:965937:getknowledgeinternalasync__action_103_getknowledgeinternalasync_log_103_8__linear",
          "from": "method:965937:getknowledgeinternalasync__action_101_getknowledgeinternalasync_catch_101_7__catch",
          "to": "method:965937:getknowledgeinternalasync__action_103_getknowledgeinternalasync_log_103_8__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_103_getknowledgeinternalasync_log_103_8__linear__method:965937:getknowledgeinternalasync__action_110_concurrency_dedup_110__linear",
          "from": "method:965937:getknowledgeinternalasync__action_103_getknowledgeinternalasync_log_103_8__linear",
          "to": "method:965937:getknowledgeinternalasync__action_110_concurrency_dedup_110__linear",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_110_concurrency_dedup_110__linear__call_method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync",
          "from": "method:965937:getknowledgeinternalasync__action_110_concurrency_dedup_110__linear",
          "to": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync",
          "kind": "call",
          "label": "normalizedText, tenantId, systemPrompt, traceType, ebookId, hash",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync__method:965937:getknowledgeinternalasync__action_116_try_catch_finally_116__linear",
          "from": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync",
          "to": "method:965937:getknowledgeinternalasync__action_116_try_catch_finally_116__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_116_try_catch_finally_116__linear__method:965937:getknowledgeinternalasync__action_116_getknowledgeinternalasync_try_116_9__try",
          "from": "method:965937:getknowledgeinternalasync__action_116_try_catch_finally_116__linear",
          "to": "method:965937:getknowledgeinternalasync__action_116_getknowledgeinternalasync_try_116_9__try",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_116_getknowledgeinternalasync_try_116_9__try__method:965937:getknowledgeinternalasync__action_118_getknowledgeinternalasync_await_118_10__await",
          "from": "method:965937:getknowledgeinternalasync__action_116_getknowledgeinternalasync_try_116_9__try",
          "to": "method:965937:getknowledgeinternalasync__action_118_getknowledgeinternalasync_await_118_10__await",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_118_getknowledgeinternalasync_await_118_10__await__method:965937:getknowledgeinternalasync__action_118_external_call_118__linear",
          "from": "method:965937:getknowledgeinternalasync__action_118_getknowledgeinternalasync_await_118_10__await",
          "to": "method:965937:getknowledgeinternalasync__action_118_external_call_118__linear",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_118_external_call_118__linear__method:965937:getknowledgeinternalasync__action_122_fallback_122__condition",
          "from": "method:965937:getknowledgeinternalasync__action_118_external_call_118__linear",
          "to": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition",
          "kind": "fallback",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition__method:965937:getknowledgeinternalasync__action_122_fallback_122__true",
          "from": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition",
          "to": "method:965937:getknowledgeinternalasync__action_122_fallback_122__true",
          "kind": "condition-true",
          "label": "true",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition__method:965937:getknowledgeinternalasync__action_122_fallback_122__false",
          "from": "method:965937:getknowledgeinternalasync__action_122_fallback_122__condition",
          "to": "method:965937:getknowledgeinternalasync__action_122_fallback_122__false",
          "kind": "condition-false",
          "label": "false",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__true__method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "from": "method:965937:getknowledgeinternalasync__action_122_fallback_122__true",
          "to": "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__false__method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "from": "method:965937:getknowledgeinternalasync__action_122_fallback_122__false",
          "to": "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge__method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition",
          "from": "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
          "to": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition__method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__true",
          "from": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition",
          "to": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__true",
          "kind": "condition-true",
          "label": "true",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition__method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__false",
          "from": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__condition",
          "to": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__false",
          "kind": "condition-false",
          "label": "false",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__true__method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "from": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__true",
          "to": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__false__method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "from": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__false",
          "to": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge__method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return",
          "from": "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge",
          "to": "method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return",
          "kind": "return",
          "line": 127,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return__method:965937:getknowledgeinternalasync__action_129_getknowledgeinternalasync_catch_129_13__catch",
          "from": "method:965937:getknowledgeinternalasync__action_127_getknowledgeinternalasync_return_127_12__return",
          "to": "method:965937:getknowledgeinternalasync__action_129_getknowledgeinternalasync_catch_129_13__catch",
          "kind": "exception",
          "line": 129,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_129_getknowledgeinternalasync_catch_129_13__catch__method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
          "from": "method:965937:getknowledgeinternalasync__action_129_getknowledgeinternalasync_catch_129_13__catch",
          "to": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
          "kind": "exception",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw__method:965937:getknowledgeinternalasync__action_134_getknowledgeinternalasync_finally_134_15__finally",
          "from": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
          "to": "method:965937:getknowledgeinternalasync__action_134_getknowledgeinternalasync_finally_134_15__finally",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:965937:getknowledgeinternalasync__action_134_getknowledgeinternalasync_finally_134_15__finally__implicit_return",
          "from": "method:965937:getknowledgeinternalasync__action_134_getknowledgeinternalasync_finally_134_15__finally",
          "to": "method:965937:getknowledgeinternalasync__implicit_return",
          "kind": "return",
          "line": 138,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync__jump_unknown_IDbContextFactory_CreateDbContextAsync",
          "fromNodeId": "method:965937:getknowledgeinternalasync__call_85_IDbContextFactory_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory.CreateDbContextAsync",
          "line": 85,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDbContextFactory.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash__jump_NexusReader_Infrastructure_Helpers_ContentHasher_cs_ContentHasher_ComputeHash",
          "fromNodeId": "method:965937:getknowledgeinternalasync__call_87_ContentHasher_ComputeHash",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "targetHint": "ContentHasher.ComputeHash",
          "line": 87,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ContentHasher.ComputeHash in NexusReader.Infrastructure/Helpers/ContentHasher.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_ExecuteAiRequestAndCacheAsync",
          "fromNodeId": "method:965937:getknowledgeinternalasync__call_112_ExecuteAiRequestAndCacheAsync",
          "kind": "call-target",
          "targetNodeId": "method:1egheyd:executeairequestandcacheasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "ExecuteAiRequestAndCacheAsync",
          "line": 112,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ExecuteAiRequestAndCacheAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [
        {
          "id": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw__exception_escape",
          "fromNodeId": "method:965937:getknowledgeinternalasync__action_132_getknowledgeinternalasync_throw_132_14__throw",
          "kind": "exception-target",
          "line": 132,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:965937:getknowledgeinternalasync__action_83_guard_clause_83__merge",
        "method:965937:getknowledgeinternalasync__action_83_getknowledgeinternalasync_guard_clause_83_0__merge",
        "method:965937:getknowledgeinternalasync__action_93_getknowledgeinternalasync_branch_93_3__merge",
        "method:965937:getknowledgeinternalasync__action_93_branch_93__merge",
        "method:965937:getknowledgeinternalasync__action_99_getknowledgeinternalasync_guard_clause_99_6__merge",
        "method:965937:getknowledgeinternalasync__action_122_fallback_122__merge",
        "method:965937:getknowledgeinternalasync__action_122_getknowledgeinternalasync_branch_122_11__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 81,
        "end": 138
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 81,
          "summary": "Control-flow fragment extracted for method GetKnowledgeInternalAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1egheyd:executeairequestandcacheasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1egheyd:executeairequestandcacheasync",
      "ownerSymbolName": "ExecuteAiRequestAndCacheAsync",
      "entryNodeId": "method:1egheyd:executeairequestandcacheasync__entry",
      "exitNodeIds": [
        "method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return",
        "method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return",
        "method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return",
        "method:1egheyd:executeairequestandcacheasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1egheyd:executeairequestandcacheasync__entry",
          "kind": "entry",
          "label": "ExecuteAiRequestAndCacheAsync entry",
          "line": 140,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Invokes AI via chat client with retries, repairs/deserializes JSON, caches the response in DB and processes KnowledgeUnits"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_148_executeairequestandcacheasync_log_148_0__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 148,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogInformation(\"[KnowledgeService] Cache Miss for {TraceType} ({Hash}). Requesting AI...\", traceType, hash);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_148_log_148__linear",
          "kind": "statement",
          "label": "Logs cache miss",
          "line": 148,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "_logger.LogInformation indicating cache miss"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_149_executeairequestandcacheasync_try_149_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 149,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_151_executeairequestandcacheasync_await_151_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory.CreateDbContextAsync",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "no params"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_executeairequestandcacheasync_await_159_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "kind": "loop-entry",
          "label": "AI request executed via resilience pipeline",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "uses _retryPipeline.ExecuteAsync to call _chatClient.GetResponseAsync"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body",
          "kind": "loop-body",
          "label": "uses _retryPipeline.ExecuteAsync to call _chatClient.GetResponseAsync",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "ResiliencePipeline.ExecuteAsync",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "invokes _chatClient.GetResponseAsync with system+user messages and ChatOptions"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_160_executeairequestandcacheasync_await_160_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 160,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _chatClient.GetResponseAsync(new List<ChatMessage>"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync",
          "kind": "call",
          "label": "IChatClient.GetResponseAsync",
          "line": 160,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "systemPrompt and normalizedText messages, ChatOptions"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(rawResponse)",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "kind": "statement",
          "label": "merge",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(rawResponse)) return Result.Fail(\"AI returned an empty response.\"",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(rawResponse)) return Result.Fail(\"AI returned an empty response.\");"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_169_text_cleanup_169__linear",
          "kind": "statement",
          "label": "strip markdown and repair JSON",
          "line": 169,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "removes ```json blocks and calls JsonRepairHelper.Repair"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair",
          "kind": "call",
          "label": "JsonRepairHelper.Repair",
          "line": 171,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "jsonResponse string"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_173_executeairequestandcacheasync_try_173_6__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 173,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_175_json_deserialize_175__linear",
          "kind": "statement",
          "label": "parse KnowledgePacket",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "JsonSerializer.Deserialize; return fail on null or JsonException"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket_",
          "kind": "call",
          "label": "JsonSerializer.Deserialize<KnowledgePacket>",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "jsonResponse"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition",
          "kind": "condition",
          "label": "knowledgePacket == null) return Result.Fail(\"Failed to deserialize AI response.\"",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "if (knowledgePacket == null) return Result.Fail(\"Failed to deserialize AI response.\");"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_179_executeairequestandcacheasync_await_179_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 179,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var cached = await dbContext.SemanticKnowledgeCache"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_179_persistence_read_write_179__linear",
          "kind": "statement",
          "label": "create or update SemanticKnowledgeCache",
          "line": 179,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "queries for existing cache entry, prepares cacheEntry, adds or updates fields"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_repository_write_193_10__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition",
          "kind": "condition",
          "label": "cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (cached == null) dbContext.SemanticKnowledgeCache.Add(cacheEntry);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_202_executeairequestandcacheasync_await_202_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await ProcessKnowledgeUnitsAsync(knowledgePacket, tenantId, ebookId, dbContext, default);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_202_orchestration_202__linear",
          "kind": "statement",
          "label": "process structured units",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls ProcessKnowledgeUnitsAsync to upsert units/links"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync",
          "kind": "call",
          "label": "ProcessKnowledgeUnitsAsync",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "knowledgePacket, tenantId, ebookId, dbContext, default(CancellationToken)"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_204_executeairequestandcacheasync_await_204_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 204,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SaveChangesAsync();"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_204_persistence_write_204__linear",
          "kind": "statement",
          "label": "save changes",
          "line": 204,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "await dbContext.SaveChangesAsync()"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return",
          "kind": "return",
          "label": "Returns result",
          "line": 205,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(knowledgePacket);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_207_executeairequestandcacheasync_catch_207_15__catch",
          "kind": "catch",
          "label": "catch JsonException ex",
          "line": 207,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (JsonException ex)"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_209_executeairequestandcacheasync_log_209_16__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 209,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"[KnowledgeService] JSON deserialization error. Raw response length: {Length}\", rawResponse.Length);"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return",
          "kind": "return",
          "label": "Returns result",
          "line": 210,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Failed to deserialize AI response: {ex.Message}\");"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_213_error_handling_213__linear",
          "kind": "statement",
          "label": "wrap exceptions",
          "line": 213,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail with caused exception"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_213_executeairequestandcacheasync_catch_213_18__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 213,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 215,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to extract knowledge from AI\").CausedBy(ex));"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_217_executeairequestandcacheasync_finally_217_20__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 217,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_219_cleanup_219__linear",
          "kind": "statement",
          "label": "remove active request entry",
          "line": 219,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "finally block calls _activeRequests.TryRemove"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 221,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1egheyd:executeairequestandcacheasync__entry__method:1egheyd:executeairequestandcacheasync__action_148_executeairequestandcacheasync_log_148_0__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__entry",
          "to": "method:1egheyd:executeairequestandcacheasync__action_148_executeairequestandcacheasync_log_148_0__linear",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_148_executeairequestandcacheasync_log_148_0__linear__method:1egheyd:executeairequestandcacheasync__action_148_log_148__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_148_executeairequestandcacheasync_log_148_0__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_148_log_148__linear",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_148_log_148__linear__method:1egheyd:executeairequestandcacheasync__action_149_executeairequestandcacheasync_try_149_1__try",
          "from": "method:1egheyd:executeairequestandcacheasync__action_148_log_148__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_149_executeairequestandcacheasync_try_149_1__try",
          "kind": "next",
          "line": 149,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_149_executeairequestandcacheasync_try_149_1__try__method:1egheyd:executeairequestandcacheasync__action_151_executeairequestandcacheasync_await_151_2__await",
          "from": "method:1egheyd:executeairequestandcacheasync__action_149_executeairequestandcacheasync_try_149_1__try",
          "to": "method:1egheyd:executeairequestandcacheasync__action_151_executeairequestandcacheasync_await_151_2__await",
          "kind": "next",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_151_executeairequestandcacheasync_await_151_2__await__call_method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync",
          "from": "method:1egheyd:executeairequestandcacheasync__action_151_executeairequestandcacheasync_await_151_2__await",
          "to": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "no params",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync__method:1egheyd:executeairequestandcacheasync__action_159_executeairequestandcacheasync_await_159_3__await",
          "from": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync",
          "to": "method:1egheyd:executeairequestandcacheasync__action_159_executeairequestandcacheasync_await_159_3__await",
          "kind": "next",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_executeairequestandcacheasync_await_159_3__await__method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "from": "method:1egheyd:executeairequestandcacheasync__action_159_executeairequestandcacheasync_await_159_3__await",
          "to": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "kind": "next",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry__method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body",
          "from": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "to": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body__method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "from": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body",
          "to": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry__method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_exit",
          "from": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry",
          "to": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_exit__call_method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync",
          "from": "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_exit",
          "to": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "invokes _chatClient.GetResponseAsync with system+user messages and ChatOptions",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync__method:1egheyd:executeairequestandcacheasync__action_160_executeairequestandcacheasync_await_160_4__await",
          "from": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync",
          "to": "method:1egheyd:executeairequestandcacheasync__action_160_executeairequestandcacheasync_await_160_4__await",
          "kind": "next",
          "line": 160,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_160_executeairequestandcacheasync_await_160_4__await__call_method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync",
          "from": "method:1egheyd:executeairequestandcacheasync__action_160_executeairequestandcacheasync_await_160_4__await",
          "to": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync",
          "kind": "call",
          "label": "systemPrompt and normalizedText messages, ChatOptions",
          "line": 160,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync__method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition",
          "from": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync",
          "to": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition__method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__true",
          "from": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition__method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__false",
          "from": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__true__method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__true",
          "to": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__false__method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__false",
          "to": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge__method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition",
          "from": "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
          "to": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition__method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__true",
          "from": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition__method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__false",
          "from": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__true__method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__true",
          "to": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__false__method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__false",
          "to": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge__method:1egheyd:executeairequestandcacheasync__action_169_text_cleanup_169__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
          "to": "method:1egheyd:executeairequestandcacheasync__action_169_text_cleanup_169__linear",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_169_text_cleanup_169__linear__call_method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair",
          "from": "method:1egheyd:executeairequestandcacheasync__action_169_text_cleanup_169__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair",
          "kind": "call",
          "label": "jsonResponse string",
          "line": 171,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair__method:1egheyd:executeairequestandcacheasync__action_173_executeairequestandcacheasync_try_173_6__try",
          "from": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair",
          "to": "method:1egheyd:executeairequestandcacheasync__action_173_executeairequestandcacheasync_try_173_6__try",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_173_executeairequestandcacheasync_try_173_6__try__method:1egheyd:executeairequestandcacheasync__action_175_json_deserialize_175__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_173_executeairequestandcacheasync_try_173_6__try",
          "to": "method:1egheyd:executeairequestandcacheasync__action_175_json_deserialize_175__linear",
          "kind": "next",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_175_json_deserialize_175__linear__call_method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket_",
          "from": "method:1egheyd:executeairequestandcacheasync__action_175_json_deserialize_175__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket_",
          "kind": "call",
          "label": "jsonResponse",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket___method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition",
          "from": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket_",
          "to": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition__method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__true",
          "from": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition__method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__false",
          "from": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__true__method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__true",
          "to": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__false__method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__false",
          "to": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge__method:1egheyd:executeairequestandcacheasync__action_179_executeairequestandcacheasync_await_179_8__await",
          "from": "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
          "to": "method:1egheyd:executeairequestandcacheasync__action_179_executeairequestandcacheasync_await_179_8__await",
          "kind": "next",
          "line": 179,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_179_executeairequestandcacheasync_await_179_8__await__method:1egheyd:executeairequestandcacheasync__action_179_persistence_read_write_179__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_179_executeairequestandcacheasync_await_179_8__await",
          "to": "method:1egheyd:executeairequestandcacheasync__action_179_persistence_read_write_179__linear",
          "kind": "next",
          "line": 179,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_179_persistence_read_write_179__linear__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_repository_write_193_10__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_179_persistence_read_write_179__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_repository_write_193_10__linear",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_repository_write_193_10__linear__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_repository_write_193_10__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__true",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__false",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__true__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__true",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__false__method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__false",
          "to": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge__method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition",
          "from": "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
          "to": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition",
          "kind": "fallback",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition__method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__true",
          "from": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition__method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__false",
          "from": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__condition",
          "to": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__true__method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__true",
          "to": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "kind": "next",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__false__method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "from": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__false",
          "to": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "kind": "next",
          "line": 194,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge__method:1egheyd:executeairequestandcacheasync__action_202_executeairequestandcacheasync_await_202_12__await",
          "from": "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge",
          "to": "method:1egheyd:executeairequestandcacheasync__action_202_executeairequestandcacheasync_await_202_12__await",
          "kind": "next",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_202_executeairequestandcacheasync_await_202_12__await__method:1egheyd:executeairequestandcacheasync__action_202_orchestration_202__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_202_executeairequestandcacheasync_await_202_12__await",
          "to": "method:1egheyd:executeairequestandcacheasync__action_202_orchestration_202__linear",
          "kind": "next",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_202_orchestration_202__linear__call_method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync",
          "from": "method:1egheyd:executeairequestandcacheasync__action_202_orchestration_202__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync",
          "kind": "call",
          "label": "knowledgePacket, tenantId, ebookId, dbContext, default(CancellationToken)",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync__method:1egheyd:executeairequestandcacheasync__action_204_executeairequestandcacheasync_await_204_13__await",
          "from": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync",
          "to": "method:1egheyd:executeairequestandcacheasync__action_204_executeairequestandcacheasync_await_204_13__await",
          "kind": "next",
          "line": 204,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_204_executeairequestandcacheasync_await_204_13__await__method:1egheyd:executeairequestandcacheasync__action_204_persistence_write_204__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_204_executeairequestandcacheasync_await_204_13__await",
          "to": "method:1egheyd:executeairequestandcacheasync__action_204_persistence_write_204__linear",
          "kind": "next",
          "line": 204,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_204_persistence_write_204__linear__method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return",
          "from": "method:1egheyd:executeairequestandcacheasync__action_204_persistence_write_204__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return",
          "kind": "return",
          "line": 205,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return__method:1egheyd:executeairequestandcacheasync__action_207_executeairequestandcacheasync_catch_207_15__catch",
          "from": "method:1egheyd:executeairequestandcacheasync__action_205_executeairequestandcacheasync_return_205_14__return",
          "to": "method:1egheyd:executeairequestandcacheasync__action_207_executeairequestandcacheasync_catch_207_15__catch",
          "kind": "exception",
          "line": 207,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_207_executeairequestandcacheasync_catch_207_15__catch__method:1egheyd:executeairequestandcacheasync__action_209_executeairequestandcacheasync_log_209_16__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_207_executeairequestandcacheasync_catch_207_15__catch",
          "to": "method:1egheyd:executeairequestandcacheasync__action_209_executeairequestandcacheasync_log_209_16__linear",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_209_executeairequestandcacheasync_log_209_16__linear__method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return",
          "from": "method:1egheyd:executeairequestandcacheasync__action_209_executeairequestandcacheasync_log_209_16__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return",
          "kind": "return",
          "line": 210,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return__method:1egheyd:executeairequestandcacheasync__action_213_error_handling_213__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_210_executeairequestandcacheasync_return_210_17__return",
          "to": "method:1egheyd:executeairequestandcacheasync__action_213_error_handling_213__linear",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_213_error_handling_213__linear__method:1egheyd:executeairequestandcacheasync__action_213_executeairequestandcacheasync_catch_213_18__catch",
          "from": "method:1egheyd:executeairequestandcacheasync__action_213_error_handling_213__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__action_213_executeairequestandcacheasync_catch_213_18__catch",
          "kind": "exception",
          "line": 213,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_213_executeairequestandcacheasync_catch_213_18__catch__method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return",
          "from": "method:1egheyd:executeairequestandcacheasync__action_213_executeairequestandcacheasync_catch_213_18__catch",
          "to": "method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return",
          "kind": "return",
          "line": 215,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return__method:1egheyd:executeairequestandcacheasync__action_217_executeairequestandcacheasync_finally_217_20__finally",
          "from": "method:1egheyd:executeairequestandcacheasync__action_215_executeairequestandcacheasync_return_215_19__return",
          "to": "method:1egheyd:executeairequestandcacheasync__action_217_executeairequestandcacheasync_finally_217_20__finally",
          "kind": "next",
          "line": 217,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_217_executeairequestandcacheasync_finally_217_20__finally__method:1egheyd:executeairequestandcacheasync__action_219_cleanup_219__linear",
          "from": "method:1egheyd:executeairequestandcacheasync__action_217_executeairequestandcacheasync_finally_217_20__finally",
          "to": "method:1egheyd:executeairequestandcacheasync__action_219_cleanup_219__linear",
          "kind": "next",
          "line": 219,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__action_219_cleanup_219__linear__implicit_return",
          "from": "method:1egheyd:executeairequestandcacheasync__action_219_cleanup_219__linear",
          "to": "method:1egheyd:executeairequestandcacheasync__implicit_return",
          "kind": "return",
          "line": 221,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync__jump_unknown_IDbContextFactory_CreateDbContextAsync",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_151_IDbContextFactory_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory.CreateDbContextAsync",
          "line": 151,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDbContextFactory.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync__jump_unknown_ResiliencePipeline_ExecuteAsync",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_159_ResiliencePipeline_ExecuteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ResiliencePipeline.ExecuteAsync",
          "line": 159,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ResiliencePipeline.ExecuteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync__jump_unknown_IChatClient_GetResponseAsync",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_160_IChatClient_GetResponseAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IChatClient.GetResponseAsync",
          "line": 160,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IChatClient.GetResponseAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair__jump_NexusReader_Infrastructure_Helpers_JsonRepairHelper_cs_JsonRepairHelper_Repair",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_171_JsonRepairHelper_Repair",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "targetHint": "JsonRepairHelper.Repair",
          "line": 171,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonRepairHelper.Repair in NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket___jump_unknown_JsonSerializer_Deserialize_KnowledgePacket_",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_175_JsonSerializer_Deserialize_KnowledgePacket_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "JsonSerializer.Deserialize<KnowledgePacket>",
          "line": 175,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonSerializer.Deserialize<KnowledgePacket> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_ProcessKnowledgeUnitsAsync",
          "fromNodeId": "method:1egheyd:executeairequestandcacheasync__call_202_ProcessKnowledgeUnitsAsync",
          "kind": "call-target",
          "targetNodeId": "method:yif4p8:processknowledgeunitsasync",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "ProcessKnowledgeUnitsAsync",
          "line": 202,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ProcessKnowledgeUnitsAsync resolved to NexusReader.Infrastructure/Services/KnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_body__method:1egheyd:executeairequestandcacheasync__action_159_retry_159__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1egheyd:executeairequestandcacheasync__action_166_guard_clause_166__merge",
        "method:1egheyd:executeairequestandcacheasync__action_167_executeairequestandcacheasync_guard_clause_167_5__merge",
        "method:1egheyd:executeairequestandcacheasync__action_176_executeairequestandcacheasync_guard_clause_176_7__merge",
        "method:1egheyd:executeairequestandcacheasync__action_193_executeairequestandcacheasync_branch_193_9__merge",
        "method:1egheyd:executeairequestandcacheasync__action_194_executeairequestandcacheasync_fallback_194_11__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 140,
        "end": 221
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 140,
          "summary": "Control-flow fragment extracted for method ExecuteAiRequestAndCacheAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:yif4p8:processknowledgeunitsasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:yif4p8:processknowledgeunitsasync",
      "ownerSymbolName": "ProcessKnowledgeUnitsAsync",
      "entryNodeId": "method:yif4p8:processknowledgeunitsasync__entry",
      "exitNodeIds": [
        "method:yif4p8:processknowledgeunitsasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:yif4p8:processknowledgeunitsasync__entry",
          "kind": "entry",
          "label": "ProcessKnowledgeUnitsAsync entry",
          "line": 225,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Upserts KnowledgeUnit entities and KnowledgeUnitLink entities from parsed KnowledgePacket into the relational DB"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_227_processknowledgeunitsasync_mapping_227_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 227,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var unitIds = packet.Units.Select(u => u.Id).ToList();"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_227_mapping_227__linear",
          "kind": "statement",
          "label": "collect ids",
          "line": 227,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "collect unit ids and link endpoints from packet"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_228_processknowledgeunitsasync_mapping_228_1__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 228,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var linkSourceIds = packet.Links.Select(l => l.Source).ToList();"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_229_processknowledgeunitsasync_mapping_229_2__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 229,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var linkTargetIds = packet.Links.Select(l => l.Target).ToList();"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_234_processknowledgeunitsasync_await_234_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var existingUnits = await dbContext.KnowledgeUnits"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_234_persistence_read_234__linear",
          "kind": "statement",
          "label": "fetch existing units in batch",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "single query to find existing KnowledgeUnits by candidate ids"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits",
          "kind": "call",
          "label": "AppDbContext.KnowledgeUnits",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "query for existing units by Ids"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_235_processknowledgeunitsasync_repository_read_235_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 235,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": ".Where(u => allCandidateIds.Contains(u.Id))"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "kind": "loop-entry",
          "label": "upsert each KnowledgeUnit",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "for each unitDto create new KnowledgeUnit or update fields, set EbookId and MetadataJson"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body",
          "kind": "loop-body",
          "label": "for each unitDto create new KnowledgeUnit or update fields, set EbookId and MetadataJson",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "kind": "loop-entry",
          "label": "var unitDto in packet.Units",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var unitDto in packet.Units)"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body",
          "kind": "loop-body",
          "label": "foreach (var unitDto in packet.Units)",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition",
          "kind": "condition",
          "label": "unit == null",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (unit == null)"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_248_processknowledgeunitsasync_repository_write_248_7__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 248,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "dbContext.KnowledgeUnits.Add(unit);"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_252_enum_parse_252__linear",
          "kind": "statement",
          "label": "parse unit type",
          "line": 252,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Enum.TryParse with fallback to Snippet"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "kind": "loop-entry",
          "label": "var linkDto in packet.Links",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var linkDto in packet.Links)"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body",
          "kind": "loop-body",
          "label": "foreach (var linkDto in packet.Links)",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "kind": "loop-entry",
          "label": "create links",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "for each link, if both endpoints exist add KnowledgeUnitLink, else log warning"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body",
          "kind": "loop-body",
          "label": "for each link, if both endpoints exist add KnowledgeUnitLink, else log warning",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition",
          "kind": "condition",
          "label": "sourceExists && targetExists",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (sourceExists && targetExists)"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_281_processknowledgeunitsasync_repository_write_281_10__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 281,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "dbContext.KnowledgeUnitLinks.Add(link);"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_285_log_285__linear",
          "kind": "statement",
          "label": "logs skipped invalid link",
          "line": 285,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "_logger.LogWarning when source or target missing"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_285_processknowledgeunitsasync_log_285_12__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 285,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(\"[KnowledgeService] Skipping invalid link {Source} -> {Target}: one or both units are missing.\", linkDto.Source, linkDto.Target);"
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 288,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:yif4p8:processknowledgeunitsasync__entry__method:yif4p8:processknowledgeunitsasync__action_227_processknowledgeunitsasync_mapping_227_0__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_227_processknowledgeunitsasync_mapping_227_0__linear",
          "kind": "next",
          "line": 227,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_227_processknowledgeunitsasync_mapping_227_0__linear__method:yif4p8:processknowledgeunitsasync__action_227_mapping_227__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_227_processknowledgeunitsasync_mapping_227_0__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_227_mapping_227__linear",
          "kind": "next",
          "line": 227,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_227_mapping_227__linear__method:yif4p8:processknowledgeunitsasync__action_228_processknowledgeunitsasync_mapping_228_1__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_227_mapping_227__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_228_processknowledgeunitsasync_mapping_228_1__linear",
          "kind": "next",
          "line": 228,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_228_processknowledgeunitsasync_mapping_228_1__linear__method:yif4p8:processknowledgeunitsasync__action_229_processknowledgeunitsasync_mapping_229_2__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_228_processknowledgeunitsasync_mapping_228_1__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_229_processknowledgeunitsasync_mapping_229_2__linear",
          "kind": "next",
          "line": 229,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_229_processknowledgeunitsasync_mapping_229_2__linear__method:yif4p8:processknowledgeunitsasync__action_234_processknowledgeunitsasync_await_234_3__await",
          "from": "method:yif4p8:processknowledgeunitsasync__action_229_processknowledgeunitsasync_mapping_229_2__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_234_processknowledgeunitsasync_await_234_3__await",
          "kind": "next",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_234_processknowledgeunitsasync_await_234_3__await__method:yif4p8:processknowledgeunitsasync__action_234_persistence_read_234__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_234_processknowledgeunitsasync_await_234_3__await",
          "to": "method:yif4p8:processknowledgeunitsasync__action_234_persistence_read_234__linear",
          "kind": "next",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_234_persistence_read_234__linear__call_method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits",
          "from": "method:yif4p8:processknowledgeunitsasync__action_234_persistence_read_234__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits",
          "kind": "call",
          "label": "query for existing units by Ids",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits__method:yif4p8:processknowledgeunitsasync__action_235_processknowledgeunitsasync_repository_read_235_4__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits",
          "to": "method:yif4p8:processknowledgeunitsasync__action_235_processknowledgeunitsasync_repository_read_235_4__linear",
          "kind": "next",
          "line": 235,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_235_processknowledgeunitsasync_repository_read_235_4__linear__method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_235_processknowledgeunitsasync_repository_read_235_4__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "kind": "next",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry__method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body__method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry__method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_exit",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_exit__method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_exit",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "kind": "next",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry__method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body",
          "kind": "loop-body",
          "label": "var unitDto in packet.Units",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body__method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry__method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_exit",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 240,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_exit__method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition",
          "from": "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_exit",
          "to": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition",
          "kind": "next",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition__method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__true",
          "from": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition__method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__false",
          "from": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__true__method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__true",
          "to": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "kind": "next",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__false__method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__false",
          "to": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "kind": "next",
          "line": 245,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge__method:yif4p8:processknowledgeunitsasync__action_248_processknowledgeunitsasync_repository_write_248_7__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
          "to": "method:yif4p8:processknowledgeunitsasync__action_248_processknowledgeunitsasync_repository_write_248_7__linear",
          "kind": "next",
          "line": 248,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_248_processknowledgeunitsasync_repository_write_248_7__linear__method:yif4p8:processknowledgeunitsasync__action_252_enum_parse_252__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_248_processknowledgeunitsasync_repository_write_248_7__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_252_enum_parse_252__linear",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_252_enum_parse_252__linear__method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_252_enum_parse_252__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "kind": "next",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry__method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body",
          "kind": "loop-body",
          "label": "var linkDto in packet.Links",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body__method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry__method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_exit",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_exit__method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_exit",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "kind": "next",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry__method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body__method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry__method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_exit",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry",
          "to": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 266,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_exit__method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition",
          "from": "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_exit",
          "to": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition",
          "kind": "next",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition__method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__true",
          "from": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition__method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__false",
          "from": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__true__method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__true",
          "to": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "kind": "next",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__false__method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__false",
          "to": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "kind": "next",
          "line": 271,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge__method:yif4p8:processknowledgeunitsasync__action_281_processknowledgeunitsasync_repository_write_281_10__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
          "to": "method:yif4p8:processknowledgeunitsasync__action_281_processknowledgeunitsasync_repository_write_281_10__linear",
          "kind": "next",
          "line": 281,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_281_processknowledgeunitsasync_repository_write_281_10__linear__method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition",
          "from": "method:yif4p8:processknowledgeunitsasync__action_281_processknowledgeunitsasync_repository_write_281_10__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition",
          "kind": "fallback",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition__method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__true",
          "from": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition__method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__false",
          "from": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__condition",
          "to": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__true__method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__true",
          "to": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__false__method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "from": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__false",
          "to": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge__method:yif4p8:processknowledgeunitsasync__action_285_log_285__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge",
          "to": "method:yif4p8:processknowledgeunitsasync__action_285_log_285__linear",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_285_log_285__linear__method:yif4p8:processknowledgeunitsasync__action_285_processknowledgeunitsasync_log_285_12__linear",
          "from": "method:yif4p8:processknowledgeunitsasync__action_285_log_285__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__action_285_processknowledgeunitsasync_log_285_12__linear",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:yif4p8:processknowledgeunitsasync__action_285_processknowledgeunitsasync_log_285_12__linear__implicit_return",
          "from": "method:yif4p8:processknowledgeunitsasync__action_285_processknowledgeunitsasync_log_285_12__linear",
          "to": "method:yif4p8:processknowledgeunitsasync__implicit_return",
          "kind": "return",
          "line": 288,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits__jump_unknown_AppDbContext_KnowledgeUnits",
          "fromNodeId": "method:yif4p8:processknowledgeunitsasync__call_234_AppDbContext_KnowledgeUnits",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AppDbContext.KnowledgeUnits",
          "line": 234,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target AppDbContext.KnowledgeUnits in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_body__method:yif4p8:processknowledgeunitsasync__action_240_loop_240__loop_entry",
        "method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_body__method:yif4p8:processknowledgeunitsasync__action_240_processknowledgeunitsasync_loop_240_5__loop_entry",
        "method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_body__method:yif4p8:processknowledgeunitsasync__action_266_processknowledgeunitsasync_loop_266_8__loop_entry",
        "method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_body__method:yif4p8:processknowledgeunitsasync__action_266_loop_266__loop_entry"
      ],
      "mergeNodeIds": [
        "method:yif4p8:processknowledgeunitsasync__action_245_processknowledgeunitsasync_branch_245_6__merge",
        "method:yif4p8:processknowledgeunitsasync__action_271_processknowledgeunitsasync_branch_271_9__merge",
        "method:yif4p8:processknowledgeunitsasync__action_283_processknowledgeunitsasync_fallback_283_11__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 225,
        "end": 288
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 225,
          "summary": "Control-flow fragment extracted for method ProcessKnowledgeUnitsAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6gn0zk:verifygroundednessasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:6gn0zk:verifygroundednessasync",
      "ownerSymbolName": "VerifyGroundednessAsync",
      "entryNodeId": "method:6gn0zk:verifygroundednessasync__entry",
      "exitNodeIds": [
        "method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return",
        "method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return",
        "method:6gn0zk:verifygroundednessasync__action_324_verifygroundednessasync_return_324_6__return"
      ],
      "nodes": [
        {
          "id": "method:6gn0zk:verifygroundednessasync__entry",
          "kind": "entry",
          "label": "VerifyGroundednessAsync entry",
          "line": 290,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Asks AI to score whether an answer is grounded in given context and returns structured groundedness result"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_292_prompt_build_292__linear",
          "kind": "statement",
          "label": "compose system and user prompts for fact-checking",
          "line": 292,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "systemPrompt describes expected JSON output; userPrompt contains context and answer"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 295,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Return ONLY a JSON object: { \"\"score\"\": 0.9, \"\"rationale\"\": \"\"string\"\", \"\"isGrounded\"\": true }"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_300_verifygroundednessasync_try_300_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 300,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_verifygroundednessasync_await_308_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "kind": "loop-entry",
          "label": "invoke chat client via retry pipeline",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "uses _retryPipeline.ExecuteAsync"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body",
          "kind": "loop-body",
          "label": "uses _retryPipeline.ExecuteAsync",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "ResiliencePipeline.ExecuteAsync",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "calls _chatClient.GetResponseAsync with system and user prompts"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_309_verifygroundednessasync_await_309_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 309,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _chatClient.GetResponseAsync(new List<ChatMessage>"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync",
          "kind": "call",
          "label": "IChatClient.GetResponseAsync",
          "line": 309,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "systemPrompt and userPrompt, ChatOptions"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_316_text_cleanup_316__linear",
          "kind": "statement",
          "label": "strip markdown",
          "line": 316,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "removes ```json fences"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_318_json_deserialize_318__linear",
          "kind": "statement",
          "label": "parse groundedness result",
          "line": 318,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "JsonSerializer.Deserialize to GroundednessResult and return Ok/Fail accordingly"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult_",
          "kind": "call",
          "label": "JsonSerializer.Deserialize<GroundednessResult>",
          "line": 318,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "rawJson"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 320,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return result != null ? Result.Ok(result) : Result.Fail(\"Failed to parse groundedness result\");"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_322_error_handling_322__linear",
          "kind": "statement",
          "label": "return failure on exception",
          "line": 322,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "wrap exception in Result.Fail"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_322_verifygroundednessasync_catch_322_5__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 322,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_324_verifygroundednessasync_return_324_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 324,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to verify groundedness\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:6gn0zk:verifygroundednessasync__entry__method:6gn0zk:verifygroundednessasync__action_292_prompt_build_292__linear",
          "from": "method:6gn0zk:verifygroundednessasync__entry",
          "to": "method:6gn0zk:verifygroundednessasync__action_292_prompt_build_292__linear",
          "kind": "next",
          "line": 292,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_292_prompt_build_292__linear__method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return",
          "from": "method:6gn0zk:verifygroundednessasync__action_292_prompt_build_292__linear",
          "to": "method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return",
          "kind": "return",
          "line": 295,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return__method:6gn0zk:verifygroundednessasync__action_300_verifygroundednessasync_try_300_1__try",
          "from": "method:6gn0zk:verifygroundednessasync__action_295_verifygroundednessasync_return_295_0__return",
          "to": "method:6gn0zk:verifygroundednessasync__action_300_verifygroundednessasync_try_300_1__try",
          "kind": "next",
          "line": 300,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_300_verifygroundednessasync_try_300_1__try__method:6gn0zk:verifygroundednessasync__action_308_verifygroundednessasync_await_308_2__await",
          "from": "method:6gn0zk:verifygroundednessasync__action_300_verifygroundednessasync_try_300_1__try",
          "to": "method:6gn0zk:verifygroundednessasync__action_308_verifygroundednessasync_await_308_2__await",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_verifygroundednessasync_await_308_2__await__method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "from": "method:6gn0zk:verifygroundednessasync__action_308_verifygroundednessasync_await_308_2__await",
          "to": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry__method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body",
          "from": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "to": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body__method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "from": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body",
          "to": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry__method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_exit",
          "from": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry",
          "to": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_exit__call_method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync",
          "from": "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_exit",
          "to": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "calls _chatClient.GetResponseAsync with system and user prompts",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync__method:6gn0zk:verifygroundednessasync__action_309_verifygroundednessasync_await_309_3__await",
          "from": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync",
          "to": "method:6gn0zk:verifygroundednessasync__action_309_verifygroundednessasync_await_309_3__await",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_309_verifygroundednessasync_await_309_3__await__call_method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync",
          "from": "method:6gn0zk:verifygroundednessasync__action_309_verifygroundednessasync_await_309_3__await",
          "to": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync",
          "kind": "call",
          "label": "systemPrompt and userPrompt, ChatOptions",
          "line": 309,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync__method:6gn0zk:verifygroundednessasync__action_316_text_cleanup_316__linear",
          "from": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync",
          "to": "method:6gn0zk:verifygroundednessasync__action_316_text_cleanup_316__linear",
          "kind": "next",
          "line": 316,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_316_text_cleanup_316__linear__method:6gn0zk:verifygroundednessasync__action_318_json_deserialize_318__linear",
          "from": "method:6gn0zk:verifygroundednessasync__action_316_text_cleanup_316__linear",
          "to": "method:6gn0zk:verifygroundednessasync__action_318_json_deserialize_318__linear",
          "kind": "next",
          "line": 318,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_318_json_deserialize_318__linear__call_method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult_",
          "from": "method:6gn0zk:verifygroundednessasync__action_318_json_deserialize_318__linear",
          "to": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult_",
          "kind": "call",
          "label": "rawJson",
          "line": 318,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult___method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return",
          "from": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult_",
          "to": "method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return",
          "kind": "return",
          "line": 320,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return__method:6gn0zk:verifygroundednessasync__action_322_error_handling_322__linear",
          "from": "method:6gn0zk:verifygroundednessasync__action_320_verifygroundednessasync_return_320_4__return",
          "to": "method:6gn0zk:verifygroundednessasync__action_322_error_handling_322__linear",
          "kind": "next",
          "line": 322,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_322_error_handling_322__linear__method:6gn0zk:verifygroundednessasync__action_322_verifygroundednessasync_catch_322_5__catch",
          "from": "method:6gn0zk:verifygroundednessasync__action_322_error_handling_322__linear",
          "to": "method:6gn0zk:verifygroundednessasync__action_322_verifygroundednessasync_catch_322_5__catch",
          "kind": "exception",
          "line": 322,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__action_322_verifygroundednessasync_catch_322_5__catch__method:6gn0zk:verifygroundednessasync__action_324_verifygroundednessasync_return_324_6__return",
          "from": "method:6gn0zk:verifygroundednessasync__action_322_verifygroundednessasync_catch_322_5__catch",
          "to": "method:6gn0zk:verifygroundednessasync__action_324_verifygroundednessasync_return_324_6__return",
          "kind": "return",
          "line": 324,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync__jump_unknown_ResiliencePipeline_ExecuteAsync",
          "fromNodeId": "method:6gn0zk:verifygroundednessasync__call_308_ResiliencePipeline_ExecuteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ResiliencePipeline.ExecuteAsync",
          "line": 308,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ResiliencePipeline.ExecuteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync__jump_unknown_IChatClient_GetResponseAsync",
          "fromNodeId": "method:6gn0zk:verifygroundednessasync__call_309_IChatClient_GetResponseAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IChatClient.GetResponseAsync",
          "line": 309,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IChatClient.GetResponseAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult___jump_unknown_JsonSerializer_Deserialize_GroundednessResult_",
          "fromNodeId": "method:6gn0zk:verifygroundednessasync__call_318_JsonSerializer_Deserialize_GroundednessResult_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "JsonSerializer.Deserialize<GroundednessResult>",
          "line": 318,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonSerializer.Deserialize<GroundednessResult> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_body__method:6gn0zk:verifygroundednessasync__action_308_retry_308__loop_entry"
      ],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 290,
        "end": 326
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 290,
          "summary": "Control-flow fragment extracted for method VerifyGroundednessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sxv1a4:getrelevantcontextasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1sxv1a4:getrelevantcontextasync",
      "ownerSymbolName": "GetRelevantContextAsync",
      "entryNodeId": "method:1sxv1a4:getrelevantcontextasync__entry",
      "exitNodeIds": [
        "method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return",
        "method:1sxv1a4:getrelevantcontextasync__action_381_getrelevantcontextasync_return_381_18__return"
      ],
      "nodes": [
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__entry",
          "kind": "entry",
          "label": "GetRelevantContextAsync entry",
          "line": 328,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Generates embedding for query, searches Qdrant for top context points (tenant or global) and returns RelevantContext list"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_330_getrelevantcontextasync_try_330_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 330,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_332_getrelevantcontextasync_await_332_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var queryEmbedding = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_332_external_call_332__linear",
          "kind": "http-call",
          "label": "generate embedding",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _embeddingGenerator.GenerateAsync via retry pipeline"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "IEmbeddingGenerator.GenerateAsync",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "single query string, cancellation token"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_333_getrelevantcontextasync_await_333_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 333,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _embeddingGenerator.GenerateAsync(new[] { query }, cancellationToken: ct), cancellationToken);"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_336_getrelevantcontextasync_external_call_336_3__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 336,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "var filter = new Qdrant.Client.Grpc.Filter();"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_336_build_filter_336__linear",
          "kind": "statement",
          "label": "build Qdrant filter for tenant/global",
          "line": 336,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "adds two SHOULD conditions for tenantId and 'global'"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_337_getrelevantcontextasync_external_call_337_4__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 337,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_339_getrelevantcontextasync_external_call_339_5__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 339,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_342_getrelevantcontextasync_external_call_342_6__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 342,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_345_getrelevantcontextasync_external_call_345_7__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 345,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_347_getrelevantcontextasync_external_call_347_8__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 347,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_350_getrelevantcontextasync_external_call_350_9__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 350,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_354_getrelevantcontextasync_external_call_354_10__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 354,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_355_getrelevantcontextasync_try_355_11__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 355,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_357_getrelevantcontextasync_await_357_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _qdrantClient.SearchAsync("
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_357_external_call_357__linear",
          "kind": "http-call",
          "label": "search Qdrant",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _qdrantClient.SearchAsync and converts to list; falls back to empty list on exception"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "QdrantClient.SearchAsync",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "collectionName 'knowledge_units', vector, filter, limit=5"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_366_getrelevantcontextasync_catch_366_13__catch",
          "kind": "catch",
          "label": "catch Exception",
          "line": 366,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception)"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_368_getrelevantcontextasync_external_call_368_14__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 368,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_371_getrelevantcontextasync_mapping_371_15__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 371,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var contexts = searchResult.Select(point => new RelevantContext"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_371_mapping_371__linear",
          "kind": "statement",
          "label": "map scored points to RelevantContext",
          "line": 371,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "extracts 'content' payload and score into DTO"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return",
          "kind": "return",
          "label": "Returns result",
          "line": 377,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(contexts);"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_379_error_handling_379__linear",
          "kind": "statement",
          "label": "wrap exceptions",
          "line": 379,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail with error caused by exception"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_379_getrelevantcontextasync_catch_379_17__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 379,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_381_getrelevantcontextasync_return_381_18__return",
          "kind": "return",
          "label": "Returns result",
          "line": 381,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to retrieve relevant context\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__entry__method:1sxv1a4:getrelevantcontextasync__action_330_getrelevantcontextasync_try_330_0__try",
          "from": "method:1sxv1a4:getrelevantcontextasync__entry",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_330_getrelevantcontextasync_try_330_0__try",
          "kind": "next",
          "line": 330,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_330_getrelevantcontextasync_try_330_0__try__method:1sxv1a4:getrelevantcontextasync__action_332_getrelevantcontextasync_await_332_1__await",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_330_getrelevantcontextasync_try_330_0__try",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_332_getrelevantcontextasync_await_332_1__await",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_332_getrelevantcontextasync_await_332_1__await__method:1sxv1a4:getrelevantcontextasync__action_332_external_call_332__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_332_getrelevantcontextasync_await_332_1__await",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_332_external_call_332__linear",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_332_external_call_332__linear__call_method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_332_external_call_332__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "single query string, cancellation token",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync__method:1sxv1a4:getrelevantcontextasync__action_333_getrelevantcontextasync_await_333_2__await",
          "from": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_333_getrelevantcontextasync_await_333_2__await",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_333_getrelevantcontextasync_await_333_2__await__method:1sxv1a4:getrelevantcontextasync__action_336_getrelevantcontextasync_external_call_336_3__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_333_getrelevantcontextasync_await_333_2__await",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_336_getrelevantcontextasync_external_call_336_3__linear",
          "kind": "next",
          "line": 336,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_336_getrelevantcontextasync_external_call_336_3__linear__method:1sxv1a4:getrelevantcontextasync__action_336_build_filter_336__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_336_getrelevantcontextasync_external_call_336_3__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_336_build_filter_336__linear",
          "kind": "next",
          "line": 336,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_336_build_filter_336__linear__method:1sxv1a4:getrelevantcontextasync__action_337_getrelevantcontextasync_external_call_337_4__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_336_build_filter_336__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_337_getrelevantcontextasync_external_call_337_4__linear",
          "kind": "next",
          "line": 337,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_337_getrelevantcontextasync_external_call_337_4__linear__method:1sxv1a4:getrelevantcontextasync__action_339_getrelevantcontextasync_external_call_339_5__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_337_getrelevantcontextasync_external_call_337_4__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_339_getrelevantcontextasync_external_call_339_5__linear",
          "kind": "next",
          "line": 339,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_339_getrelevantcontextasync_external_call_339_5__linear__method:1sxv1a4:getrelevantcontextasync__action_342_getrelevantcontextasync_external_call_342_6__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_339_getrelevantcontextasync_external_call_339_5__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_342_getrelevantcontextasync_external_call_342_6__linear",
          "kind": "next",
          "line": 342,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_342_getrelevantcontextasync_external_call_342_6__linear__method:1sxv1a4:getrelevantcontextasync__action_345_getrelevantcontextasync_external_call_345_7__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_342_getrelevantcontextasync_external_call_342_6__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_345_getrelevantcontextasync_external_call_345_7__linear",
          "kind": "next",
          "line": 345,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_345_getrelevantcontextasync_external_call_345_7__linear__method:1sxv1a4:getrelevantcontextasync__action_347_getrelevantcontextasync_external_call_347_8__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_345_getrelevantcontextasync_external_call_345_7__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_347_getrelevantcontextasync_external_call_347_8__linear",
          "kind": "next",
          "line": 347,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_347_getrelevantcontextasync_external_call_347_8__linear__method:1sxv1a4:getrelevantcontextasync__action_350_getrelevantcontextasync_external_call_350_9__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_347_getrelevantcontextasync_external_call_347_8__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_350_getrelevantcontextasync_external_call_350_9__linear",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_350_getrelevantcontextasync_external_call_350_9__linear__method:1sxv1a4:getrelevantcontextasync__action_354_getrelevantcontextasync_external_call_354_10__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_350_getrelevantcontextasync_external_call_350_9__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_354_getrelevantcontextasync_external_call_354_10__linear",
          "kind": "next",
          "line": 354,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_354_getrelevantcontextasync_external_call_354_10__linear__method:1sxv1a4:getrelevantcontextasync__action_355_getrelevantcontextasync_try_355_11__try",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_354_getrelevantcontextasync_external_call_354_10__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_355_getrelevantcontextasync_try_355_11__try",
          "kind": "next",
          "line": 355,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_355_getrelevantcontextasync_try_355_11__try__method:1sxv1a4:getrelevantcontextasync__action_357_getrelevantcontextasync_await_357_12__await",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_355_getrelevantcontextasync_try_355_11__try",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_357_getrelevantcontextasync_await_357_12__await",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_357_getrelevantcontextasync_await_357_12__await__method:1sxv1a4:getrelevantcontextasync__action_357_external_call_357__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_357_getrelevantcontextasync_await_357_12__await",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_357_external_call_357__linear",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_357_external_call_357__linear__call_method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_357_external_call_357__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "collectionName 'knowledge_units', vector, filter, limit=5",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync__method:1sxv1a4:getrelevantcontextasync__action_366_getrelevantcontextasync_catch_366_13__catch",
          "from": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_366_getrelevantcontextasync_catch_366_13__catch",
          "kind": "exception",
          "line": 366,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_366_getrelevantcontextasync_catch_366_13__catch__method:1sxv1a4:getrelevantcontextasync__action_368_getrelevantcontextasync_external_call_368_14__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_366_getrelevantcontextasync_catch_366_13__catch",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_368_getrelevantcontextasync_external_call_368_14__linear",
          "kind": "next",
          "line": 368,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_368_getrelevantcontextasync_external_call_368_14__linear__method:1sxv1a4:getrelevantcontextasync__action_371_getrelevantcontextasync_mapping_371_15__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_368_getrelevantcontextasync_external_call_368_14__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_371_getrelevantcontextasync_mapping_371_15__linear",
          "kind": "next",
          "line": 371,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_371_getrelevantcontextasync_mapping_371_15__linear__method:1sxv1a4:getrelevantcontextasync__action_371_mapping_371__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_371_getrelevantcontextasync_mapping_371_15__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_371_mapping_371__linear",
          "kind": "next",
          "line": 371,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_371_mapping_371__linear__method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_371_mapping_371__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return",
          "kind": "return",
          "line": 377,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return__method:1sxv1a4:getrelevantcontextasync__action_379_error_handling_379__linear",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_377_getrelevantcontextasync_return_377_16__return",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_379_error_handling_379__linear",
          "kind": "next",
          "line": 379,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_379_error_handling_379__linear__method:1sxv1a4:getrelevantcontextasync__action_379_getrelevantcontextasync_catch_379_17__catch",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_379_error_handling_379__linear",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_379_getrelevantcontextasync_catch_379_17__catch",
          "kind": "exception",
          "line": 379,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__action_379_getrelevantcontextasync_catch_379_17__catch__method:1sxv1a4:getrelevantcontextasync__action_381_getrelevantcontextasync_return_381_18__return",
          "from": "method:1sxv1a4:getrelevantcontextasync__action_379_getrelevantcontextasync_catch_379_17__catch",
          "to": "method:1sxv1a4:getrelevantcontextasync__action_381_getrelevantcontextasync_return_381_18__return",
          "kind": "return",
          "line": 381,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync__jump_unknown_IEmbeddingGenerator_GenerateAsync",
          "fromNodeId": "method:1sxv1a4:getrelevantcontextasync__call_332_IEmbeddingGenerator_GenerateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IEmbeddingGenerator.GenerateAsync",
          "line": 332,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IEmbeddingGenerator.GenerateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync__jump_unknown_QdrantClient_SearchAsync",
          "fromNodeId": "method:1sxv1a4:getrelevantcontextasync__call_357_QdrantClient_SearchAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QdrantClient.SearchAsync",
          "line": 357,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target QdrantClient.SearchAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 328,
        "end": 383
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 328,
          "summary": "Control-flow fragment extracted for method GetRelevantContextAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:yy3thw:searchlibrarysemanticallyasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:yy3thw:searchlibrarysemanticallyasync",
      "ownerSymbolName": "SearchLibrarySemanticallyAsync",
      "entryNodeId": "method:yy3thw:searchlibrarysemanticallyasync__entry",
      "exitNodeIds": [
        "method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return",
        "method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return",
        "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return",
        "method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return",
        "method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return",
        "method:yy3thw:searchlibrarysemanticallyasync__action_545_searchlibrarysemanticallyasync_return_545_47__return"
      ],
      "nodes": [
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__entry",
          "kind": "entry",
          "label": "SearchLibrarySemanticallyAsync entry",
          "line": 385,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Performs semantic search: embedding generation, Qdrant retrieval, optional Neo4j graph expansion, enrich with ebook titles from Postgres, and map to DTOs"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_387_searchlibrarysemanticallyasync_try_387_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 387,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_390_searchlibrarysemanticallyasync_await_390_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var embeddingResponse = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_390_external_call_390__linear",
          "kind": "http-call",
          "label": "generate embedding via retry",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _embeddingGenerator.GenerateAsync with options Dimensions=768"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "IEmbeddingGenerator.GenerateAsync",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "queryText, Dimensions=768"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_391_searchlibrarysemanticallyasync_await_391_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 391,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _embeddingGenerator.GenerateAsync("
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_399_searchlibrarysemanticallyasync_external_call_399_3__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 399,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "var filter = new Qdrant.Client.Grpc.Filter();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_399_build_filter_399__linear",
          "kind": "statement",
          "label": "build Qdrant tenant/global filter",
          "line": 399,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "adds two SHOULD tenant conditions"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_400_searchlibrarysemanticallyasync_external_call_400_4__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 400,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_402_searchlibrarysemanticallyasync_external_call_402_5__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 402,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_405_searchlibrarysemanticallyasync_external_call_405_6__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 405,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_408_searchlibrarysemanticallyasync_external_call_408_7__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 408,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_410_searchlibrarysemanticallyasync_external_call_410_8__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 410,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_413_searchlibrarysemanticallyasync_external_call_413_9__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 413,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_417_searchlibrarysemanticallyasync_external_call_417_10__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 417,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_418_searchlibrarysemanticallyasync_try_418_11__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 418,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_420_searchlibrarysemanticallyasync_await_420_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _qdrantClient.SearchAsync("
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_420_external_call_420__linear",
          "kind": "http-call",
          "label": "search Qdrant",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _qdrantClient.SearchAsync and handles missing collection via catch/log"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "QdrantClient.SearchAsync",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "collectionName 'knowledge_units', vector, filter, limit"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_429_searchlibrarysemanticallyasync_catch_429_13__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 429,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_431_searchlibrarysemanticallyasync_log_431_14__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 431,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(ex, \"[KnowledgeService] Failed to search in Qdrant; collection might not exist yet.\");"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_432_searchlibrarysemanticallyasync_external_call_432_15__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 432,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition",
          "kind": "condition",
          "label": "!searchResult.Any()",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (!searchResult.Any())"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__true",
          "kind": "branch-true",
          "label": "true",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__false",
          "kind": "branch-false",
          "label": "false",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "kind": "statement",
          "label": "merge",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition",
          "kind": "condition",
          "label": "empty result fast path",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "if no results return empty DTO list"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__true",
          "kind": "branch-true",
          "label": "true",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__false",
          "kind": "branch-false",
          "label": "false",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "kind": "statement",
          "label": "merge",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return",
          "kind": "return",
          "label": "Returns result",
          "line": 437,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new List<SemanticSearchResultDto>());"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_441_searchlibrarysemanticallyasync_mapping_441_18__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 441,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var candidateIds = searchResult.Select(r => r.Id.ToString()).ToList();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition",
          "kind": "condition",
          "label": "candidateIds.Any()",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (candidateIds.Any())"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__true",
          "kind": "branch-true",
          "label": "true",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__false",
          "kind": "branch-false",
          "label": "false",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "kind": "statement",
          "label": "merge",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_446_searchlibrarysemanticallyasync_try_446_20__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 446,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_448_searchlibrarysemanticallyasync_await_448_21__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await using var session = _neo4jDriver.AsyncSession();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_448_graph_query_448__linear",
          "kind": "statement",
          "label": "neo4j graph expansion",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "runs cypher to get definitions for candidateIds; populates definitions dictionary; logs on failure and continues"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession",
          "kind": "call",
          "label": "IDriver.AsyncSession",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "create async Neo4j session"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return",
          "kind": "return",
          "label": "Returns result",
          "line": 452,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "RETURN source.id AS sourceId, target.content AS targetContent\";"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_454_searchlibrarysemanticallyasync_await_454_23__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 454,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var neoResult = await session.ExecuteReadAsync(async tx =>"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync",
          "kind": "call",
          "label": "session.ExecuteReadAsync",
          "line": 454,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "execute cypher to find DEFINES relationships"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_456_searchlibrarysemanticallyasync_await_456_24__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 456,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var cursor = await tx.RunAsync(cypher, new { candidateIds });"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_await_457_25__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 457,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await cursor.ToListAsync();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return",
          "kind": "return",
          "label": "Returns result",
          "line": 457,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await cursor.ToListAsync();"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "kind": "loop-entry",
          "label": "var record in neoResult",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var record in neoResult)"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body",
          "kind": "loop-body",
          "label": "foreach (var record in neoResult)",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition",
          "kind": "condition",
          "label": "!definitions.ContainsKey(sourceId)",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (!definitions.ContainsKey(sourceId))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__true",
          "kind": "branch-true",
          "label": "true",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__false",
          "kind": "branch-false",
          "label": "false",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "kind": "statement",
          "label": "merge",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_471_searchlibrarysemanticallyasync_catch_471_29__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 471,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_473_searchlibrarysemanticallyasync_log_473_30__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 473,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(ex, \"[KnowledgeService] Neo4j graph expansion query failed.\");"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_479_searchlibrarysemanticallyasync_repository_read_479_31__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 479,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_480_searchlibrarysemanticallyasync_mapping_480_32__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 480,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": ".Select(r => Guid.Parse(r.Payload[\"ebookId\"].StringValue))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition",
          "kind": "condition",
          "label": "ebookIds.Any()",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (ebookIds.Any())"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__true",
          "kind": "branch-true",
          "label": "true",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__false",
          "kind": "branch-false",
          "label": "false",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "kind": "statement",
          "label": "merge",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_487_searchlibrarysemanticallyasync_await_487_34__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_487_persistence_read_487__linear",
          "kind": "statement",
          "label": "retrieve ebook titles",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "query Ebooks by ebookIds to map titles"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory.CreateDbContextAsync",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_488_searchlibrarysemanticallyasync_await_488_35__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 488,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "ebookTitles = await dbContext.Ebooks"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_489_searchlibrarysemanticallyasync_repository_read_489_36__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 489,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": ".Where(e => ebookIds.Contains(e.Id))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_494_searchlibrarysemanticallyasync_mapping_494_37__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 494,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var dtos = searchResult.Select(point =>"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_494_mapping_494__linear",
          "kind": "statement",
          "label": "map search points to DTOs",
          "line": 494,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "map payload fields, parse metadataJson, inject context from definitions into snippet"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition",
          "kind": "condition",
          "label": "Guid.TryParse(ebookIdStr, out var parsedId)",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (Guid.TryParse(ebookIdStr, out var parsedId))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__true",
          "kind": "branch-true",
          "label": "true",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__false",
          "kind": "branch-false",
          "label": "false",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition",
          "kind": "condition",
          "label": "ebookId.HasValue",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (ebookId.HasValue)"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__true",
          "kind": "branch-true",
          "label": "true",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__false",
          "kind": "branch-false",
          "label": "false",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "kind": "statement",
          "label": "merge",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition",
          "kind": "condition",
          "label": "point.Payload.TryGetValue(\"metadataJson\", out var metaVal) && !string.IsNullOrEmpty(metaVal.StringValue)",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (point.Payload.TryGetValue(\"metadataJson\", out var metaVal) && !string.IsNullOrEmpty(metaVal.StringValue))"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__true",
          "kind": "branch-true",
          "label": "true",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__false",
          "kind": "branch-false",
          "label": "false",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "kind": "statement",
          "label": "merge",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_515_searchlibrarysemanticallyasync_try_515_41__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 515,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object_",
          "kind": "call",
          "label": "JsonSerializer.Deserialize<Dictionary<string, object>>",
          "line": 517,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "metadataJson payload string"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_519_searchlibrarysemanticallyasync_catch_519_42__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 519,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch {}"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition",
          "kind": "condition",
          "label": "definitions.TryGetValue(pointIdStr, out var pointDefs) && pointDefs.Any()",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (definitions.TryGetValue(pointIdStr, out var pointDefs) && pointDefs.Any())"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__true",
          "kind": "branch-true",
          "label": "true",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__false",
          "kind": "branch-false",
          "label": "false",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "kind": "statement",
          "label": "merge",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return",
          "kind": "return",
          "label": "Returns result",
          "line": 538,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return dto;"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return",
          "kind": "return",
          "label": "Returns result",
          "line": 541,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(dtos);"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_543_error_handling_543__linear",
          "kind": "statement",
          "label": "wrap exceptions",
          "line": 543,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail with caused exception"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_543_searchlibrarysemanticallyasync_catch_543_46__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 543,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_545_searchlibrarysemanticallyasync_return_545_47__return",
          "kind": "return",
          "label": "Returns result",
          "line": 545,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to search library semantically\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__entry__method:yy3thw:searchlibrarysemanticallyasync__action_387_searchlibrarysemanticallyasync_try_387_0__try",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__entry",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_387_searchlibrarysemanticallyasync_try_387_0__try",
          "kind": "next",
          "line": 387,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_387_searchlibrarysemanticallyasync_try_387_0__try__method:yy3thw:searchlibrarysemanticallyasync__action_390_searchlibrarysemanticallyasync_await_390_1__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_387_searchlibrarysemanticallyasync_try_387_0__try",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_390_searchlibrarysemanticallyasync_await_390_1__await",
          "kind": "next",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_390_searchlibrarysemanticallyasync_await_390_1__await__method:yy3thw:searchlibrarysemanticallyasync__action_390_external_call_390__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_390_searchlibrarysemanticallyasync_await_390_1__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_390_external_call_390__linear",
          "kind": "next",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_390_external_call_390__linear__call_method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_390_external_call_390__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "queryText, Dimensions=768",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync__method:yy3thw:searchlibrarysemanticallyasync__action_391_searchlibrarysemanticallyasync_await_391_2__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_391_searchlibrarysemanticallyasync_await_391_2__await",
          "kind": "next",
          "line": 391,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_391_searchlibrarysemanticallyasync_await_391_2__await__method:yy3thw:searchlibrarysemanticallyasync__action_399_searchlibrarysemanticallyasync_external_call_399_3__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_391_searchlibrarysemanticallyasync_await_391_2__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_399_searchlibrarysemanticallyasync_external_call_399_3__linear",
          "kind": "next",
          "line": 399,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_399_searchlibrarysemanticallyasync_external_call_399_3__linear__method:yy3thw:searchlibrarysemanticallyasync__action_399_build_filter_399__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_399_searchlibrarysemanticallyasync_external_call_399_3__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_399_build_filter_399__linear",
          "kind": "next",
          "line": 399,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_399_build_filter_399__linear__method:yy3thw:searchlibrarysemanticallyasync__action_400_searchlibrarysemanticallyasync_external_call_400_4__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_399_build_filter_399__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_400_searchlibrarysemanticallyasync_external_call_400_4__linear",
          "kind": "next",
          "line": 400,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_400_searchlibrarysemanticallyasync_external_call_400_4__linear__method:yy3thw:searchlibrarysemanticallyasync__action_402_searchlibrarysemanticallyasync_external_call_402_5__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_400_searchlibrarysemanticallyasync_external_call_400_4__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_402_searchlibrarysemanticallyasync_external_call_402_5__linear",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_402_searchlibrarysemanticallyasync_external_call_402_5__linear__method:yy3thw:searchlibrarysemanticallyasync__action_405_searchlibrarysemanticallyasync_external_call_405_6__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_402_searchlibrarysemanticallyasync_external_call_402_5__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_405_searchlibrarysemanticallyasync_external_call_405_6__linear",
          "kind": "next",
          "line": 405,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_405_searchlibrarysemanticallyasync_external_call_405_6__linear__method:yy3thw:searchlibrarysemanticallyasync__action_408_searchlibrarysemanticallyasync_external_call_408_7__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_405_searchlibrarysemanticallyasync_external_call_405_6__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_408_searchlibrarysemanticallyasync_external_call_408_7__linear",
          "kind": "next",
          "line": 408,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_408_searchlibrarysemanticallyasync_external_call_408_7__linear__method:yy3thw:searchlibrarysemanticallyasync__action_410_searchlibrarysemanticallyasync_external_call_410_8__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_408_searchlibrarysemanticallyasync_external_call_408_7__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_410_searchlibrarysemanticallyasync_external_call_410_8__linear",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_410_searchlibrarysemanticallyasync_external_call_410_8__linear__method:yy3thw:searchlibrarysemanticallyasync__action_413_searchlibrarysemanticallyasync_external_call_413_9__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_410_searchlibrarysemanticallyasync_external_call_410_8__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_413_searchlibrarysemanticallyasync_external_call_413_9__linear",
          "kind": "next",
          "line": 413,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_413_searchlibrarysemanticallyasync_external_call_413_9__linear__method:yy3thw:searchlibrarysemanticallyasync__action_417_searchlibrarysemanticallyasync_external_call_417_10__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_413_searchlibrarysemanticallyasync_external_call_413_9__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_417_searchlibrarysemanticallyasync_external_call_417_10__linear",
          "kind": "next",
          "line": 417,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_417_searchlibrarysemanticallyasync_external_call_417_10__linear__method:yy3thw:searchlibrarysemanticallyasync__action_418_searchlibrarysemanticallyasync_try_418_11__try",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_417_searchlibrarysemanticallyasync_external_call_417_10__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_418_searchlibrarysemanticallyasync_try_418_11__try",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_418_searchlibrarysemanticallyasync_try_418_11__try__method:yy3thw:searchlibrarysemanticallyasync__action_420_searchlibrarysemanticallyasync_await_420_12__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_418_searchlibrarysemanticallyasync_try_418_11__try",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_420_searchlibrarysemanticallyasync_await_420_12__await",
          "kind": "next",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_420_searchlibrarysemanticallyasync_await_420_12__await__method:yy3thw:searchlibrarysemanticallyasync__action_420_external_call_420__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_420_searchlibrarysemanticallyasync_await_420_12__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_420_external_call_420__linear",
          "kind": "next",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_420_external_call_420__linear__call_method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_420_external_call_420__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "collectionName 'knowledge_units', vector, filter, limit",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync__method:yy3thw:searchlibrarysemanticallyasync__action_429_searchlibrarysemanticallyasync_catch_429_13__catch",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_429_searchlibrarysemanticallyasync_catch_429_13__catch",
          "kind": "exception",
          "line": 429,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_429_searchlibrarysemanticallyasync_catch_429_13__catch__method:yy3thw:searchlibrarysemanticallyasync__action_431_searchlibrarysemanticallyasync_log_431_14__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_429_searchlibrarysemanticallyasync_catch_429_13__catch",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_431_searchlibrarysemanticallyasync_log_431_14__linear",
          "kind": "next",
          "line": 431,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_431_searchlibrarysemanticallyasync_log_431_14__linear__method:yy3thw:searchlibrarysemanticallyasync__action_432_searchlibrarysemanticallyasync_external_call_432_15__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_431_searchlibrarysemanticallyasync_log_431_14__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_432_searchlibrarysemanticallyasync_external_call_432_15__linear",
          "kind": "next",
          "line": 432,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_432_searchlibrarysemanticallyasync_external_call_432_15__linear__method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_432_searchlibrarysemanticallyasync_external_call_432_15__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition__method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__true",
          "kind": "condition-true",
          "label": "true",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition__method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__false",
          "kind": "condition-false",
          "label": "false",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__true__method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__false__method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge__method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition__method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__true",
          "kind": "condition-true",
          "label": "true",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition__method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__false",
          "kind": "condition-false",
          "label": "false",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__true__method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__false__method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "kind": "next",
          "line": 435,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge__method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return",
          "kind": "return",
          "line": 437,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return__method:yy3thw:searchlibrarysemanticallyasync__action_441_searchlibrarysemanticallyasync_mapping_441_18__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_437_searchlibrarysemanticallyasync_return_437_17__return",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_441_searchlibrarysemanticallyasync_mapping_441_18__linear",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_441_searchlibrarysemanticallyasync_mapping_441_18__linear__method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_441_searchlibrarysemanticallyasync_mapping_441_18__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition__method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__true",
          "kind": "condition-true",
          "label": "true",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition__method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__false",
          "kind": "condition-false",
          "label": "false",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__true__method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__false__method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge__method:yy3thw:searchlibrarysemanticallyasync__action_446_searchlibrarysemanticallyasync_try_446_20__try",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_446_searchlibrarysemanticallyasync_try_446_20__try",
          "kind": "next",
          "line": 446,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_446_searchlibrarysemanticallyasync_try_446_20__try__method:yy3thw:searchlibrarysemanticallyasync__action_448_searchlibrarysemanticallyasync_await_448_21__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_446_searchlibrarysemanticallyasync_try_446_20__try",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_448_searchlibrarysemanticallyasync_await_448_21__await",
          "kind": "next",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_448_searchlibrarysemanticallyasync_await_448_21__await__method:yy3thw:searchlibrarysemanticallyasync__action_448_graph_query_448__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_448_searchlibrarysemanticallyasync_await_448_21__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_448_graph_query_448__linear",
          "kind": "next",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_448_graph_query_448__linear__call_method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_448_graph_query_448__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession",
          "kind": "call",
          "label": "create async Neo4j session",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession__method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return",
          "kind": "return",
          "line": 452,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return__method:yy3thw:searchlibrarysemanticallyasync__action_454_searchlibrarysemanticallyasync_await_454_23__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_452_searchlibrarysemanticallyasync_return_452_22__return",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_454_searchlibrarysemanticallyasync_await_454_23__await",
          "kind": "next",
          "line": 454,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_454_searchlibrarysemanticallyasync_await_454_23__await__call_method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_454_searchlibrarysemanticallyasync_await_454_23__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync",
          "kind": "call",
          "label": "execute cypher to find DEFINES relationships",
          "line": 454,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync__method:yy3thw:searchlibrarysemanticallyasync__action_456_searchlibrarysemanticallyasync_await_456_24__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_456_searchlibrarysemanticallyasync_await_456_24__await",
          "kind": "next",
          "line": 456,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_456_searchlibrarysemanticallyasync_await_456_24__await__method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_await_457_25__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_456_searchlibrarysemanticallyasync_await_456_24__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_await_457_25__await",
          "kind": "next",
          "line": 457,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_await_457_25__await__method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_await_457_25__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return",
          "kind": "return",
          "line": 457,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return__method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_457_searchlibrarysemanticallyasync_return_457_26__return",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "kind": "next",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry__method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body",
          "kind": "loop-body",
          "label": "var record in neoResult",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body__method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry__method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_exit",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 460,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_exit__method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_exit",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition",
          "kind": "next",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition__method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__true",
          "kind": "condition-true",
          "label": "true",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition__method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__false",
          "kind": "condition-false",
          "label": "false",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__true__method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "kind": "next",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__false__method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "kind": "next",
          "line": 464,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge__method:yy3thw:searchlibrarysemanticallyasync__action_471_searchlibrarysemanticallyasync_catch_471_29__catch",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_471_searchlibrarysemanticallyasync_catch_471_29__catch",
          "kind": "exception",
          "line": 471,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_471_searchlibrarysemanticallyasync_catch_471_29__catch__method:yy3thw:searchlibrarysemanticallyasync__action_473_searchlibrarysemanticallyasync_log_473_30__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_471_searchlibrarysemanticallyasync_catch_471_29__catch",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_473_searchlibrarysemanticallyasync_log_473_30__linear",
          "kind": "next",
          "line": 473,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_473_searchlibrarysemanticallyasync_log_473_30__linear__method:yy3thw:searchlibrarysemanticallyasync__action_479_searchlibrarysemanticallyasync_repository_read_479_31__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_473_searchlibrarysemanticallyasync_log_473_30__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_479_searchlibrarysemanticallyasync_repository_read_479_31__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_479_searchlibrarysemanticallyasync_repository_read_479_31__linear__method:yy3thw:searchlibrarysemanticallyasync__action_480_searchlibrarysemanticallyasync_mapping_480_32__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_479_searchlibrarysemanticallyasync_repository_read_479_31__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_480_searchlibrarysemanticallyasync_mapping_480_32__linear",
          "kind": "next",
          "line": 480,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_480_searchlibrarysemanticallyasync_mapping_480_32__linear__method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_480_searchlibrarysemanticallyasync_mapping_480_32__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition__method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__true",
          "kind": "condition-true",
          "label": "true",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition__method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__false",
          "kind": "condition-false",
          "label": "false",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__true__method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__false__method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge__method:yy3thw:searchlibrarysemanticallyasync__action_487_searchlibrarysemanticallyasync_await_487_34__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_487_searchlibrarysemanticallyasync_await_487_34__await",
          "kind": "next",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_487_searchlibrarysemanticallyasync_await_487_34__await__method:yy3thw:searchlibrarysemanticallyasync__action_487_persistence_read_487__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_487_searchlibrarysemanticallyasync_await_487_34__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_487_persistence_read_487__linear",
          "kind": "next",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_487_persistence_read_487__linear__call_method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_487_persistence_read_487__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync__method:yy3thw:searchlibrarysemanticallyasync__action_488_searchlibrarysemanticallyasync_await_488_35__await",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_488_searchlibrarysemanticallyasync_await_488_35__await",
          "kind": "next",
          "line": 488,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_488_searchlibrarysemanticallyasync_await_488_35__await__method:yy3thw:searchlibrarysemanticallyasync__action_489_searchlibrarysemanticallyasync_repository_read_489_36__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_488_searchlibrarysemanticallyasync_await_488_35__await",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_489_searchlibrarysemanticallyasync_repository_read_489_36__linear",
          "kind": "next",
          "line": 489,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_489_searchlibrarysemanticallyasync_repository_read_489_36__linear__method:yy3thw:searchlibrarysemanticallyasync__action_494_searchlibrarysemanticallyasync_mapping_494_37__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_489_searchlibrarysemanticallyasync_repository_read_489_36__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_494_searchlibrarysemanticallyasync_mapping_494_37__linear",
          "kind": "next",
          "line": 494,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_494_searchlibrarysemanticallyasync_mapping_494_37__linear__method:yy3thw:searchlibrarysemanticallyasync__action_494_mapping_494__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_494_searchlibrarysemanticallyasync_mapping_494_37__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_494_mapping_494__linear",
          "kind": "next",
          "line": 494,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_494_mapping_494__linear__method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_494_mapping_494__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition",
          "kind": "next",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition__method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__true",
          "kind": "condition-true",
          "label": "true",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition__method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__false",
          "kind": "condition-false",
          "label": "false",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__true__method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "kind": "next",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__false__method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "kind": "next",
          "line": 501,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge__method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition",
          "kind": "next",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition__method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__true",
          "kind": "condition-true",
          "label": "true",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition__method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__false",
          "kind": "condition-false",
          "label": "false",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__true__method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "kind": "next",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__false__method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "kind": "next",
          "line": 507,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge__method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition__method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__true",
          "kind": "condition-true",
          "label": "true",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition__method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__false",
          "kind": "condition-false",
          "label": "false",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__true__method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__false__method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge__method:yy3thw:searchlibrarysemanticallyasync__action_515_searchlibrarysemanticallyasync_try_515_41__try",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_515_searchlibrarysemanticallyasync_try_515_41__try",
          "kind": "next",
          "line": 515,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_515_searchlibrarysemanticallyasync_try_515_41__try__call_method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object_",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_515_searchlibrarysemanticallyasync_try_515_41__try",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object_",
          "kind": "call",
          "label": "metadataJson payload string",
          "line": 517,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object___method:yy3thw:searchlibrarysemanticallyasync__action_519_searchlibrarysemanticallyasync_catch_519_42__catch",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object_",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_519_searchlibrarysemanticallyasync_catch_519_42__catch",
          "kind": "exception",
          "line": 519,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_519_searchlibrarysemanticallyasync_catch_519_42__catch__method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_519_searchlibrarysemanticallyasync_catch_519_42__catch",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition",
          "kind": "next",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition__method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__true",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__true",
          "kind": "condition-true",
          "label": "true",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition__method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__false",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__condition",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__false",
          "kind": "condition-false",
          "label": "false",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__true__method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__true",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "kind": "next",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__false__method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__false",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "kind": "next",
          "line": 533,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge__method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return",
          "kind": "return",
          "line": 538,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return__method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_538_searchlibrarysemanticallyasync_return_538_44__return",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return",
          "kind": "return",
          "line": 541,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return__method:yy3thw:searchlibrarysemanticallyasync__action_543_error_handling_543__linear",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_541_searchlibrarysemanticallyasync_return_541_45__return",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_543_error_handling_543__linear",
          "kind": "next",
          "line": 543,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_543_error_handling_543__linear__method:yy3thw:searchlibrarysemanticallyasync__action_543_searchlibrarysemanticallyasync_catch_543_46__catch",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_543_error_handling_543__linear",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_543_searchlibrarysemanticallyasync_catch_543_46__catch",
          "kind": "exception",
          "line": 543,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__action_543_searchlibrarysemanticallyasync_catch_543_46__catch__method:yy3thw:searchlibrarysemanticallyasync__action_545_searchlibrarysemanticallyasync_return_545_47__return",
          "from": "method:yy3thw:searchlibrarysemanticallyasync__action_543_searchlibrarysemanticallyasync_catch_543_46__catch",
          "to": "method:yy3thw:searchlibrarysemanticallyasync__action_545_searchlibrarysemanticallyasync_return_545_47__return",
          "kind": "return",
          "line": 545,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync__jump_unknown_IEmbeddingGenerator_GenerateAsync",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_390_IEmbeddingGenerator_GenerateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IEmbeddingGenerator.GenerateAsync",
          "line": 390,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IEmbeddingGenerator.GenerateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync__jump_unknown_QdrantClient_SearchAsync",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_420_QdrantClient_SearchAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QdrantClient.SearchAsync",
          "line": 420,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target QdrantClient.SearchAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession__jump_unknown_IDriver_AsyncSession",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_448_IDriver_AsyncSession",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDriver.AsyncSession",
          "line": 448,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDriver.AsyncSession in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync__jump_unknown_session_ExecuteReadAsync",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_454_session_ExecuteReadAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "session.ExecuteReadAsync",
          "line": 454,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target session.ExecuteReadAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync__jump_unknown_IDbContextFactory_CreateDbContextAsync",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_487_IDbContextFactory_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory.CreateDbContextAsync",
          "line": 487,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDbContextFactory.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object___jump_unknown_JsonSerializer_Deserialize_Dictionary_string_object_",
          "fromNodeId": "method:yy3thw:searchlibrarysemanticallyasync__call_517_JsonSerializer_Deserialize_Dictionary_string_object_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "JsonSerializer.Deserialize<Dictionary<string, object>>",
          "line": 517,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonSerializer.Deserialize<Dictionary<string, object>> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_body__method:yy3thw:searchlibrarysemanticallyasync__action_460_searchlibrarysemanticallyasync_loop_460_27__loop_entry"
      ],
      "mergeNodeIds": [
        "method:yy3thw:searchlibrarysemanticallyasync__action_435_searchlibrarysemanticallyasync_branch_435_16__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_435_branch_435__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_444_searchlibrarysemanticallyasync_branch_444_19__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_464_searchlibrarysemanticallyasync_branch_464_28__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_485_searchlibrarysemanticallyasync_branch_485_33__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_501_searchlibrarysemanticallyasync_branch_501_38__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_507_searchlibrarysemanticallyasync_branch_507_39__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_513_searchlibrarysemanticallyasync_branch_513_40__merge",
        "method:yy3thw:searchlibrarysemanticallyasync__action_533_searchlibrarysemanticallyasync_branch_533_43__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 385,
        "end": 547
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 385,
          "summary": "Control-flow fragment extracted for method SearchLibrarySemanticallyAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:io0xiq:askquestionasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:io0xiq:askquestionasync",
      "ownerSymbolName": "AskQuestionAsync",
      "entryNodeId": "method:io0xiq:askquestionasync__entry",
      "exitNodeIds": [
        "method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return",
        "method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return",
        "method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return",
        "method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return",
        "method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return",
        "method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return",
        "method:io0xiq:askquestionasync__action_781_askquestionasync_return_781_65__return"
      ],
      "nodes": [
        {
          "id": "method:io0xiq:askquestionasync__entry",
          "kind": "entry",
          "label": "AskQuestionAsync entry",
          "line": 549,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "RAG question-answering flow: embed question, retrieve top contexts from Qdrant, optionally expand via Neo4j, fetch ebook titles, build grounding prompt, call chat AI with strict JSON response expectations, and hydrate citation book titles"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_556_askquestionasync_try_556_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 556,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_559_askquestionasync_await_559_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var embeddingResponse = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_559_external_call_559__linear",
          "kind": "http-call",
          "label": "generate embedding",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _embeddingGenerator.GenerateAsync via retry pipeline"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "IEmbeddingGenerator.GenerateAsync",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "question, Dimensions=768"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_560_askquestionasync_await_560_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 560,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _embeddingGenerator.GenerateAsync("
        },
        {
          "id": "method:io0xiq:askquestionasync__action_568_build_filter_568__linear",
          "kind": "statement",
          "label": "compose Qdrant filter for tenant and optional ebookId",
          "line": 568,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "adds tenant MUST filter and optional ebookId condition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_568_askquestionasync_external_call_568_3__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 568,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "var filter = new Qdrant.Client.Grpc.Filter();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_571_askquestionasync_external_call_571_4__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 571,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "var tenantFilter = new Qdrant.Client.Grpc.Filter();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_572_askquestionasync_external_call_572_5__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 572,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "tenantFilter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_574_askquestionasync_external_call_574_6__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 574,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_577_askquestionasync_external_call_577_7__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 577,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = tenantId }"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_580_askquestionasync_external_call_580_8__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 580,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "tenantFilter.Should.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_582_askquestionasync_external_call_582_9__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 582,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_585_askquestionasync_external_call_585_10__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 585,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = \"global\" }"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_588_askquestionasync_external_call_588_11__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 588,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Must.Add(new Qdrant.Client.Grpc.Condition { Filter = tenantFilter });"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition",
          "kind": "condition",
          "label": "ebookId.HasValue",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (ebookId.HasValue)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__true",
          "kind": "branch-true",
          "label": "true",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__false",
          "kind": "branch-false",
          "label": "false",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_592_askquestionasync_external_call_592_13__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 592,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "filter.Must.Add(new Qdrant.Client.Grpc.Condition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_594_askquestionasync_external_call_594_14__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 594,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Field = new Qdrant.Client.Grpc.FieldCondition"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_597_askquestionasync_external_call_597_15__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 597,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "Match = new Qdrant.Client.Grpc.Match { Text = ebookId.Value.ToString() }"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_602_askquestionasync_external_call_602_16__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 602,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "List<Qdrant.Client.Grpc.ScoredPoint> searchResult;"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_603_askquestionasync_try_603_17__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 603,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_605_askquestionasync_await_605_18__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _qdrantClient.SearchAsync("
        },
        {
          "id": "method:io0xiq:askquestionasync__action_605_external_call_605__linear",
          "kind": "http-call",
          "label": "search Qdrant",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "calls _qdrantClient.SearchAsync and logs/wraps failures"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "QdrantClient.SearchAsync",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "collectionName 'knowledge_units', vector, filter, limit"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_614_askquestionasync_catch_614_19__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 614,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_616_askquestionasync_log_616_20__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 616,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(ex, \"[KnowledgeService] Qdrant search failed during RAG retrieval.\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_617_askquestionasync_external_call_617_21__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 617,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82,
          "detail": "searchResult = new List<Qdrant.Client.Grpc.ScoredPoint>();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition",
          "kind": "condition",
          "label": "no contexts fallback",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "if searchResult empty returns canned answer indicating cannot answer"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__true",
          "kind": "branch-true",
          "label": "true",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__false",
          "kind": "branch-false",
          "label": "false",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "kind": "statement",
          "label": "merge",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition",
          "kind": "condition",
          "label": "!searchResult.Any()",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (!searchResult.Any())"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__true",
          "kind": "branch-true",
          "label": "true",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__false",
          "kind": "branch-false",
          "label": "false",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "kind": "statement",
          "label": "merge",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return",
          "kind": "return",
          "label": "Returns result",
          "line": 622,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new GroundedResponseDto"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_624_askquestionasync_repository_read_624_24__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 624,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "Answer = \"I cannot answer this based on the provided book context.\","
        },
        {
          "id": "method:io0xiq:askquestionasync__action_630_askquestionasync_mapping_630_25__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 630,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": "var candidateIds = searchResult.Select(r => r.Id.ToString()).ToList();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition",
          "kind": "condition",
          "label": "candidateIds.Any()",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (candidateIds.Any())"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__true",
          "kind": "branch-true",
          "label": "true",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__false",
          "kind": "branch-false",
          "label": "false",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_638_askquestionasync_try_638_27__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 638,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_640_askquestionasync_await_640_28__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await using var session = _neo4jDriver.AsyncSession();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_640_graph_query_640__linear",
          "kind": "statement",
          "label": "neo4j optional expansion",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "collect related contexts and relations via cypher; on failure fallback to Qdrant points and log"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession",
          "kind": "call",
          "label": "IDriver.AsyncSession",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "open async Neo4j session for optional graph expansion"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return",
          "kind": "return",
          "label": "Returns result",
          "line": 645,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "RETURN source.id AS sourceId, source.content AS sourceContent,"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_648_askquestionasync_await_648_30__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 648,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var neoResult = await session.ExecuteReadAsync(async tx =>"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync",
          "kind": "call",
          "label": "session.ExecuteReadAsync",
          "line": 648,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "execute cypher to collect relations"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_650_askquestionasync_await_650_31__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 650,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var cursor = await tx.RunAsync(cypher, new { candidateIds });"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_651_askquestionasync_await_651_32__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 651,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await cursor.ToListAsync();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return",
          "kind": "return",
          "label": "Returns result",
          "line": 651,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await cursor.ToListAsync();"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "kind": "loop-entry",
          "label": "var record in neoResult",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var record in neoResult)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body",
          "kind": "loop-body",
          "label": "foreach (var record in neoResult)",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_659_askquestionasync_repository_write_659_35__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 659,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "relatedContexts.Add($\"[Source ID: {sourceId}] {sourceContent}\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition",
          "kind": "condition",
          "label": "relations != null",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (relations != null)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__true",
          "kind": "branch-true",
          "label": "true",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__false",
          "kind": "branch-false",
          "label": "false",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "kind": "statement",
          "label": "merge",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "kind": "loop-entry",
          "label": "var relObj in relations",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var relObj in relations)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body",
          "kind": "loop-body",
          "label": "foreach (var relObj in relations)",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(targetContent)",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(targetContent))"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__true",
          "kind": "branch-true",
          "label": "true",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__false",
          "kind": "branch-false",
          "label": "false",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_673_askquestionasync_repository_write_673_39__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 673,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "relatedContexts.Add($\"[Related Context ({relation}) to {sourceId}] {targetContent}\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_680_askquestionasync_catch_680_40__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 680,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_682_askquestionasync_log_682_41__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 682,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogWarning(ex, \"[KnowledgeService] Neo4j graph expansion failed. Falling back to direct Qdrant points.\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "kind": "loop-entry",
          "label": "var point in searchResult",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var point in searchResult)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body",
          "kind": "loop-body",
          "label": "foreach (var point in searchResult)",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_687_askquestionasync_repository_write_687_43__linear",
          "kind": "db-write",
          "label": "Writes repository or persistence state",
          "line": 687,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "relatedContexts.Add($\"[Source ID: {sourceId}] {content}\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_694_askquestionasync_repository_read_694_44__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 694,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": ".Where(r => r.Payload.TryGetValue(\"ebookId\", out var ev) && Guid.TryParse(ev.StringValue, out _))"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_695_askquestionasync_mapping_695_45__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 695,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74,
          "detail": ".Select(r => Guid.Parse(r.Payload[\"ebookId\"].StringValue))"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition",
          "kind": "condition",
          "label": "ebookIds.Any()",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (ebookIds.Any())"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__true",
          "kind": "branch-true",
          "label": "true",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__false",
          "kind": "branch-false",
          "label": "false",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "kind": "statement",
          "label": "merge",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_702_askquestionasync_await_702_47__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_702_persistence_read_702__linear",
          "kind": "statement",
          "label": "retrieve ebook titles for citations",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "queries Ebooks table by ebookIds"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory.CreateDbContextAsync",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_703_askquestionasync_await_703_48__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 703,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "ebookTitles = await dbContext.Ebooks"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_704_askquestionasync_repository_read_704_49__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 704,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": ".Where(e => ebookIds.Contains(e.Id))"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_711_prompt_build_711__linear",
          "kind": "statement",
          "label": "compose strict grounding system prompt and user prompt",
          "line": 711,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "systemPrompt enforces JSON-only output and citation rules"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_715_askquestionasync_repository_read_715_50__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 715,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "1. Rely EXCLUSIVELY on the provided context. Do NOT use any pre-existing external knowledge, facts, or assumptions."
        },
        {
          "id": "method:io0xiq:askquestionasync__action_716_askquestionasync_repository_read_716_51__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 716,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "2. If the context does not contain the answer, you must state exactly: 'I cannot answer this based on the provided book context.'"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_717_askquestionasync_repository_read_717_52__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 717,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "3. For every statement or claim you make in your answer, you must cite the specific source IDs (e.g., source chunk ID or hash) from the context."
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_askquestionasync_await_740_53__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var chatResponse = await _retryPipeline.ExecuteAsync(async ct =>"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "kind": "loop-entry",
          "label": "invoke Chat client with JSON response format",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "uses _retryPipeline.ExecuteAsync to get chat response in JSON format"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_body",
          "kind": "loop-body",
          "label": "uses _retryPipeline.ExecuteAsync to get chat response in JSON format",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "ResiliencePipeline.ExecuteAsync",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "calls _chatClient.GetResponseAsync with system and user prompts and ChatOptions (ResponseFormat.Json)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_741_askquestionasync_await_741_54__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 741,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await _chatClient.GetResponseAsync(new List<ChatMessage>"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_749_text_cleanup_749__linear",
          "kind": "statement",
          "label": "repair JSON",
          "line": 749,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "strip fences and call JsonRepairHelper.Repair"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair",
          "kind": "call",
          "label": "JsonRepairHelper.Repair",
          "line": 749,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "rawJson"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_751_askquestionasync_try_751_55__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 751,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_753_json_deserialize_753__linear",
          "kind": "statement",
          "label": "parse grounded response",
          "line": 753,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "JsonSerializer.Deserialize to GroundedResponseDto and validate Answer presence"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto_",
          "kind": "call",
          "label": "JsonSerializer.Deserialize<GroundedResponseDto>",
          "line": 753,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "rawJson"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition",
          "kind": "condition",
          "label": "groundedResult == null || string.IsNullOrWhiteSpace(groundedResult.Answer)",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (groundedResult == null || string.IsNullOrWhiteSpace(groundedResult.Answer))"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__true",
          "kind": "branch-true",
          "label": "true",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__false",
          "kind": "branch-false",
          "label": "false",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "kind": "statement",
          "label": "merge",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return",
          "kind": "return",
          "label": "Returns result",
          "line": 756,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Failed to deserialize grounded RAG response.\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "kind": "loop-entry",
          "label": "var citation in groundedResult.Citations",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "foreach (var citation in groundedResult.Citations)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body",
          "kind": "loop-body",
          "label": "foreach (var citation in groundedResult.Citations)",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_mapping_760__linear",
          "kind": "statement",
          "label": "hydrate citation book titles",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "for each citation, map CitationId -> pointMap payload ebookId -> ebookTitles"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition",
          "kind": "condition",
          "label": "pointMap.TryGetValue(citation.CitationId, out var point",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (pointMap.TryGetValue(citation.CitationId, out var point) &&"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__true",
          "kind": "branch-true",
          "label": "true",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__false",
          "kind": "branch-false",
          "label": "false",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "kind": "statement",
          "label": "merge",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return",
          "kind": "return",
          "label": "Returns result",
          "line": 771,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(groundedResult);"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_773_askquestionasync_catch_773_61__catch",
          "kind": "catch",
          "label": "catch JsonException ex",
          "line": 773,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (JsonException ex)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_775_askquestionasync_log_775_62__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 775,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"[KnowledgeService] JSON deserialization failed for grounding response. Raw text: {Text}\", rawJson);"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return",
          "kind": "return",
          "label": "Returns result",
          "line": 776,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Failed to parse AI grounded response: {ex.Message}\");"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_779_error_handling_779__linear",
          "kind": "statement",
          "label": "wrap and return failures",
          "line": 779,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail with caused exception"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_779_askquestionasync_catch_779_64__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 779,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:io0xiq:askquestionasync__action_781_askquestionasync_return_781_65__return",
          "kind": "return",
          "label": "Returns result",
          "line": 781,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to execute RAG retrieval flow\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:io0xiq:askquestionasync__entry__method:io0xiq:askquestionasync__action_556_askquestionasync_try_556_0__try",
          "from": "method:io0xiq:askquestionasync__entry",
          "to": "method:io0xiq:askquestionasync__action_556_askquestionasync_try_556_0__try",
          "kind": "next",
          "line": 556,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:io0xiq:askquestionasync__action_556_askquestionasync_try_556_0__try__method:io0xiq:askquestionasync__action_559_askquestionasync_await_559_1__await",
          "from": "method:io0xiq:askquestionasync__action_556_askquestionasync_try_556_0__try",
          "to": "method:io0xiq:askquestionasync__action_559_askquestionasync_await_559_1__await",
          "kind": "next",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_559_askquestionasync_await_559_1__await__method:io0xiq:askquestionasync__action_559_external_call_559__linear",
          "from": "method:io0xiq:askquestionasync__action_559_askquestionasync_await_559_1__await",
          "to": "method:io0xiq:askquestionasync__action_559_external_call_559__linear",
          "kind": "next",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_559_external_call_559__linear__call_method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync",
          "from": "method:io0xiq:askquestionasync__action_559_external_call_559__linear",
          "to": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync",
          "kind": "call",
          "label": "question, Dimensions=768",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync__method:io0xiq:askquestionasync__action_560_askquestionasync_await_560_2__await",
          "from": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync",
          "to": "method:io0xiq:askquestionasync__action_560_askquestionasync_await_560_2__await",
          "kind": "next",
          "line": 560,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_560_askquestionasync_await_560_2__await__method:io0xiq:askquestionasync__action_568_build_filter_568__linear",
          "from": "method:io0xiq:askquestionasync__action_560_askquestionasync_await_560_2__await",
          "to": "method:io0xiq:askquestionasync__action_568_build_filter_568__linear",
          "kind": "next",
          "line": 568,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_568_build_filter_568__linear__method:io0xiq:askquestionasync__action_568_askquestionasync_external_call_568_3__linear",
          "from": "method:io0xiq:askquestionasync__action_568_build_filter_568__linear",
          "to": "method:io0xiq:askquestionasync__action_568_askquestionasync_external_call_568_3__linear",
          "kind": "next",
          "line": 568,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_568_askquestionasync_external_call_568_3__linear__method:io0xiq:askquestionasync__action_571_askquestionasync_external_call_571_4__linear",
          "from": "method:io0xiq:askquestionasync__action_568_askquestionasync_external_call_568_3__linear",
          "to": "method:io0xiq:askquestionasync__action_571_askquestionasync_external_call_571_4__linear",
          "kind": "next",
          "line": 571,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_571_askquestionasync_external_call_571_4__linear__method:io0xiq:askquestionasync__action_572_askquestionasync_external_call_572_5__linear",
          "from": "method:io0xiq:askquestionasync__action_571_askquestionasync_external_call_571_4__linear",
          "to": "method:io0xiq:askquestionasync__action_572_askquestionasync_external_call_572_5__linear",
          "kind": "next",
          "line": 572,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_572_askquestionasync_external_call_572_5__linear__method:io0xiq:askquestionasync__action_574_askquestionasync_external_call_574_6__linear",
          "from": "method:io0xiq:askquestionasync__action_572_askquestionasync_external_call_572_5__linear",
          "to": "method:io0xiq:askquestionasync__action_574_askquestionasync_external_call_574_6__linear",
          "kind": "next",
          "line": 574,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_574_askquestionasync_external_call_574_6__linear__method:io0xiq:askquestionasync__action_577_askquestionasync_external_call_577_7__linear",
          "from": "method:io0xiq:askquestionasync__action_574_askquestionasync_external_call_574_6__linear",
          "to": "method:io0xiq:askquestionasync__action_577_askquestionasync_external_call_577_7__linear",
          "kind": "next",
          "line": 577,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_577_askquestionasync_external_call_577_7__linear__method:io0xiq:askquestionasync__action_580_askquestionasync_external_call_580_8__linear",
          "from": "method:io0xiq:askquestionasync__action_577_askquestionasync_external_call_577_7__linear",
          "to": "method:io0xiq:askquestionasync__action_580_askquestionasync_external_call_580_8__linear",
          "kind": "next",
          "line": 580,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_580_askquestionasync_external_call_580_8__linear__method:io0xiq:askquestionasync__action_582_askquestionasync_external_call_582_9__linear",
          "from": "method:io0xiq:askquestionasync__action_580_askquestionasync_external_call_580_8__linear",
          "to": "method:io0xiq:askquestionasync__action_582_askquestionasync_external_call_582_9__linear",
          "kind": "next",
          "line": 582,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_582_askquestionasync_external_call_582_9__linear__method:io0xiq:askquestionasync__action_585_askquestionasync_external_call_585_10__linear",
          "from": "method:io0xiq:askquestionasync__action_582_askquestionasync_external_call_582_9__linear",
          "to": "method:io0xiq:askquestionasync__action_585_askquestionasync_external_call_585_10__linear",
          "kind": "next",
          "line": 585,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_585_askquestionasync_external_call_585_10__linear__method:io0xiq:askquestionasync__action_588_askquestionasync_external_call_588_11__linear",
          "from": "method:io0xiq:askquestionasync__action_585_askquestionasync_external_call_585_10__linear",
          "to": "method:io0xiq:askquestionasync__action_588_askquestionasync_external_call_588_11__linear",
          "kind": "next",
          "line": 588,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_588_askquestionasync_external_call_588_11__linear__method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition",
          "from": "method:io0xiq:askquestionasync__action_588_askquestionasync_external_call_588_11__linear",
          "to": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition",
          "kind": "next",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition__method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__true",
          "from": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition",
          "to": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__true",
          "kind": "condition-true",
          "label": "true",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition__method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__false",
          "from": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__condition",
          "to": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__false",
          "kind": "condition-false",
          "label": "false",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__true__method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "from": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__true",
          "to": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "kind": "next",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__false__method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "from": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__false",
          "to": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "kind": "next",
          "line": 590,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge__method:io0xiq:askquestionasync__action_592_askquestionasync_external_call_592_13__linear",
          "from": "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
          "to": "method:io0xiq:askquestionasync__action_592_askquestionasync_external_call_592_13__linear",
          "kind": "next",
          "line": 592,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_592_askquestionasync_external_call_592_13__linear__method:io0xiq:askquestionasync__action_594_askquestionasync_external_call_594_14__linear",
          "from": "method:io0xiq:askquestionasync__action_592_askquestionasync_external_call_592_13__linear",
          "to": "method:io0xiq:askquestionasync__action_594_askquestionasync_external_call_594_14__linear",
          "kind": "next",
          "line": 594,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_594_askquestionasync_external_call_594_14__linear__method:io0xiq:askquestionasync__action_597_askquestionasync_external_call_597_15__linear",
          "from": "method:io0xiq:askquestionasync__action_594_askquestionasync_external_call_594_14__linear",
          "to": "method:io0xiq:askquestionasync__action_597_askquestionasync_external_call_597_15__linear",
          "kind": "next",
          "line": 597,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_597_askquestionasync_external_call_597_15__linear__method:io0xiq:askquestionasync__action_602_askquestionasync_external_call_602_16__linear",
          "from": "method:io0xiq:askquestionasync__action_597_askquestionasync_external_call_597_15__linear",
          "to": "method:io0xiq:askquestionasync__action_602_askquestionasync_external_call_602_16__linear",
          "kind": "next",
          "line": 602,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_602_askquestionasync_external_call_602_16__linear__method:io0xiq:askquestionasync__action_603_askquestionasync_try_603_17__try",
          "from": "method:io0xiq:askquestionasync__action_602_askquestionasync_external_call_602_16__linear",
          "to": "method:io0xiq:askquestionasync__action_603_askquestionasync_try_603_17__try",
          "kind": "next",
          "line": 603,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:io0xiq:askquestionasync__action_603_askquestionasync_try_603_17__try__method:io0xiq:askquestionasync__action_605_askquestionasync_await_605_18__await",
          "from": "method:io0xiq:askquestionasync__action_603_askquestionasync_try_603_17__try",
          "to": "method:io0xiq:askquestionasync__action_605_askquestionasync_await_605_18__await",
          "kind": "next",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_605_askquestionasync_await_605_18__await__method:io0xiq:askquestionasync__action_605_external_call_605__linear",
          "from": "method:io0xiq:askquestionasync__action_605_askquestionasync_await_605_18__await",
          "to": "method:io0xiq:askquestionasync__action_605_external_call_605__linear",
          "kind": "next",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_605_external_call_605__linear__call_method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync",
          "from": "method:io0xiq:askquestionasync__action_605_external_call_605__linear",
          "to": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync",
          "kind": "call",
          "label": "collectionName 'knowledge_units', vector, filter, limit",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync__method:io0xiq:askquestionasync__action_614_askquestionasync_catch_614_19__catch",
          "from": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync",
          "to": "method:io0xiq:askquestionasync__action_614_askquestionasync_catch_614_19__catch",
          "kind": "exception",
          "line": 614,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_614_askquestionasync_catch_614_19__catch__method:io0xiq:askquestionasync__action_616_askquestionasync_log_616_20__linear",
          "from": "method:io0xiq:askquestionasync__action_614_askquestionasync_catch_614_19__catch",
          "to": "method:io0xiq:askquestionasync__action_616_askquestionasync_log_616_20__linear",
          "kind": "next",
          "line": 616,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:io0xiq:askquestionasync__action_616_askquestionasync_log_616_20__linear__method:io0xiq:askquestionasync__action_617_askquestionasync_external_call_617_21__linear",
          "from": "method:io0xiq:askquestionasync__action_616_askquestionasync_log_616_20__linear",
          "to": "method:io0xiq:askquestionasync__action_617_askquestionasync_external_call_617_21__linear",
          "kind": "next",
          "line": 617,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:io0xiq:askquestionasync__action_617_askquestionasync_external_call_617_21__linear__method:io0xiq:askquestionasync__action_620_guard_clause_620__condition",
          "from": "method:io0xiq:askquestionasync__action_617_askquestionasync_external_call_617_21__linear",
          "to": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition__method:io0xiq:askquestionasync__action_620_guard_clause_620__true",
          "from": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition",
          "to": "method:io0xiq:askquestionasync__action_620_guard_clause_620__true",
          "kind": "condition-true",
          "label": "true",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition__method:io0xiq:askquestionasync__action_620_guard_clause_620__false",
          "from": "method:io0xiq:askquestionasync__action_620_guard_clause_620__condition",
          "to": "method:io0xiq:askquestionasync__action_620_guard_clause_620__false",
          "kind": "condition-false",
          "label": "false",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__true__method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "from": "method:io0xiq:askquestionasync__action_620_guard_clause_620__true",
          "to": "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__false__method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "from": "method:io0xiq:askquestionasync__action_620_guard_clause_620__false",
          "to": "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge__method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition",
          "from": "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
          "to": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition__method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__true",
          "from": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition",
          "to": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__true",
          "kind": "condition-true",
          "label": "true",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition__method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__false",
          "from": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__condition",
          "to": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__false",
          "kind": "condition-false",
          "label": "false",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__true__method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "from": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__true",
          "to": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__false__method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "from": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__false",
          "to": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "kind": "next",
          "line": 620,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge__method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return",
          "from": "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
          "to": "method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return",
          "kind": "return",
          "line": 622,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return__method:io0xiq:askquestionasync__action_624_askquestionasync_repository_read_624_24__linear",
          "from": "method:io0xiq:askquestionasync__action_622_askquestionasync_return_622_23__return",
          "to": "method:io0xiq:askquestionasync__action_624_askquestionasync_repository_read_624_24__linear",
          "kind": "next",
          "line": 624,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_624_askquestionasync_repository_read_624_24__linear__method:io0xiq:askquestionasync__action_630_askquestionasync_mapping_630_25__linear",
          "from": "method:io0xiq:askquestionasync__action_624_askquestionasync_repository_read_624_24__linear",
          "to": "method:io0xiq:askquestionasync__action_630_askquestionasync_mapping_630_25__linear",
          "kind": "next",
          "line": 630,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:io0xiq:askquestionasync__action_630_askquestionasync_mapping_630_25__linear__method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition",
          "from": "method:io0xiq:askquestionasync__action_630_askquestionasync_mapping_630_25__linear",
          "to": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition",
          "kind": "next",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition__method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__true",
          "from": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition",
          "to": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__true",
          "kind": "condition-true",
          "label": "true",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition__method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__false",
          "from": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__condition",
          "to": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__false",
          "kind": "condition-false",
          "label": "false",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__true__method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "from": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__true",
          "to": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "kind": "next",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__false__method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "from": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__false",
          "to": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "kind": "next",
          "line": 636,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge__method:io0xiq:askquestionasync__action_638_askquestionasync_try_638_27__try",
          "from": "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
          "to": "method:io0xiq:askquestionasync__action_638_askquestionasync_try_638_27__try",
          "kind": "next",
          "line": 638,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:io0xiq:askquestionasync__action_638_askquestionasync_try_638_27__try__method:io0xiq:askquestionasync__action_640_askquestionasync_await_640_28__await",
          "from": "method:io0xiq:askquestionasync__action_638_askquestionasync_try_638_27__try",
          "to": "method:io0xiq:askquestionasync__action_640_askquestionasync_await_640_28__await",
          "kind": "next",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_640_askquestionasync_await_640_28__await__method:io0xiq:askquestionasync__action_640_graph_query_640__linear",
          "from": "method:io0xiq:askquestionasync__action_640_askquestionasync_await_640_28__await",
          "to": "method:io0xiq:askquestionasync__action_640_graph_query_640__linear",
          "kind": "next",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_640_graph_query_640__linear__call_method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession",
          "from": "method:io0xiq:askquestionasync__action_640_graph_query_640__linear",
          "to": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession",
          "kind": "call",
          "label": "open async Neo4j session for optional graph expansion",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession__method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return",
          "from": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession",
          "to": "method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return",
          "kind": "return",
          "line": 645,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return__method:io0xiq:askquestionasync__action_648_askquestionasync_await_648_30__await",
          "from": "method:io0xiq:askquestionasync__action_645_askquestionasync_return_645_29__return",
          "to": "method:io0xiq:askquestionasync__action_648_askquestionasync_await_648_30__await",
          "kind": "next",
          "line": 648,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_648_askquestionasync_await_648_30__await__call_method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync",
          "from": "method:io0xiq:askquestionasync__action_648_askquestionasync_await_648_30__await",
          "to": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync",
          "kind": "call",
          "label": "execute cypher to collect relations",
          "line": 648,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync__method:io0xiq:askquestionasync__action_650_askquestionasync_await_650_31__await",
          "from": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync",
          "to": "method:io0xiq:askquestionasync__action_650_askquestionasync_await_650_31__await",
          "kind": "next",
          "line": 650,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_650_askquestionasync_await_650_31__await__method:io0xiq:askquestionasync__action_651_askquestionasync_await_651_32__await",
          "from": "method:io0xiq:askquestionasync__action_650_askquestionasync_await_650_31__await",
          "to": "method:io0xiq:askquestionasync__action_651_askquestionasync_await_651_32__await",
          "kind": "next",
          "line": 651,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_651_askquestionasync_await_651_32__await__method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return",
          "from": "method:io0xiq:askquestionasync__action_651_askquestionasync_await_651_32__await",
          "to": "method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return",
          "kind": "return",
          "line": 651,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return__method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_651_askquestionasync_return_651_33__return",
          "to": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "kind": "next",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry__method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body",
          "from": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body",
          "kind": "loop-body",
          "label": "var record in neoResult",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body__method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body",
          "to": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry__method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_exit",
          "from": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 654,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_exit__method:io0xiq:askquestionasync__action_659_askquestionasync_repository_write_659_35__linear",
          "from": "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_exit",
          "to": "method:io0xiq:askquestionasync__action_659_askquestionasync_repository_write_659_35__linear",
          "kind": "next",
          "line": 659,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__action_659_askquestionasync_repository_write_659_35__linear__method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition",
          "from": "method:io0xiq:askquestionasync__action_659_askquestionasync_repository_write_659_35__linear",
          "to": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition",
          "kind": "next",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition__method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__true",
          "from": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition",
          "to": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__true",
          "kind": "condition-true",
          "label": "true",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition__method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__false",
          "from": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__condition",
          "to": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__false",
          "kind": "condition-false",
          "label": "false",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__true__method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "from": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__true",
          "to": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "kind": "next",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__false__method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "from": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__false",
          "to": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "kind": "next",
          "line": 662,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge__method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
          "to": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "kind": "next",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry__method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body",
          "from": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body",
          "kind": "loop-body",
          "label": "var relObj in relations",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body__method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body",
          "to": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry__method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_exit",
          "from": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 664,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_exit__method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition",
          "from": "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_exit",
          "to": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition",
          "kind": "next",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition__method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__true",
          "from": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition",
          "to": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__true",
          "kind": "condition-true",
          "label": "true",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition__method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__false",
          "from": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__condition",
          "to": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__false",
          "kind": "condition-false",
          "label": "false",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__true__method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "from": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__true",
          "to": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "kind": "next",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__false__method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "from": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__false",
          "to": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "kind": "next",
          "line": 671,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge__method:io0xiq:askquestionasync__action_673_askquestionasync_repository_write_673_39__linear",
          "from": "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
          "to": "method:io0xiq:askquestionasync__action_673_askquestionasync_repository_write_673_39__linear",
          "kind": "next",
          "line": 673,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__action_673_askquestionasync_repository_write_673_39__linear__method:io0xiq:askquestionasync__action_680_askquestionasync_catch_680_40__catch",
          "from": "method:io0xiq:askquestionasync__action_673_askquestionasync_repository_write_673_39__linear",
          "to": "method:io0xiq:askquestionasync__action_680_askquestionasync_catch_680_40__catch",
          "kind": "exception",
          "line": 680,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_680_askquestionasync_catch_680_40__catch__method:io0xiq:askquestionasync__action_682_askquestionasync_log_682_41__linear",
          "from": "method:io0xiq:askquestionasync__action_680_askquestionasync_catch_680_40__catch",
          "to": "method:io0xiq:askquestionasync__action_682_askquestionasync_log_682_41__linear",
          "kind": "next",
          "line": 682,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:io0xiq:askquestionasync__action_682_askquestionasync_log_682_41__linear__method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_682_askquestionasync_log_682_41__linear",
          "to": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "kind": "next",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry__method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body",
          "from": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body",
          "kind": "loop-body",
          "label": "var point in searchResult",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body__method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body",
          "to": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry__method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_exit",
          "from": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 683,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_exit__method:io0xiq:askquestionasync__action_687_askquestionasync_repository_write_687_43__linear",
          "from": "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_exit",
          "to": "method:io0xiq:askquestionasync__action_687_askquestionasync_repository_write_687_43__linear",
          "kind": "next",
          "line": 687,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__action_687_askquestionasync_repository_write_687_43__linear__method:io0xiq:askquestionasync__action_694_askquestionasync_repository_read_694_44__linear",
          "from": "method:io0xiq:askquestionasync__action_687_askquestionasync_repository_write_687_43__linear",
          "to": "method:io0xiq:askquestionasync__action_694_askquestionasync_repository_read_694_44__linear",
          "kind": "next",
          "line": 694,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_694_askquestionasync_repository_read_694_44__linear__method:io0xiq:askquestionasync__action_695_askquestionasync_mapping_695_45__linear",
          "from": "method:io0xiq:askquestionasync__action_694_askquestionasync_repository_read_694_44__linear",
          "to": "method:io0xiq:askquestionasync__action_695_askquestionasync_mapping_695_45__linear",
          "kind": "next",
          "line": 695,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:io0xiq:askquestionasync__action_695_askquestionasync_mapping_695_45__linear__method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition",
          "from": "method:io0xiq:askquestionasync__action_695_askquestionasync_mapping_695_45__linear",
          "to": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition",
          "kind": "next",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition__method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__true",
          "from": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition",
          "to": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__true",
          "kind": "condition-true",
          "label": "true",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition__method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__false",
          "from": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__condition",
          "to": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__false",
          "kind": "condition-false",
          "label": "false",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__true__method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "from": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__true",
          "to": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "kind": "next",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__false__method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "from": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__false",
          "to": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "kind": "next",
          "line": 700,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge__method:io0xiq:askquestionasync__action_702_askquestionasync_await_702_47__await",
          "from": "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
          "to": "method:io0xiq:askquestionasync__action_702_askquestionasync_await_702_47__await",
          "kind": "next",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_702_askquestionasync_await_702_47__await__method:io0xiq:askquestionasync__action_702_persistence_read_702__linear",
          "from": "method:io0xiq:askquestionasync__action_702_askquestionasync_await_702_47__await",
          "to": "method:io0xiq:askquestionasync__action_702_persistence_read_702__linear",
          "kind": "next",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_702_persistence_read_702__linear__call_method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync",
          "from": "method:io0xiq:askquestionasync__action_702_persistence_read_702__linear",
          "to": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync__method:io0xiq:askquestionasync__action_703_askquestionasync_await_703_48__await",
          "from": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync",
          "to": "method:io0xiq:askquestionasync__action_703_askquestionasync_await_703_48__await",
          "kind": "next",
          "line": 703,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_703_askquestionasync_await_703_48__await__method:io0xiq:askquestionasync__action_704_askquestionasync_repository_read_704_49__linear",
          "from": "method:io0xiq:askquestionasync__action_703_askquestionasync_await_703_48__await",
          "to": "method:io0xiq:askquestionasync__action_704_askquestionasync_repository_read_704_49__linear",
          "kind": "next",
          "line": 704,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_704_askquestionasync_repository_read_704_49__linear__method:io0xiq:askquestionasync__action_711_prompt_build_711__linear",
          "from": "method:io0xiq:askquestionasync__action_704_askquestionasync_repository_read_704_49__linear",
          "to": "method:io0xiq:askquestionasync__action_711_prompt_build_711__linear",
          "kind": "next",
          "line": 711,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_711_prompt_build_711__linear__method:io0xiq:askquestionasync__action_715_askquestionasync_repository_read_715_50__linear",
          "from": "method:io0xiq:askquestionasync__action_711_prompt_build_711__linear",
          "to": "method:io0xiq:askquestionasync__action_715_askquestionasync_repository_read_715_50__linear",
          "kind": "next",
          "line": 715,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_715_askquestionasync_repository_read_715_50__linear__method:io0xiq:askquestionasync__action_716_askquestionasync_repository_read_716_51__linear",
          "from": "method:io0xiq:askquestionasync__action_715_askquestionasync_repository_read_715_50__linear",
          "to": "method:io0xiq:askquestionasync__action_716_askquestionasync_repository_read_716_51__linear",
          "kind": "next",
          "line": 716,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_716_askquestionasync_repository_read_716_51__linear__method:io0xiq:askquestionasync__action_717_askquestionasync_repository_read_717_52__linear",
          "from": "method:io0xiq:askquestionasync__action_716_askquestionasync_repository_read_716_51__linear",
          "to": "method:io0xiq:askquestionasync__action_717_askquestionasync_repository_read_717_52__linear",
          "kind": "next",
          "line": 717,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_717_askquestionasync_repository_read_717_52__linear__method:io0xiq:askquestionasync__action_740_askquestionasync_await_740_53__await",
          "from": "method:io0xiq:askquestionasync__action_717_askquestionasync_repository_read_717_52__linear",
          "to": "method:io0xiq:askquestionasync__action_740_askquestionasync_await_740_53__await",
          "kind": "next",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_askquestionasync_await_740_53__await__method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_740_askquestionasync_await_740_53__await",
          "to": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "kind": "next",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry__method:io0xiq:askquestionasync__action_740_retry_740__loop_body",
          "from": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_740_retry_740__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_body__method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_740_retry_740__loop_body",
          "to": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry__method:io0xiq:askquestionasync__action_740_retry_740__loop_exit",
          "from": "method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_740_retry_740__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_740_retry_740__loop_exit__call_method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync",
          "from": "method:io0xiq:askquestionasync__action_740_retry_740__loop_exit",
          "to": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync",
          "kind": "call",
          "label": "calls _chatClient.GetResponseAsync with system and user prompts and ChatOptions (ResponseFormat.Json)",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync__method:io0xiq:askquestionasync__action_741_askquestionasync_await_741_54__await",
          "from": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync",
          "to": "method:io0xiq:askquestionasync__action_741_askquestionasync_await_741_54__await",
          "kind": "next",
          "line": 741,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:io0xiq:askquestionasync__action_741_askquestionasync_await_741_54__await__method:io0xiq:askquestionasync__action_749_text_cleanup_749__linear",
          "from": "method:io0xiq:askquestionasync__action_741_askquestionasync_await_741_54__await",
          "to": "method:io0xiq:askquestionasync__action_749_text_cleanup_749__linear",
          "kind": "next",
          "line": 749,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_749_text_cleanup_749__linear__call_method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair",
          "from": "method:io0xiq:askquestionasync__action_749_text_cleanup_749__linear",
          "to": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair",
          "kind": "call",
          "label": "rawJson",
          "line": 749,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair__method:io0xiq:askquestionasync__action_751_askquestionasync_try_751_55__try",
          "from": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair",
          "to": "method:io0xiq:askquestionasync__action_751_askquestionasync_try_751_55__try",
          "kind": "next",
          "line": 751,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:io0xiq:askquestionasync__action_751_askquestionasync_try_751_55__try__method:io0xiq:askquestionasync__action_753_json_deserialize_753__linear",
          "from": "method:io0xiq:askquestionasync__action_751_askquestionasync_try_751_55__try",
          "to": "method:io0xiq:askquestionasync__action_753_json_deserialize_753__linear",
          "kind": "next",
          "line": 753,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_753_json_deserialize_753__linear__call_method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto_",
          "from": "method:io0xiq:askquestionasync__action_753_json_deserialize_753__linear",
          "to": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto_",
          "kind": "call",
          "label": "rawJson",
          "line": 753,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto___method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition",
          "from": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto_",
          "to": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition",
          "kind": "next",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition__method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__true",
          "from": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition",
          "to": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__true",
          "kind": "condition-true",
          "label": "true",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition__method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__false",
          "from": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__condition",
          "to": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__false",
          "kind": "condition-false",
          "label": "false",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__true__method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "from": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__true",
          "to": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "kind": "next",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__false__method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "from": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__false",
          "to": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "kind": "next",
          "line": 754,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge__method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return",
          "from": "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
          "to": "method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return",
          "kind": "return",
          "line": 756,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return__method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_756_askquestionasync_return_756_57__return",
          "to": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "kind": "next",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry__method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body",
          "from": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body",
          "kind": "loop-body",
          "label": "var citation in groundedResult.Citations",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body__method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "from": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body",
          "to": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry__method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_exit",
          "from": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry",
          "to": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_exit__method:io0xiq:askquestionasync__action_760_mapping_760__linear",
          "from": "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_exit",
          "to": "method:io0xiq:askquestionasync__action_760_mapping_760__linear",
          "kind": "next",
          "line": 760,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_760_mapping_760__linear__method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition",
          "from": "method:io0xiq:askquestionasync__action_760_mapping_760__linear",
          "to": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition",
          "kind": "next",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition__method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__true",
          "from": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition",
          "to": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__true",
          "kind": "condition-true",
          "label": "true",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition__method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__false",
          "from": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__condition",
          "to": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__false",
          "kind": "condition-false",
          "label": "false",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__true__method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "from": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__true",
          "to": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "kind": "next",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__false__method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "from": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__false",
          "to": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "kind": "next",
          "line": 762,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge__method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return",
          "from": "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge",
          "to": "method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return",
          "kind": "return",
          "line": 771,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return__method:io0xiq:askquestionasync__action_773_askquestionasync_catch_773_61__catch",
          "from": "method:io0xiq:askquestionasync__action_771_askquestionasync_return_771_60__return",
          "to": "method:io0xiq:askquestionasync__action_773_askquestionasync_catch_773_61__catch",
          "kind": "exception",
          "line": 773,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_773_askquestionasync_catch_773_61__catch__method:io0xiq:askquestionasync__action_775_askquestionasync_log_775_62__linear",
          "from": "method:io0xiq:askquestionasync__action_773_askquestionasync_catch_773_61__catch",
          "to": "method:io0xiq:askquestionasync__action_775_askquestionasync_log_775_62__linear",
          "kind": "next",
          "line": 775,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:io0xiq:askquestionasync__action_775_askquestionasync_log_775_62__linear__method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return",
          "from": "method:io0xiq:askquestionasync__action_775_askquestionasync_log_775_62__linear",
          "to": "method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return",
          "kind": "return",
          "line": 776,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return__method:io0xiq:askquestionasync__action_779_error_handling_779__linear",
          "from": "method:io0xiq:askquestionasync__action_776_askquestionasync_return_776_63__return",
          "to": "method:io0xiq:askquestionasync__action_779_error_handling_779__linear",
          "kind": "next",
          "line": 779,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:io0xiq:askquestionasync__action_779_error_handling_779__linear__method:io0xiq:askquestionasync__action_779_askquestionasync_catch_779_64__catch",
          "from": "method:io0xiq:askquestionasync__action_779_error_handling_779__linear",
          "to": "method:io0xiq:askquestionasync__action_779_askquestionasync_catch_779_64__catch",
          "kind": "exception",
          "line": 779,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:io0xiq:askquestionasync__action_779_askquestionasync_catch_779_64__catch__method:io0xiq:askquestionasync__action_781_askquestionasync_return_781_65__return",
          "from": "method:io0xiq:askquestionasync__action_779_askquestionasync_catch_779_64__catch",
          "to": "method:io0xiq:askquestionasync__action_781_askquestionasync_return_781_65__return",
          "kind": "return",
          "line": 781,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync__jump_unknown_IEmbeddingGenerator_GenerateAsync",
          "fromNodeId": "method:io0xiq:askquestionasync__call_559_IEmbeddingGenerator_GenerateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IEmbeddingGenerator.GenerateAsync",
          "line": 559,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IEmbeddingGenerator.GenerateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync__jump_unknown_QdrantClient_SearchAsync",
          "fromNodeId": "method:io0xiq:askquestionasync__call_605_QdrantClient_SearchAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QdrantClient.SearchAsync",
          "line": 605,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target QdrantClient.SearchAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession__jump_unknown_IDriver_AsyncSession",
          "fromNodeId": "method:io0xiq:askquestionasync__call_640_IDriver_AsyncSession",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDriver.AsyncSession",
          "line": 640,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDriver.AsyncSession in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync__jump_unknown_session_ExecuteReadAsync",
          "fromNodeId": "method:io0xiq:askquestionasync__call_648_session_ExecuteReadAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "session.ExecuteReadAsync",
          "line": 648,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target session.ExecuteReadAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync__jump_unknown_IDbContextFactory_CreateDbContextAsync",
          "fromNodeId": "method:io0xiq:askquestionasync__call_702_IDbContextFactory_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory.CreateDbContextAsync",
          "line": 702,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDbContextFactory.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync__jump_unknown_ResiliencePipeline_ExecuteAsync",
          "fromNodeId": "method:io0xiq:askquestionasync__call_740_ResiliencePipeline_ExecuteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ResiliencePipeline.ExecuteAsync",
          "line": 740,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target ResiliencePipeline.ExecuteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair__jump_NexusReader_Infrastructure_Helpers_JsonRepairHelper_cs_JsonRepairHelper_Repair",
          "fromNodeId": "method:io0xiq:askquestionasync__call_749_JsonRepairHelper_Repair",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "targetHint": "JsonRepairHelper.Repair",
          "line": 749,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonRepairHelper.Repair in NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto___jump_unknown_JsonSerializer_Deserialize_GroundedResponseDto_",
          "fromNodeId": "method:io0xiq:askquestionasync__call_753_JsonSerializer_Deserialize_GroundedResponseDto_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "JsonSerializer.Deserialize<GroundedResponseDto>",
          "line": 753,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target JsonSerializer.Deserialize<GroundedResponseDto> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_body__method:io0xiq:askquestionasync__action_654_askquestionasync_loop_654_34__loop_entry",
        "method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_body__method:io0xiq:askquestionasync__action_664_askquestionasync_loop_664_37__loop_entry",
        "method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_body__method:io0xiq:askquestionasync__action_683_askquestionasync_loop_683_42__loop_entry",
        "method:io0xiq:askquestionasync__action_740_retry_740__loop_body__method:io0xiq:askquestionasync__action_740_retry_740__loop_entry",
        "method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_body__method:io0xiq:askquestionasync__action_760_askquestionasync_loop_760_58__loop_entry"
      ],
      "mergeNodeIds": [
        "method:io0xiq:askquestionasync__action_590_askquestionasync_branch_590_12__merge",
        "method:io0xiq:askquestionasync__action_620_guard_clause_620__merge",
        "method:io0xiq:askquestionasync__action_620_askquestionasync_branch_620_22__merge",
        "method:io0xiq:askquestionasync__action_636_askquestionasync_branch_636_26__merge",
        "method:io0xiq:askquestionasync__action_662_askquestionasync_branch_662_36__merge",
        "method:io0xiq:askquestionasync__action_671_askquestionasync_branch_671_38__merge",
        "method:io0xiq:askquestionasync__action_700_askquestionasync_branch_700_46__merge",
        "method:io0xiq:askquestionasync__action_754_askquestionasync_branch_754_56__merge",
        "method:io0xiq:askquestionasync__action_762_askquestionasync_branch_762_59__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 549,
        "end": 783
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 549,
          "summary": "Control-flow fragment extracted for method AskQuestionAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10r1sy2:clearcacheasync__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:10r1sy2:clearcacheasync",
      "ownerSymbolName": "ClearCacheAsync",
      "entryNodeId": "method:10r1sy2:clearcacheasync__entry",
      "exitNodeIds": [
        "method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return",
        "method:10r1sy2:clearcacheasync__action_797_clearcacheasync_return_797_7__return"
      ],
      "nodes": [
        {
          "id": "method:10r1sy2:clearcacheasync__entry",
          "kind": "entry",
          "label": "ClearCacheAsync entry",
          "line": 785,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Deletes all entries from SemanticKnowledgeCache, KnowledgeUnits and KnowledgeUnitLinks tables"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_787_clearcacheasync_await_787_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 787,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "IDbContextFactory.CreateDbContextAsync",
          "line": 787,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "cancellationToken"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_788_clearcacheasync_try_788_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 788,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_790_clearcacheasync_await_790_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await dbContext.SemanticKnowledgeCache.ExecuteDeleteAsync(cancellationToken);"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_790_persistence_delete_790__linear",
          "kind": "statement",
          "label": "clear cache tables",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "executes deletes on SemanticKnowledgeCache, KnowledgeUnits and KnowledgeUnitLinks"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "DbSet.ExecuteDeleteAsync",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "deletes SemanticKnowledgeCache"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_791_clearcacheasync_await_791_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 791,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await dbContext.KnowledgeUnits.ExecuteDeleteAsync(cancellationToken);"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "DbSet.ExecuteDeleteAsync",
          "line": 791,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "deletes KnowledgeUnits"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_792_clearcacheasync_await_792_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 792,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81,
          "detail": "await dbContext.KnowledgeUnitLinks.ExecuteDeleteAsync(cancellationToken);"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "DbSet.ExecuteDeleteAsync",
          "line": 792,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "deletes KnowledgeUnitLinks"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 793,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_795_error_handling_795__linear",
          "kind": "statement",
          "label": "wrap exceptions",
          "line": 795,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns Result.Fail with caused exception on failure"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_795_clearcacheasync_catch_795_6__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 795,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_797_clearcacheasync_return_797_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 797,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Failed to clear knowledge cache\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:10r1sy2:clearcacheasync__entry__method:10r1sy2:clearcacheasync__action_787_clearcacheasync_await_787_0__await",
          "from": "method:10r1sy2:clearcacheasync__entry",
          "to": "method:10r1sy2:clearcacheasync__action_787_clearcacheasync_await_787_0__await",
          "kind": "next",
          "line": 787,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_787_clearcacheasync_await_787_0__await__call_method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync",
          "from": "method:10r1sy2:clearcacheasync__action_787_clearcacheasync_await_787_0__await",
          "to": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync",
          "kind": "call",
          "label": "cancellationToken",
          "line": 787,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync__method:10r1sy2:clearcacheasync__action_788_clearcacheasync_try_788_1__try",
          "from": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync",
          "to": "method:10r1sy2:clearcacheasync__action_788_clearcacheasync_try_788_1__try",
          "kind": "next",
          "line": 788,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_788_clearcacheasync_try_788_1__try__method:10r1sy2:clearcacheasync__action_790_clearcacheasync_await_790_2__await",
          "from": "method:10r1sy2:clearcacheasync__action_788_clearcacheasync_try_788_1__try",
          "to": "method:10r1sy2:clearcacheasync__action_790_clearcacheasync_await_790_2__await",
          "kind": "next",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_790_clearcacheasync_await_790_2__await__method:10r1sy2:clearcacheasync__action_790_persistence_delete_790__linear",
          "from": "method:10r1sy2:clearcacheasync__action_790_clearcacheasync_await_790_2__await",
          "to": "method:10r1sy2:clearcacheasync__action_790_persistence_delete_790__linear",
          "kind": "next",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_790_persistence_delete_790__linear__call_method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync",
          "from": "method:10r1sy2:clearcacheasync__action_790_persistence_delete_790__linear",
          "to": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "deletes SemanticKnowledgeCache",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync__method:10r1sy2:clearcacheasync__action_791_clearcacheasync_await_791_3__await",
          "from": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync",
          "to": "method:10r1sy2:clearcacheasync__action_791_clearcacheasync_await_791_3__await",
          "kind": "next",
          "line": 791,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_791_clearcacheasync_await_791_3__await__call_method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync",
          "from": "method:10r1sy2:clearcacheasync__action_791_clearcacheasync_await_791_3__await",
          "to": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "deletes KnowledgeUnits",
          "line": 791,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync__method:10r1sy2:clearcacheasync__action_792_clearcacheasync_await_792_4__await",
          "from": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync",
          "to": "method:10r1sy2:clearcacheasync__action_792_clearcacheasync_await_792_4__await",
          "kind": "next",
          "line": 792,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_792_clearcacheasync_await_792_4__await__call_method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync",
          "from": "method:10r1sy2:clearcacheasync__action_792_clearcacheasync_await_792_4__await",
          "to": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync",
          "kind": "call",
          "label": "deletes KnowledgeUnitLinks",
          "line": 792,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync__method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return",
          "from": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync",
          "to": "method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return",
          "kind": "return",
          "line": 793,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return__method:10r1sy2:clearcacheasync__action_795_error_handling_795__linear",
          "from": "method:10r1sy2:clearcacheasync__action_793_clearcacheasync_return_793_5__return",
          "to": "method:10r1sy2:clearcacheasync__action_795_error_handling_795__linear",
          "kind": "next",
          "line": 795,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_795_error_handling_795__linear__method:10r1sy2:clearcacheasync__action_795_clearcacheasync_catch_795_6__catch",
          "from": "method:10r1sy2:clearcacheasync__action_795_error_handling_795__linear",
          "to": "method:10r1sy2:clearcacheasync__action_795_clearcacheasync_catch_795_6__catch",
          "kind": "exception",
          "line": 795,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:10r1sy2:clearcacheasync__action_795_clearcacheasync_catch_795_6__catch__method:10r1sy2:clearcacheasync__action_797_clearcacheasync_return_797_7__return",
          "from": "method:10r1sy2:clearcacheasync__action_795_clearcacheasync_catch_795_6__catch",
          "to": "method:10r1sy2:clearcacheasync__action_797_clearcacheasync_return_797_7__return",
          "kind": "return",
          "line": 797,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync__jump_unknown_IDbContextFactory_CreateDbContextAsync",
          "fromNodeId": "method:10r1sy2:clearcacheasync__call_787_IDbContextFactory_CreateDbContextAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IDbContextFactory.CreateDbContextAsync",
          "line": 787,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target IDbContextFactory.CreateDbContextAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync__jump_unknown_DbSet_ExecuteDeleteAsync",
          "fromNodeId": "method:10r1sy2:clearcacheasync__call_790_DbSet_ExecuteDeleteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "DbSet.ExecuteDeleteAsync",
          "line": 790,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target DbSet.ExecuteDeleteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync__jump_unknown_DbSet_ExecuteDeleteAsync",
          "fromNodeId": "method:10r1sy2:clearcacheasync__call_791_DbSet_ExecuteDeleteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "DbSet.ExecuteDeleteAsync",
          "line": 791,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target DbSet.ExecuteDeleteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync__jump_unknown_DbSet_ExecuteDeleteAsync",
          "fromNodeId": "method:10r1sy2:clearcacheasync__call_792_DbSet_ExecuteDeleteAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "DbSet.ExecuteDeleteAsync",
          "line": 792,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target DbSet.ExecuteDeleteAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.9199999999999999,
      "lineSpan": {
        "start": 785,
        "end": 799
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 785,
          "summary": "Control-flow fragment extracted for method ClearCacheAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1l8c2eg:estimatetokencount__fragment",
      "ownerFileId": "file:27eki7:knowledgeservice-cs",
      "ownerSymbolId": "method:1l8c2eg:estimatetokencount",
      "ownerSymbolName": "EstimateTokenCount",
      "entryNodeId": "method:1l8c2eg:estimatetokencount__entry",
      "exitNodeIds": [
        "method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return",
        "method:1l8c2eg:estimatetokencount__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1l8c2eg:estimatetokencount__entry",
          "kind": "entry",
          "label": "EstimateTokenCount entry",
          "line": 801,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Estimates token count for a string using configured tokenizer"
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(text)",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(text)) return 0;"
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(text)",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__true",
          "kind": "branch-true",
          "label": "0",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "kind": "statement",
          "label": "merge",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return _tokenizer.CountTokens(text);"
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_804_compute_804__linear",
          "kind": "statement",
          "label": "count tokens",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7,
          "detail": "returns _tokenizer.CountTokens(text)"
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens",
          "kind": "call",
          "label": "Tokenizer.CountTokens",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88,
          "detail": "text"
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 805,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1l8c2eg:estimatetokencount__entry__method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition",
          "from": "method:1l8c2eg:estimatetokencount__entry",
          "to": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition__method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__true",
          "from": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition",
          "to": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition__method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__false",
          "from": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__condition",
          "to": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__true__method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "from": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__true",
          "to": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__false__method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "from": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__false",
          "to": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge__method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition",
          "from": "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
          "to": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition__method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__true",
          "from": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition",
          "to": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__true",
          "kind": "condition-true",
          "label": "0",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition__method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__false",
          "from": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__condition",
          "to": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__true__method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "from": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__true",
          "to": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__false__method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "from": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__false",
          "to": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "kind": "next",
          "line": 803,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge__method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return",
          "from": "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge",
          "to": "method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return",
          "kind": "return",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return__method:1l8c2eg:estimatetokencount__action_804_compute_804__linear",
          "from": "method:1l8c2eg:estimatetokencount__action_804_estimatetokencount_return_804_1__return",
          "to": "method:1l8c2eg:estimatetokencount__action_804_compute_804__linear",
          "kind": "next",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__action_804_compute_804__linear__call_method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens",
          "from": "method:1l8c2eg:estimatetokencount__action_804_compute_804__linear",
          "to": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens",
          "kind": "call",
          "label": "text",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens__implicit_return",
          "from": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens",
          "to": "method:1l8c2eg:estimatetokencount__implicit_return",
          "kind": "return",
          "line": 805,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens__jump_NexusReader_Infrastructure_Services_KnowledgeService_cs_Tokenizer_CountTokens",
          "fromNodeId": "method:1l8c2eg:estimatetokencount__call_804_Tokenizer_CountTokens",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "targetHint": "Tokenizer.CountTokens",
          "line": 804,
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Call target Tokenizer.CountTokens in NexusReader.Infrastructure/Services/KnowledgeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1l8c2eg:estimatetokencount__action_803_estimatetokencount_guard_clause_803_0__merge",
        "method:1l8c2eg:estimatetokencount__action_803_guard_clause_803__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 801,
        "end": 805
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "line": 801,
          "summary": "Control-flow fragment extracted for method EstimateTokenCount.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1b26w2r:app__fragment",
      "ownerFileId": "file:62lucr:app-xaml-cs",
      "ownerSymbolId": "method:1b26w2r:app",
      "ownerSymbolName": "App",
      "entryNodeId": "method:1b26w2r:app__entry",
      "exitNodeIds": [
        "method:1b26w2r:app__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1b26w2r:app__entry",
          "kind": "entry",
          "label": "App entry",
          "line": 5,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.99,
          "detail": "Application constructor: initializes XAML components and sets the app's MainPage."
        },
        {
          "id": "method:1b26w2r:app__action_7_initialization_7__linear",
          "kind": "statement",
          "label": "Initialize XAML components",
          "line": 7,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.7,
          "detail": "Calls InitializeComponent() to load XAML-defined UI"
        },
        {
          "id": "method:1b26w2r:app__call_7_InitializeComponent",
          "kind": "call",
          "label": "InitializeComponent",
          "line": 7,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1b26w2r:app__action_9_property_set_9__linear",
          "kind": "statement",
          "label": "Set MainPage",
          "line": 9,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.7,
          "detail": "Creates new MainPage() and assigns it to MainPage property to set the root UI"
        },
        {
          "id": "method:1b26w2r:app__call_9_MainPage_ctor_",
          "kind": "call",
          "label": "MainPage (ctor)",
          "line": 9,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.88,
          "detail": "none; resulting instance assigned to Application.MainPage"
        },
        {
          "id": "method:1b26w2r:app__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1b26w2r:app__entry__method:1b26w2r:app__action_7_initialization_7__linear",
          "from": "method:1b26w2r:app__entry",
          "to": "method:1b26w2r:app__action_7_initialization_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b26w2r:app__action_7_initialization_7__linear__call_method:1b26w2r:app__call_7_InitializeComponent",
          "from": "method:1b26w2r:app__action_7_initialization_7__linear",
          "to": "method:1b26w2r:app__call_7_InitializeComponent",
          "kind": "call",
          "label": "none",
          "line": 7,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1b26w2r:app__call_7_InitializeComponent__method:1b26w2r:app__action_9_property_set_9__linear",
          "from": "method:1b26w2r:app__call_7_InitializeComponent",
          "to": "method:1b26w2r:app__action_9_property_set_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b26w2r:app__action_9_property_set_9__linear__call_method:1b26w2r:app__call_9_MainPage_ctor_",
          "from": "method:1b26w2r:app__action_9_property_set_9__linear",
          "to": "method:1b26w2r:app__call_9_MainPage_ctor_",
          "kind": "call",
          "label": "none; resulting instance assigned to Application.MainPage",
          "line": 9,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1b26w2r:app__call_9_MainPage_ctor___implicit_return",
          "from": "method:1b26w2r:app__call_9_MainPage_ctor_",
          "to": "method:1b26w2r:app__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1b26w2r:app__call_7_InitializeComponent__jump_NexusReader_Maui_App_xaml_cs_InitializeComponent",
          "fromNodeId": "method:1b26w2r:app__call_7_InitializeComponent",
          "kind": "call-target",
          "targetPath": "NexusReader.Maui/App.xaml.cs",
          "targetHint": "InitializeComponent",
          "line": 7,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "reason": "Call target InitializeComponent in NexusReader.Maui/App.xaml.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1b26w2r:app__call_9_MainPage_ctor___jump_MainPage_xaml_cs_MainPage_ctor_",
          "fromNodeId": "method:1b26w2r:app__call_9_MainPage_ctor_",
          "kind": "call-target",
          "targetPath": "MainPage.xaml.cs",
          "targetHint": "MainPage (ctor)",
          "line": 9,
          "sourcePath": "NexusReader.Maui/App.xaml.cs",
          "reason": "Call target MainPage (ctor) in MainPage.xaml.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.75,
      "lineSpan": {
        "start": 5,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/App.xaml.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method App.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6gridz:mainpage__fragment",
      "ownerFileId": "file:ua9rra:mainpage-xaml-cs",
      "ownerSymbolId": "method:6gridz:mainpage",
      "ownerSymbolName": "MainPage",
      "entryNodeId": "method:6gridz:mainpage__entry",
      "exitNodeIds": [
        "method:6gridz:mainpage__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:6gridz:mainpage__entry",
          "kind": "entry",
          "label": "MainPage entry",
          "line": 5,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.99,
          "detail": "Constructs the page and initializes the XAML view via InitializeComponent."
        },
        {
          "id": "method:6gridz:mainpage__action_7_call_7__linear",
          "kind": "statement",
          "label": "Initialize XAML components",
          "line": 7,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.7,
          "detail": "Calls InitializeComponent() to load XAML UI and wire up named controls/events"
        },
        {
          "id": "method:6gridz:mainpage__call_7_InitializeComponent",
          "kind": "call",
          "label": "InitializeComponent",
          "line": 7,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:6gridz:mainpage__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:6gridz:mainpage__entry__method:6gridz:mainpage__action_7_call_7__linear",
          "from": "method:6gridz:mainpage__entry",
          "to": "method:6gridz:mainpage__action_7_call_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6gridz:mainpage__action_7_call_7__linear__call_method:6gridz:mainpage__call_7_InitializeComponent",
          "from": "method:6gridz:mainpage__action_7_call_7__linear",
          "to": "method:6gridz:mainpage__call_7_InitializeComponent",
          "kind": "call",
          "label": "none",
          "line": 7,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.88
        },
        {
          "id": "method:6gridz:mainpage__call_7_InitializeComponent__implicit_return",
          "from": "method:6gridz:mainpage__call_7_InitializeComponent",
          "to": "method:6gridz:mainpage__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:6gridz:mainpage__call_7_InitializeComponent__jump_NexusReader_Maui_MainPage_xaml_cs_InitializeComponent",
          "fromNodeId": "method:6gridz:mainpage__call_7_InitializeComponent",
          "kind": "call-target",
          "targetPath": "NexusReader.Maui/MainPage.xaml.cs",
          "targetHint": "InitializeComponent",
          "line": 7,
          "sourcePath": "NexusReader.Maui/MainPage.xaml.cs",
          "reason": "Call target InitializeComponent in NexusReader.Maui/MainPage.xaml.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 5,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/MainPage.xaml.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method MainPage.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:hh1uha:createmauiapp__fragment",
      "ownerFileId": "file:1uay25w:mauiprogram-cs",
      "ownerSymbolId": "method:hh1uha:createmauiapp",
      "ownerSymbolName": "CreateMauiApp",
      "entryNodeId": "method:hh1uha:createmauiapp__entry",
      "exitNodeIds": [
        "method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return",
        "method:hh1uha:createmauiapp__action_57_return_57__return",
        "method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw"
      ],
      "nodes": [
        {
          "id": "method:hh1uha:createmauiapp__entry",
          "kind": "entry",
          "label": "CreateMauiApp entry",
          "line": 12,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.99,
          "detail": "Create and configure the MAUI app builder, register application and platform services, configure debugging tools in DEBUG, and build/return the app; catches startup exceptions and rethrows after logging."
        },
        {
          "id": "method:hh1uha:createmauiapp__action_14_try_catch_14__linear",
          "kind": "statement",
          "label": "Catch startup exceptions, log to Debug and rethrow",
          "line": 14,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "catch (Exception ex) { Debug.WriteLine(...); throw; }"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_14_createmauiapp_try_14_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 14,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_16_create_16__linear",
          "kind": "statement",
          "label": "Create builder",
          "line": 16,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "var builder = MauiApp.CreateBuilder() - creates MAUI host builder"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_22_compile_time_conditional_22__linear",
          "kind": "statement",
          "label": "DEBUG-only tooling and logging",
          "line": 22,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "#if DEBUG region enabling Blazor dev tools and debug logging"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_28_service_registration_28__linear",
          "kind": "statement",
          "label": "Register platform and infrastructure singletons",
          "line": 28,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "AddSingleton<IPlatformService, MauiPlatformService>(), AddSingleton<INativeStorageService, MauiStorageService>()"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_32_service_registration_32__linear",
          "kind": "statement",
          "label": "Register scoped identity services and auth provider",
          "line": 32,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "AddScoped<NexusAuthenticationStateProvider>(), AddScoped<AuthenticationStateProvider>(sp => sp.GetRequiredService<NexusAuthenticationStateProvider>()), AddAuthorizationCore()"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_38_service_registration_38__linear",
          "kind": "statement",
          "label": "Register network HttpClient with BaseAddress",
          "line": 38,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "AddScoped(sp => new HttpClient { BaseAddress = new Uri(\"http://10.0.2.2:5000\") })"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_41_service_registration_41__linear",
          "kind": "statement",
          "label": "Register UI state and feature services (scoped)",
          "line": 41,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "AddScoped for IThemeService, IFocusModeService, IQuizStateService, IReaderNavigationService, IKnowledgeGraphService, IReaderInteractionService, KnowledgeCoordinator, ISyncService, IIdentityService"
        },
        {
          "id": "method:hh1uha:createmauiapp__call_51_AddApplication",
          "kind": "call",
          "label": "AddApplication",
          "line": 51,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.88,
          "detail": "IServiceCollection extension call to register application services"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_53_library_integration_53__linear",
          "kind": "statement",
          "label": "Register MediatR handlers from application assembly",
          "line": 53,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(...))"
        },
        {
          "id": "method:hh1uha:createmauiapp__call_54_Assembly",
          "kind": "call",
          "label": "Assembly",
          "line": 54,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.88,
          "detail": "Assembly reference passed into MediatR registration"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 57,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "return builder.Build();"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_57_return_57__return",
          "kind": "return",
          "label": "Build and return app",
          "line": 57,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7,
          "detail": "return builder.Build()"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_59_createmauiapp_catch_59_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 59,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 63,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.9,
          "detail": "throw;"
        }
      ],
      "edges": [
        {
          "id": "method:hh1uha:createmauiapp__entry__method:hh1uha:createmauiapp__action_14_try_catch_14__linear",
          "from": "method:hh1uha:createmauiapp__entry",
          "to": "method:hh1uha:createmauiapp__action_14_try_catch_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_14_try_catch_14__linear__method:hh1uha:createmauiapp__action_14_createmauiapp_try_14_0__try",
          "from": "method:hh1uha:createmauiapp__action_14_try_catch_14__linear",
          "to": "method:hh1uha:createmauiapp__action_14_createmauiapp_try_14_0__try",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.84
        },
        {
          "id": "method:hh1uha:createmauiapp__action_14_createmauiapp_try_14_0__try__method:hh1uha:createmauiapp__action_16_create_16__linear",
          "from": "method:hh1uha:createmauiapp__action_14_createmauiapp_try_14_0__try",
          "to": "method:hh1uha:createmauiapp__action_16_create_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_16_create_16__linear__method:hh1uha:createmauiapp__action_22_compile_time_conditional_22__linear",
          "from": "method:hh1uha:createmauiapp__action_16_create_16__linear",
          "to": "method:hh1uha:createmauiapp__action_22_compile_time_conditional_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_22_compile_time_conditional_22__linear__method:hh1uha:createmauiapp__action_28_service_registration_28__linear",
          "from": "method:hh1uha:createmauiapp__action_22_compile_time_conditional_22__linear",
          "to": "method:hh1uha:createmauiapp__action_28_service_registration_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_28_service_registration_28__linear__method:hh1uha:createmauiapp__action_32_service_registration_32__linear",
          "from": "method:hh1uha:createmauiapp__action_28_service_registration_28__linear",
          "to": "method:hh1uha:createmauiapp__action_32_service_registration_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_32_service_registration_32__linear__method:hh1uha:createmauiapp__action_38_service_registration_38__linear",
          "from": "method:hh1uha:createmauiapp__action_32_service_registration_32__linear",
          "to": "method:hh1uha:createmauiapp__action_38_service_registration_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_38_service_registration_38__linear__method:hh1uha:createmauiapp__action_41_service_registration_41__linear",
          "from": "method:hh1uha:createmauiapp__action_38_service_registration_38__linear",
          "to": "method:hh1uha:createmauiapp__action_41_service_registration_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_41_service_registration_41__linear__call_method:hh1uha:createmauiapp__call_51_AddApplication",
          "from": "method:hh1uha:createmauiapp__action_41_service_registration_41__linear",
          "to": "method:hh1uha:createmauiapp__call_51_AddApplication",
          "kind": "call",
          "label": "IServiceCollection extension call to register application services",
          "line": 51,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.88
        },
        {
          "id": "method:hh1uha:createmauiapp__call_51_AddApplication__method:hh1uha:createmauiapp__action_53_library_integration_53__linear",
          "from": "method:hh1uha:createmauiapp__call_51_AddApplication",
          "to": "method:hh1uha:createmauiapp__action_53_library_integration_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_53_library_integration_53__linear__call_method:hh1uha:createmauiapp__call_54_Assembly",
          "from": "method:hh1uha:createmauiapp__action_53_library_integration_53__linear",
          "to": "method:hh1uha:createmauiapp__call_54_Assembly",
          "kind": "call",
          "label": "Assembly reference passed into MediatR registration",
          "line": 54,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.88
        },
        {
          "id": "method:hh1uha:createmauiapp__call_54_Assembly__method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return",
          "from": "method:hh1uha:createmauiapp__call_54_Assembly",
          "to": "method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return__method:hh1uha:createmauiapp__action_57_return_57__return",
          "from": "method:hh1uha:createmauiapp__action_57_createmauiapp_return_57_1__return",
          "to": "method:hh1uha:createmauiapp__action_57_return_57__return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hh1uha:createmauiapp__action_57_return_57__return__method:hh1uha:createmauiapp__action_59_createmauiapp_catch_59_2__catch",
          "from": "method:hh1uha:createmauiapp__action_57_return_57__return",
          "to": "method:hh1uha:createmauiapp__action_59_createmauiapp_catch_59_2__catch",
          "kind": "exception",
          "line": 59,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.86
        },
        {
          "id": "method:hh1uha:createmauiapp__action_59_createmauiapp_catch_59_2__catch__method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw",
          "from": "method:hh1uha:createmauiapp__action_59_createmauiapp_catch_59_2__catch",
          "to": "method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw",
          "kind": "exception",
          "line": 63,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [
        {
          "id": "method:hh1uha:createmauiapp__call_51_AddApplication__jump_NexusReader_Application_AddApplication",
          "fromNodeId": "method:hh1uha:createmauiapp__call_51_AddApplication",
          "kind": "call-target",
          "targetPath": "NexusReader.Application",
          "targetHint": "AddApplication",
          "line": 51,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "reason": "Call target AddApplication in NexusReader.Application could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:hh1uha:createmauiapp__call_54_Assembly__jump_NexusReader_Application_DependencyInjection_Assembly",
          "fromNodeId": "method:hh1uha:createmauiapp__call_54_Assembly",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.DependencyInjection",
          "targetHint": "Assembly",
          "line": 54,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "reason": "Call target Assembly in NexusReader.Application.DependencyInjection could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [
        {
          "id": "method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw__exception_escape",
          "fromNodeId": "method:hh1uha:createmauiapp__action_63_createmauiapp_throw_63_3__throw",
          "kind": "exception-target",
          "line": 63,
          "sourcePath": "NexusReader.Maui/MauiProgram.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 12,
        "end": 65
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/MauiProgram.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method CreateMauiApp.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:t9hn2c:oncreate__fragment",
      "ownerFileId": "file:1246987:mainactivity-cs",
      "ownerSymbolId": "method:t9hn2c:oncreate",
      "ownerSymbolName": "OnCreate",
      "entryNodeId": "method:t9hn2c:oncreate__entry",
      "exitNodeIds": [
        "method:t9hn2c:oncreate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:t9hn2c:oncreate__entry",
          "kind": "entry",
          "label": "OnCreate entry",
          "line": 13,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.99,
          "detail": "Handles the Android creation lifecycle event; logs start and completion and delegates to base implementation."
        },
        {
          "id": "method:t9hn2c:oncreate__action_15_log_15__linear",
          "kind": "statement",
          "label": "Logs OnCreate start",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7,
          "detail": "Log.Debug(Tag, \"MainActivity.OnCreate starting...\")"
        },
        {
          "id": "method:t9hn2c:oncreate__action_16_lifecycle_call_16__linear",
          "kind": "statement",
          "label": "Delegate to base OnCreate",
          "line": 16,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7,
          "detail": "base.OnCreate(savedInstanceState) — invokes framework/base lifecycle implementation"
        },
        {
          "id": "method:t9hn2c:oncreate__action_17_log_17__linear",
          "kind": "statement",
          "label": "Logs OnCreate completion",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7,
          "detail": "Log.Debug(Tag, \"MainActivity.OnCreate completed\")"
        },
        {
          "id": "method:t9hn2c:oncreate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:t9hn2c:oncreate__entry__method:t9hn2c:oncreate__action_15_log_15__linear",
          "from": "method:t9hn2c:oncreate__entry",
          "to": "method:t9hn2c:oncreate__action_15_log_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t9hn2c:oncreate__action_15_log_15__linear__method:t9hn2c:oncreate__action_16_lifecycle_call_16__linear",
          "from": "method:t9hn2c:oncreate__action_15_log_15__linear",
          "to": "method:t9hn2c:oncreate__action_16_lifecycle_call_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t9hn2c:oncreate__action_16_lifecycle_call_16__linear__method:t9hn2c:oncreate__action_17_log_17__linear",
          "from": "method:t9hn2c:oncreate__action_16_lifecycle_call_16__linear",
          "to": "method:t9hn2c:oncreate__action_17_log_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t9hn2c:oncreate__action_17_log_17__linear__implicit_return",
          "from": "method:t9hn2c:oncreate__action_17_log_17__linear",
          "to": "method:t9hn2c:oncreate__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 13,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method OnCreate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1281z7w:mainapplication__fragment",
      "ownerFileId": "file:p180ke:mainapplication-cs",
      "ownerSymbolId": "method:1281z7w:mainapplication",
      "ownerSymbolName": "MainApplication",
      "entryNodeId": "method:1281z7w:mainapplication__entry",
      "exitNodeIds": [
        "method:1281z7w:mainapplication__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1281z7w:mainapplication__entry",
          "kind": "entry",
          "label": "MainApplication entry",
          "line": 14,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.99,
          "detail": "Android Application constructor that calls base and logs construction."
        },
        {
          "id": "method:1281z7w:mainapplication__action_17_log_17__linear",
          "kind": "statement",
          "label": "Log constructor invocation",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "Log.Debug(Tag, \"MainApplication constructor called\") — startup instrumentation"
        },
        {
          "id": "method:1281z7w:mainapplication__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1281z7w:mainapplication__entry__method:1281z7w:mainapplication__action_17_log_17__linear",
          "from": "method:1281z7w:mainapplication__entry",
          "to": "method:1281z7w:mainapplication__action_17_log_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1281z7w:mainapplication__action_17_log_17__linear__implicit_return",
          "from": "method:1281z7w:mainapplication__action_17_log_17__linear",
          "to": "method:1281z7w:mainapplication__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method MainApplication.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:197aset:createmauiapp__fragment",
      "ownerFileId": "file:p180ke:mainapplication-cs",
      "ownerSymbolId": "method:197aset:createmauiapp",
      "ownerSymbolName": "CreateMauiApp",
      "entryNodeId": "method:197aset:createmauiapp__entry",
      "exitNodeIds": [
        "method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return",
        "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
        "method:197aset:createmauiapp__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:197aset:createmauiapp__entry",
          "kind": "entry",
          "label": "CreateMauiApp entry",
          "line": 20,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.99,
          "detail": "Overrides MauiApplication.CreateMauiApp to construct the MAUI app via MauiProgram.CreateMauiApp with logging and error handling."
        },
        {
          "id": "method:197aset:createmauiapp__action_22_log_22__linear",
          "kind": "statement",
          "label": "Startup trace",
          "line": 22,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "Log.Debug(Tag, \"CreateMauiApp starting...\")"
        },
        {
          "id": "method:197aset:createmauiapp__action_23_try_catch_23__linear",
          "kind": "statement",
          "label": "Wraps Maui app creation",
          "line": 23,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "try { var app = MauiProgram.CreateMauiApp(); return app; } catch (Exception ex) { ... rethrow }"
        },
        {
          "id": "method:197aset:createmauiapp__action_23_createmauiapp_try_23_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 23,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:197aset:createmauiapp__call_25_CreateMauiApp",
          "kind": "call",
          "label": "CreateMauiApp",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.88,
          "detail": "no params; expects to return a configured MauiApp"
        },
        {
          "id": "method:197aset:createmauiapp__action_26_log_26__linear",
          "kind": "statement",
          "label": "Success log",
          "line": 26,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "Log.Debug(Tag, \"CreateMauiApp successful\") executed on happy path"
        },
        {
          "id": "method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "return app;"
        },
        {
          "id": "method:197aset:createmauiapp__action_29_createmauiapp_catch_29_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 29,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:197aset:createmauiapp__action_31_log_31__linear",
          "kind": "statement",
          "label": "Error logging",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "Log.Error(Tag, $\"CreateMauiApp FAILED: {ex.Message}\") executed in catch"
        },
        {
          "id": "method:197aset:createmauiapp__action_32_log_32__linear",
          "kind": "statement",
          "label": "Stack trace logging",
          "line": 32,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "Log.Error(Tag, ex.StackTrace) executed in catch"
        },
        {
          "id": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.9,
          "detail": "throw;"
        },
        {
          "id": "method:197aset:createmauiapp__action_33_rethrow_33__linear",
          "kind": "statement",
          "label": "Propagates startup exception",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7,
          "detail": "throw; rethrows caught exception to surface startup failure"
        },
        {
          "id": "method:197aset:createmauiapp__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 35,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:197aset:createmauiapp__entry__method:197aset:createmauiapp__action_22_log_22__linear",
          "from": "method:197aset:createmauiapp__entry",
          "to": "method:197aset:createmauiapp__action_22_log_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_22_log_22__linear__method:197aset:createmauiapp__action_23_try_catch_23__linear",
          "from": "method:197aset:createmauiapp__action_22_log_22__linear",
          "to": "method:197aset:createmauiapp__action_23_try_catch_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_23_try_catch_23__linear__method:197aset:createmauiapp__action_23_createmauiapp_try_23_0__try",
          "from": "method:197aset:createmauiapp__action_23_try_catch_23__linear",
          "to": "method:197aset:createmauiapp__action_23_createmauiapp_try_23_0__try",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.84
        },
        {
          "id": "method:197aset:createmauiapp__action_23_createmauiapp_try_23_0__try__call_method:197aset:createmauiapp__call_25_CreateMauiApp",
          "from": "method:197aset:createmauiapp__action_23_createmauiapp_try_23_0__try",
          "to": "method:197aset:createmauiapp__call_25_CreateMauiApp",
          "kind": "call",
          "label": "no params; expects to return a configured MauiApp",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.88
        },
        {
          "id": "method:197aset:createmauiapp__call_25_CreateMauiApp__method:197aset:createmauiapp__action_26_log_26__linear",
          "from": "method:197aset:createmauiapp__call_25_CreateMauiApp",
          "to": "method:197aset:createmauiapp__action_26_log_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_26_log_26__linear__method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return",
          "from": "method:197aset:createmauiapp__action_26_log_26__linear",
          "to": "method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return__method:197aset:createmauiapp__action_29_createmauiapp_catch_29_2__catch",
          "from": "method:197aset:createmauiapp__action_27_createmauiapp_return_27_1__return",
          "to": "method:197aset:createmauiapp__action_29_createmauiapp_catch_29_2__catch",
          "kind": "exception",
          "line": 29,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.86
        },
        {
          "id": "method:197aset:createmauiapp__action_29_createmauiapp_catch_29_2__catch__method:197aset:createmauiapp__action_31_log_31__linear",
          "from": "method:197aset:createmauiapp__action_29_createmauiapp_catch_29_2__catch",
          "to": "method:197aset:createmauiapp__action_31_log_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_31_log_31__linear__method:197aset:createmauiapp__action_32_log_32__linear",
          "from": "method:197aset:createmauiapp__action_31_log_31__linear",
          "to": "method:197aset:createmauiapp__action_32_log_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_32_log_32__linear__method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
          "from": "method:197aset:createmauiapp__action_32_log_32__linear",
          "to": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
          "kind": "exception",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.9
        },
        {
          "id": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw__method:197aset:createmauiapp__action_33_rethrow_33__linear",
          "from": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
          "to": "method:197aset:createmauiapp__action_33_rethrow_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.7
        },
        {
          "id": "method:197aset:createmauiapp__action_33_rethrow_33__linear__implicit_return",
          "from": "method:197aset:createmauiapp__action_33_rethrow_33__linear",
          "to": "method:197aset:createmauiapp__implicit_return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:197aset:createmauiapp__call_25_CreateMauiApp__jump_MauiProgram_cs_CreateMauiApp",
          "fromNodeId": "method:197aset:createmauiapp__call_25_CreateMauiApp",
          "kind": "call-target",
          "targetPath": "MauiProgram.cs",
          "targetHint": "CreateMauiApp",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "reason": "Call target CreateMauiApp in MauiProgram.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [
        {
          "id": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw__exception_escape",
          "fromNodeId": "method:197aset:createmauiapp__action_33_createmauiapp_throw_33_3__throw",
          "kind": "exception-target",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 35
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method CreateMauiApp.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:lftqc:savestringasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:lftqc:savestringasync",
      "ownerSymbolName": "SaveStringAsync",
      "entryNodeId": "method:lftqc:savestringasync__entry",
      "exitNodeIds": [
        "method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return",
        "method:lftqc:savestringasync__action_15_return_15__return",
        "method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return",
        "method:lftqc:savestringasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:lftqc:savestringasync__entry",
          "kind": "entry",
          "label": "SaveStringAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a string into MAUI Preferences and returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:lftqc:savestringasync__action_12_try_catch_12__linear",
          "kind": "statement",
          "label": "Wrap persistence call in try/catch",
          "line": 12,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { Preferences.Default.Set(key, value); return Ok } catch (Exception) { return Fail }"
        },
        {
          "id": "method:lftqc:savestringasync__action_12_savestringasync_try_12_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 12,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:lftqc:savestringasync__action_14_persistence_write_14__linear",
          "kind": "statement",
          "label": "Write Preference",
          "line": 14,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Set(key, value)"
        },
        {
          "id": "method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:lftqc:savestringasync__action_15_return_15__return",
          "kind": "return",
          "label": "Return success result",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok())"
        },
        {
          "id": "method:lftqc:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 19,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        },
        {
          "id": "method:lftqc:savestringasync__action_19_fallback_return_19__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 19,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail(ex.Message))"
        },
        {
          "id": "method:lftqc:savestringasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:lftqc:savestringasync__entry__method:lftqc:savestringasync__action_12_try_catch_12__linear",
          "from": "method:lftqc:savestringasync__entry",
          "to": "method:lftqc:savestringasync__action_12_try_catch_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_12_try_catch_12__linear__method:lftqc:savestringasync__action_12_savestringasync_try_12_0__try",
          "from": "method:lftqc:savestringasync__action_12_try_catch_12__linear",
          "to": "method:lftqc:savestringasync__action_12_savestringasync_try_12_0__try",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:lftqc:savestringasync__action_12_savestringasync_try_12_0__try__method:lftqc:savestringasync__action_14_persistence_write_14__linear",
          "from": "method:lftqc:savestringasync__action_12_savestringasync_try_12_0__try",
          "to": "method:lftqc:savestringasync__action_14_persistence_write_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_14_persistence_write_14__linear__method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return",
          "from": "method:lftqc:savestringasync__action_14_persistence_write_14__linear",
          "to": "method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return__method:lftqc:savestringasync__action_15_return_15__return",
          "from": "method:lftqc:savestringasync__action_15_savestringasync_return_15_1__return",
          "to": "method:lftqc:savestringasync__action_15_return_15__return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_15_return_15__return__method:lftqc:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "from": "method:lftqc:savestringasync__action_15_return_15__return",
          "to": "method:lftqc:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "kind": "exception",
          "line": 17,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:lftqc:savestringasync__action_17_savestringasync_catch_17_2__catch__method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return",
          "from": "method:lftqc:savestringasync__action_17_savestringasync_catch_17_2__catch",
          "to": "method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return__method:lftqc:savestringasync__action_19_fallback_return_19__linear",
          "from": "method:lftqc:savestringasync__action_19_savestringasync_return_19_3__return",
          "to": "method:lftqc:savestringasync__action_19_fallback_return_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:lftqc:savestringasync__action_19_fallback_return_19__linear__implicit_return",
          "from": "method:lftqc:savestringasync__action_19_fallback_return_19__linear",
          "to": "method:lftqc:savestringasync__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 10,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method SaveStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lg6b3p:getstringasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:1lg6b3p:getstringasync",
      "ownerSymbolName": "GetStringAsync",
      "entryNodeId": "method:1lg6b3p:getstringasync__entry",
      "exitNodeIds": [
        "method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return",
        "method:1lg6b3p:getstringasync__action_27_return_27__return",
        "method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return",
        "method:1lg6b3p:getstringasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lg6b3p:getstringasync__entry",
          "kind": "entry",
          "label": "GetStringAsync entry",
          "line": 23,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a string from MAUI Preferences by key and returns it wrapped in a FluentResults Result; failures produce a failed Result."
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_25_try_catch_25__linear",
          "kind": "statement",
          "label": "Wrap read in try/catch",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { return Ok(Preferences.Default.Get(...)) } catch { return Fail }"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_25_getstringasync_try_25_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok(Preferences.Default.Get(key, (string?)null)));"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_return_27__return",
          "kind": "return",
          "label": "Return success with value",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok(value))"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_persistence_read_27__linear",
          "kind": "statement",
          "label": "Read Preference",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Get(key, (string?)null)"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 29,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail<string?>(ex.Message));"
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_31_fallback_return_31__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail<string?>(ex.Message))"
        },
        {
          "id": "method:1lg6b3p:getstringasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lg6b3p:getstringasync__entry__method:1lg6b3p:getstringasync__action_25_try_catch_25__linear",
          "from": "method:1lg6b3p:getstringasync__entry",
          "to": "method:1lg6b3p:getstringasync__action_25_try_catch_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_25_try_catch_25__linear__method:1lg6b3p:getstringasync__action_25_getstringasync_try_25_0__try",
          "from": "method:1lg6b3p:getstringasync__action_25_try_catch_25__linear",
          "to": "method:1lg6b3p:getstringasync__action_25_getstringasync_try_25_0__try",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_25_getstringasync_try_25_0__try__method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return",
          "from": "method:1lg6b3p:getstringasync__action_25_getstringasync_try_25_0__try",
          "to": "method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return__method:1lg6b3p:getstringasync__action_27_return_27__return",
          "from": "method:1lg6b3p:getstringasync__action_27_getstringasync_return_27_1__return",
          "to": "method:1lg6b3p:getstringasync__action_27_return_27__return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_return_27__return__method:1lg6b3p:getstringasync__action_27_persistence_read_27__linear",
          "from": "method:1lg6b3p:getstringasync__action_27_return_27__return",
          "to": "method:1lg6b3p:getstringasync__action_27_persistence_read_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_27_persistence_read_27__linear__method:1lg6b3p:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "from": "method:1lg6b3p:getstringasync__action_27_persistence_read_27__linear",
          "to": "method:1lg6b3p:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "kind": "exception",
          "line": 29,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_29_getstringasync_catch_29_2__catch__method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return",
          "from": "method:1lg6b3p:getstringasync__action_29_getstringasync_catch_29_2__catch",
          "to": "method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return__method:1lg6b3p:getstringasync__action_31_fallback_return_31__linear",
          "from": "method:1lg6b3p:getstringasync__action_31_getstringasync_return_31_3__return",
          "to": "method:1lg6b3p:getstringasync__action_31_fallback_return_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lg6b3p:getstringasync__action_31_fallback_return_31__linear__implicit_return",
          "from": "method:1lg6b3p:getstringasync__action_31_fallback_return_31__linear",
          "to": "method:1lg6b3p:getstringasync__implicit_return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 23,
        "end": 33
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method GetStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:18714ak:saveboolasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:18714ak:saveboolasync",
      "ownerSymbolName": "SaveBoolAsync",
      "entryNodeId": "method:18714ak:saveboolasync__entry",
      "exitNodeIds": [
        "method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return",
        "method:18714ak:saveboolasync__action_40_return_40__return",
        "method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return",
        "method:18714ak:saveboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:18714ak:saveboolasync__entry",
          "kind": "entry",
          "label": "SaveBoolAsync entry",
          "line": 35,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a boolean into MAUI Preferences and returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:18714ak:saveboolasync__action_37_try_catch_37__linear",
          "kind": "statement",
          "label": "Wrap persistence call in try/catch",
          "line": 37,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { Preferences.Default.Set(key, value); return Ok } catch { return Fail }"
        },
        {
          "id": "method:18714ak:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 37,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:18714ak:saveboolasync__action_39_persistence_write_39__linear",
          "kind": "statement",
          "label": "Write Preference",
          "line": 39,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Set(key, value)"
        },
        {
          "id": "method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 40,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:18714ak:saveboolasync__action_40_return_40__return",
          "kind": "return",
          "label": "Return success result",
          "line": 40,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok())"
        },
        {
          "id": "method:18714ak:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 42,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 44,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        },
        {
          "id": "method:18714ak:saveboolasync__action_44_fallback_return_44__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 44,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail(ex.Message))"
        },
        {
          "id": "method:18714ak:saveboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 46,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:18714ak:saveboolasync__entry__method:18714ak:saveboolasync__action_37_try_catch_37__linear",
          "from": "method:18714ak:saveboolasync__entry",
          "to": "method:18714ak:saveboolasync__action_37_try_catch_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_37_try_catch_37__linear__method:18714ak:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "from": "method:18714ak:saveboolasync__action_37_try_catch_37__linear",
          "to": "method:18714ak:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:18714ak:saveboolasync__action_37_saveboolasync_try_37_0__try__method:18714ak:saveboolasync__action_39_persistence_write_39__linear",
          "from": "method:18714ak:saveboolasync__action_37_saveboolasync_try_37_0__try",
          "to": "method:18714ak:saveboolasync__action_39_persistence_write_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_39_persistence_write_39__linear__method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "from": "method:18714ak:saveboolasync__action_39_persistence_write_39__linear",
          "to": "method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return__method:18714ak:saveboolasync__action_40_return_40__return",
          "from": "method:18714ak:saveboolasync__action_40_saveboolasync_return_40_1__return",
          "to": "method:18714ak:saveboolasync__action_40_return_40__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_40_return_40__return__method:18714ak:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "from": "method:18714ak:saveboolasync__action_40_return_40__return",
          "to": "method:18714ak:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "kind": "exception",
          "line": 42,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:18714ak:saveboolasync__action_42_saveboolasync_catch_42_2__catch__method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "from": "method:18714ak:saveboolasync__action_42_saveboolasync_catch_42_2__catch",
          "to": "method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "kind": "return",
          "line": 44,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return__method:18714ak:saveboolasync__action_44_fallback_return_44__linear",
          "from": "method:18714ak:saveboolasync__action_44_saveboolasync_return_44_3__return",
          "to": "method:18714ak:saveboolasync__action_44_fallback_return_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18714ak:saveboolasync__action_44_fallback_return_44__linear__implicit_return",
          "from": "method:18714ak:saveboolasync__action_44_fallback_return_44__linear",
          "to": "method:18714ak:saveboolasync__implicit_return",
          "kind": "return",
          "line": 46,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 35,
        "end": 46
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 35,
          "summary": "Control-flow fragment extracted for method SaveBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jkfjp3:getboolasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:jkfjp3:getboolasync",
      "ownerSymbolName": "GetBoolAsync",
      "entryNodeId": "method:jkfjp3:getboolasync__entry",
      "exitNodeIds": [
        "method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return",
        "method:jkfjp3:getboolasync__action_52_return_52__return",
        "method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return",
        "method:jkfjp3:getboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:jkfjp3:getboolasync__entry",
          "kind": "entry",
          "label": "GetBoolAsync entry",
          "line": 48,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a boolean from MAUI Preferences with an optional default and returns it wrapped in FluentResults; errors produce a failed Result."
        },
        {
          "id": "method:jkfjp3:getboolasync__action_50_try_catch_50__linear",
          "kind": "statement",
          "label": "Wrap read in try/catch",
          "line": 50,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { return Ok(Preferences.Default.Get(...)) } catch { return Fail }"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_50_getboolasync_try_50_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 50,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok(Preferences.Default.Get(key, defaultValue)));"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_return_52__return",
          "kind": "return",
          "label": "Return success with boolean",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok(value))"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_persistence_read_52__linear",
          "kind": "statement",
          "label": "Read Preference",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Get(key, defaultValue)"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 54,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 56,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail<bool>(ex.Message));"
        },
        {
          "id": "method:jkfjp3:getboolasync__action_56_fallback_return_56__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 56,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail<bool>(ex.Message))"
        },
        {
          "id": "method:jkfjp3:getboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 58,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:jkfjp3:getboolasync__entry__method:jkfjp3:getboolasync__action_50_try_catch_50__linear",
          "from": "method:jkfjp3:getboolasync__entry",
          "to": "method:jkfjp3:getboolasync__action_50_try_catch_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_50_try_catch_50__linear__method:jkfjp3:getboolasync__action_50_getboolasync_try_50_0__try",
          "from": "method:jkfjp3:getboolasync__action_50_try_catch_50__linear",
          "to": "method:jkfjp3:getboolasync__action_50_getboolasync_try_50_0__try",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:jkfjp3:getboolasync__action_50_getboolasync_try_50_0__try__method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return",
          "from": "method:jkfjp3:getboolasync__action_50_getboolasync_try_50_0__try",
          "to": "method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return",
          "kind": "return",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return__method:jkfjp3:getboolasync__action_52_return_52__return",
          "from": "method:jkfjp3:getboolasync__action_52_getboolasync_return_52_1__return",
          "to": "method:jkfjp3:getboolasync__action_52_return_52__return",
          "kind": "return",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_return_52__return__method:jkfjp3:getboolasync__action_52_persistence_read_52__linear",
          "from": "method:jkfjp3:getboolasync__action_52_return_52__return",
          "to": "method:jkfjp3:getboolasync__action_52_persistence_read_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_52_persistence_read_52__linear__method:jkfjp3:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "from": "method:jkfjp3:getboolasync__action_52_persistence_read_52__linear",
          "to": "method:jkfjp3:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "kind": "exception",
          "line": 54,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:jkfjp3:getboolasync__action_54_getboolasync_catch_54_2__catch__method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return",
          "from": "method:jkfjp3:getboolasync__action_54_getboolasync_catch_54_2__catch",
          "to": "method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return",
          "kind": "return",
          "line": 56,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return__method:jkfjp3:getboolasync__action_56_fallback_return_56__linear",
          "from": "method:jkfjp3:getboolasync__action_56_getboolasync_return_56_3__return",
          "to": "method:jkfjp3:getboolasync__action_56_fallback_return_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jkfjp3:getboolasync__action_56_fallback_return_56__linear__implicit_return",
          "from": "method:jkfjp3:getboolasync__action_56_fallback_return_56__linear",
          "to": "method:jkfjp3:getboolasync__implicit_return",
          "kind": "return",
          "line": 58,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 48,
        "end": 58
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 48,
          "summary": "Control-flow fragment extracted for method GetBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jbr3bv:removeasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:1jbr3bv:removeasync",
      "ownerSymbolName": "RemoveAsync",
      "entryNodeId": "method:1jbr3bv:removeasync__entry",
      "exitNodeIds": [
        "method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return",
        "method:1jbr3bv:removeasync__action_65_return_65__return",
        "method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return",
        "method:1jbr3bv:removeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jbr3bv:removeasync__entry",
          "kind": "entry",
          "label": "RemoveAsync entry",
          "line": 60,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes a key from MAUI Preferences and returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:1jbr3bv:removeasync__action_62_try_catch_62__linear",
          "kind": "statement",
          "label": "Wrap remove in try/catch",
          "line": 62,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { Preferences.Default.Remove(key); return Ok } catch { return Fail }"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_62_removeasync_try_62_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 62,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_64_persistence_write_64__linear",
          "kind": "statement",
          "label": "Remove Preference key",
          "line": 64,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Preferences.Default.Remove(key)"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 65,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_65_return_65__return",
          "kind": "return",
          "label": "Return success result",
          "line": 65,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok())"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_67_removeasync_catch_67_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 67,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 69,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        },
        {
          "id": "method:1jbr3bv:removeasync__action_69_fallback_return_69__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 69,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail(ex.Message))"
        },
        {
          "id": "method:1jbr3bv:removeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 71,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jbr3bv:removeasync__entry__method:1jbr3bv:removeasync__action_62_try_catch_62__linear",
          "from": "method:1jbr3bv:removeasync__entry",
          "to": "method:1jbr3bv:removeasync__action_62_try_catch_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_62_try_catch_62__linear__method:1jbr3bv:removeasync__action_62_removeasync_try_62_0__try",
          "from": "method:1jbr3bv:removeasync__action_62_try_catch_62__linear",
          "to": "method:1jbr3bv:removeasync__action_62_removeasync_try_62_0__try",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1jbr3bv:removeasync__action_62_removeasync_try_62_0__try__method:1jbr3bv:removeasync__action_64_persistence_write_64__linear",
          "from": "method:1jbr3bv:removeasync__action_62_removeasync_try_62_0__try",
          "to": "method:1jbr3bv:removeasync__action_64_persistence_write_64__linear",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_64_persistence_write_64__linear__method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return",
          "from": "method:1jbr3bv:removeasync__action_64_persistence_write_64__linear",
          "to": "method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return",
          "kind": "return",
          "line": 65,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return__method:1jbr3bv:removeasync__action_65_return_65__return",
          "from": "method:1jbr3bv:removeasync__action_65_removeasync_return_65_1__return",
          "to": "method:1jbr3bv:removeasync__action_65_return_65__return",
          "kind": "return",
          "line": 65,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_65_return_65__return__method:1jbr3bv:removeasync__action_67_removeasync_catch_67_2__catch",
          "from": "method:1jbr3bv:removeasync__action_65_return_65__return",
          "to": "method:1jbr3bv:removeasync__action_67_removeasync_catch_67_2__catch",
          "kind": "exception",
          "line": 67,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1jbr3bv:removeasync__action_67_removeasync_catch_67_2__catch__method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return",
          "from": "method:1jbr3bv:removeasync__action_67_removeasync_catch_67_2__catch",
          "to": "method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return__method:1jbr3bv:removeasync__action_69_fallback_return_69__linear",
          "from": "method:1jbr3bv:removeasync__action_69_removeasync_return_69_3__return",
          "to": "method:1jbr3bv:removeasync__action_69_fallback_return_69__linear",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jbr3bv:removeasync__action_69_fallback_return_69__linear__implicit_return",
          "from": "method:1jbr3bv:removeasync__action_69_fallback_return_69__linear",
          "to": "method:1jbr3bv:removeasync__implicit_return",
          "kind": "return",
          "line": 71,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 60,
        "end": 71
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 60,
          "summary": "Control-flow fragment extracted for method RemoveAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17pqj2a:savesecurestring__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:17pqj2a:savesecurestring",
      "ownerSymbolName": "SaveSecureString",
      "entryNodeId": "method:17pqj2a:savesecurestring__entry",
      "exitNodeIds": [
        "method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return",
        "method:17pqj2a:savesecurestring__action_78_return_78__return",
        "method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return",
        "method:17pqj2a:savesecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:17pqj2a:savesecurestring__entry",
          "kind": "entry",
          "label": "SaveSecureString entry",
          "line": 73,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously saves a value into MAUI SecureStorage and returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_75_try_catch_75__linear",
          "kind": "statement",
          "label": "Wrap secure storage set in try/catch",
          "line": 75,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { await SecureStorage.Default.SetAsync(key, value); return Ok } catch { return Fail }"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 75,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 77,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.81,
          "detail": "await SecureStorage.Default.SetAsync(key, value);"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_77_external_call_77__linear",
          "kind": "http-call",
          "label": "Await SecureStorage.SetAsync",
          "line": 77,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "await SecureStorage.Default.SetAsync(key, value)"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 78,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_78_return_78__return",
          "kind": "return",
          "label": "Return success result",
          "line": 78,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok()"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 80,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 82,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_82_fallback_return_82__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 82,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        },
        {
          "id": "method:17pqj2a:savesecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 84,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:17pqj2a:savesecurestring__entry__method:17pqj2a:savesecurestring__action_75_try_catch_75__linear",
          "from": "method:17pqj2a:savesecurestring__entry",
          "to": "method:17pqj2a:savesecurestring__action_75_try_catch_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_75_try_catch_75__linear__method:17pqj2a:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "from": "method:17pqj2a:savesecurestring__action_75_try_catch_75__linear",
          "to": "method:17pqj2a:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_75_savesecurestring_try_75_0__try__method:17pqj2a:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "from": "method:17pqj2a:savesecurestring__action_75_savesecurestring_try_75_0__try",
          "to": "method:17pqj2a:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_77_savesecurestring_await_77_1__await__method:17pqj2a:savesecurestring__action_77_external_call_77__linear",
          "from": "method:17pqj2a:savesecurestring__action_77_savesecurestring_await_77_1__await",
          "to": "method:17pqj2a:savesecurestring__action_77_external_call_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_77_external_call_77__linear__method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "from": "method:17pqj2a:savesecurestring__action_77_external_call_77__linear",
          "to": "method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return__method:17pqj2a:savesecurestring__action_78_return_78__return",
          "from": "method:17pqj2a:savesecurestring__action_78_savesecurestring_return_78_2__return",
          "to": "method:17pqj2a:savesecurestring__action_78_return_78__return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_78_return_78__return__method:17pqj2a:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "from": "method:17pqj2a:savesecurestring__action_78_return_78__return",
          "to": "method:17pqj2a:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_80_savesecurestring_catch_80_3__catch__method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "from": "method:17pqj2a:savesecurestring__action_80_savesecurestring_catch_80_3__catch",
          "to": "method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "kind": "return",
          "line": 82,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return__method:17pqj2a:savesecurestring__action_82_fallback_return_82__linear",
          "from": "method:17pqj2a:savesecurestring__action_82_savesecurestring_return_82_4__return",
          "to": "method:17pqj2a:savesecurestring__action_82_fallback_return_82__linear",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17pqj2a:savesecurestring__action_82_fallback_return_82__linear__implicit_return",
          "from": "method:17pqj2a:savesecurestring__action_82_fallback_return_82__linear",
          "to": "method:17pqj2a:savesecurestring__implicit_return",
          "kind": "return",
          "line": 84,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 73,
        "end": 84
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 73,
          "summary": "Control-flow fragment extracted for method SaveSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:191bta3:getsecurestring__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:191bta3:getsecurestring",
      "ownerSymbolName": "GetSecureString",
      "entryNodeId": "method:191bta3:getsecurestring__entry",
      "exitNodeIds": [
        "method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return",
        "method:191bta3:getsecurestring__action_90_return_90__return",
        "method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return",
        "method:191bta3:getsecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:191bta3:getsecurestring__entry",
          "kind": "entry",
          "label": "GetSecureString entry",
          "line": 86,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously retrieves a value from MAUI SecureStorage and returns it wrapped in a FluentResults Result; failures produce a failed Result."
        },
        {
          "id": "method:191bta3:getsecurestring__action_88_try_catch_88__linear",
          "kind": "statement",
          "label": "Wrap secure storage get in try/catch",
          "line": 88,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { return Ok(await SecureStorage.Default.GetAsync(key)) } catch { return Fail }"
        },
        {
          "id": "method:191bta3:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 88,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.81,
          "detail": "return Result.Ok(await SecureStorage.Default.GetAsync(key));"
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(await SecureStorage.Default.GetAsync(key));"
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_return_90__return",
          "kind": "return",
          "label": "Return success with value",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(value)"
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_external_call_90__linear",
          "kind": "http-call",
          "label": "Await SecureStorage.GetAsync",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "await SecureStorage.Default.GetAsync(key)"
        },
        {
          "id": "method:191bta3:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 92,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 94,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:191bta3:getsecurestring__action_94_fallback_return_94__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 94,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        },
        {
          "id": "method:191bta3:getsecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 96,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:191bta3:getsecurestring__entry__method:191bta3:getsecurestring__action_88_try_catch_88__linear",
          "from": "method:191bta3:getsecurestring__entry",
          "to": "method:191bta3:getsecurestring__action_88_try_catch_88__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_88_try_catch_88__linear__method:191bta3:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "from": "method:191bta3:getsecurestring__action_88_try_catch_88__linear",
          "to": "method:191bta3:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:191bta3:getsecurestring__action_88_getsecurestring_try_88_0__try__method:191bta3:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "from": "method:191bta3:getsecurestring__action_88_getsecurestring_try_88_0__try",
          "to": "method:191bta3:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_getsecurestring_await_90_1__await__method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "from": "method:191bta3:getsecurestring__action_90_getsecurestring_await_90_1__await",
          "to": "method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "kind": "return",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return__method:191bta3:getsecurestring__action_90_return_90__return",
          "from": "method:191bta3:getsecurestring__action_90_getsecurestring_return_90_2__return",
          "to": "method:191bta3:getsecurestring__action_90_return_90__return",
          "kind": "return",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_return_90__return__method:191bta3:getsecurestring__action_90_external_call_90__linear",
          "from": "method:191bta3:getsecurestring__action_90_return_90__return",
          "to": "method:191bta3:getsecurestring__action_90_external_call_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_90_external_call_90__linear__method:191bta3:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "from": "method:191bta3:getsecurestring__action_90_external_call_90__linear",
          "to": "method:191bta3:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "kind": "exception",
          "line": 92,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:191bta3:getsecurestring__action_92_getsecurestring_catch_92_3__catch__method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "from": "method:191bta3:getsecurestring__action_92_getsecurestring_catch_92_3__catch",
          "to": "method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return__method:191bta3:getsecurestring__action_94_fallback_return_94__linear",
          "from": "method:191bta3:getsecurestring__action_94_getsecurestring_return_94_4__return",
          "to": "method:191bta3:getsecurestring__action_94_fallback_return_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:191bta3:getsecurestring__action_94_fallback_return_94__linear__implicit_return",
          "from": "method:191bta3:getsecurestring__action_94_fallback_return_94__linear",
          "to": "method:191bta3:getsecurestring__implicit_return",
          "kind": "return",
          "line": 96,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 86,
        "end": 96
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 86,
          "summary": "Control-flow fragment extracted for method GetSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1rgip6d:removesecureasync__fragment",
      "ownerFileId": "file:7ji0h3:mauistorageservice-cs",
      "ownerSymbolId": "method:1rgip6d:removesecureasync",
      "ownerSymbolName": "RemoveSecureAsync",
      "entryNodeId": "method:1rgip6d:removesecureasync__entry",
      "exitNodeIds": [
        "method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return",
        "method:1rgip6d:removesecureasync__action_103_return_103__return",
        "method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return",
        "method:1rgip6d:removesecureasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1rgip6d:removesecureasync__entry",
          "kind": "entry",
          "label": "RemoveSecureAsync entry",
          "line": 98,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes a key from MAUI SecureStorage (synchronous API) and returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_100_try_catch_100__linear",
          "kind": "statement",
          "label": "Wrap secure storage remove in try/catch",
          "line": 100,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "try { SecureStorage.Default.Remove(key); return Ok } catch { return Fail }"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 100,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_102_persistence_write_102__linear",
          "kind": "statement",
          "label": "Remove SecureStorage key",
          "line": 102,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "SecureStorage.Default.Remove(key)"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 103,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Ok());"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_103_return_103__return",
          "kind": "return",
          "label": "Return success result",
          "line": 103,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok())"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 105,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 107,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "return Task.FromResult(Result.Fail(ex.Message));"
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_107_fallback_return_107__linear",
          "kind": "statement",
          "label": "Return failure on exception",
          "line": 107,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Fail(ex.Message))"
        },
        {
          "id": "method:1rgip6d:removesecureasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 109,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1rgip6d:removesecureasync__entry__method:1rgip6d:removesecureasync__action_100_try_catch_100__linear",
          "from": "method:1rgip6d:removesecureasync__entry",
          "to": "method:1rgip6d:removesecureasync__action_100_try_catch_100__linear",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_100_try_catch_100__linear__method:1rgip6d:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "from": "method:1rgip6d:removesecureasync__action_100_try_catch_100__linear",
          "to": "method:1rgip6d:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_100_removesecureasync_try_100_0__try__method:1rgip6d:removesecureasync__action_102_persistence_write_102__linear",
          "from": "method:1rgip6d:removesecureasync__action_100_removesecureasync_try_100_0__try",
          "to": "method:1rgip6d:removesecureasync__action_102_persistence_write_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_102_persistence_write_102__linear__method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "from": "method:1rgip6d:removesecureasync__action_102_persistence_write_102__linear",
          "to": "method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "kind": "return",
          "line": 103,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return__method:1rgip6d:removesecureasync__action_103_return_103__return",
          "from": "method:1rgip6d:removesecureasync__action_103_removesecureasync_return_103_1__return",
          "to": "method:1rgip6d:removesecureasync__action_103_return_103__return",
          "kind": "return",
          "line": 103,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_103_return_103__return__method:1rgip6d:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "from": "method:1rgip6d:removesecureasync__action_103_return_103__return",
          "to": "method:1rgip6d:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "kind": "exception",
          "line": 105,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_105_removesecureasync_catch_105_2__catch__method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "from": "method:1rgip6d:removesecureasync__action_105_removesecureasync_catch_105_2__catch",
          "to": "method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "kind": "return",
          "line": 107,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return__method:1rgip6d:removesecureasync__action_107_fallback_return_107__linear",
          "from": "method:1rgip6d:removesecureasync__action_107_removesecureasync_return_107_3__return",
          "to": "method:1rgip6d:removesecureasync__action_107_fallback_return_107__linear",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgip6d:removesecureasync__action_107_fallback_return_107__linear__implicit_return",
          "from": "method:1rgip6d:removesecureasync__action_107_fallback_return_107__linear",
          "to": "method:1rgip6d:removesecureasync__implicit_return",
          "kind": "return",
          "line": 109,
          "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 98,
        "end": 109
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Maui/Services/MauiStorageService.cs",
          "line": 98,
          "summary": "Control-flow fragment extracted for method RemoveSecureAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4skxop:render-component-markup__fragment",
      "ownerFileId": "file:1bp3my2:nexusbutton-razor",
      "ownerSymbolId": "method:4skxop:render-component-markup",
      "ownerSymbolName": "Render (component markup)",
      "entryNodeId": "method:4skxop:render-component-markup__entry",
      "exitNodeIds": [
        "method:4skxop:render-component-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4skxop:render-component-markup__entry",
          "kind": "entry",
          "label": "Render (component markup) entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.99,
          "detail": "Renders the button element, binds the click event to the passed-in EventCallback, applies Disabled and additional attributes, and renders ChildContent."
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_state_binding_1__linear",
          "kind": "statement",
          "label": "disabled state",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7,
          "detail": "Binds Disabled parameter to the button's disabled attribute"
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_ui_binding_1__linear",
          "kind": "statement",
          "label": "click binding",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7,
          "detail": "Button element uses @onclick=\"OnClick\" to invoke the provided EventCallback when clicked"
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_attribute_propagation_1__linear",
          "kind": "statement",
          "label": "capture unmatched attributes",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7,
          "detail": "Uses @attributes=\"AdditionalAttributes\" to forward arbitrary HTML attributes to the button"
        },
        {
          "id": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback_",
          "kind": "call",
          "label": "OnClick (EventCallback)",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.88,
          "detail": "MouseEventArgs from the click event (passed by Blazor runtime)"
        },
        {
          "id": "method:4skxop:render-component-markup__action_2_render_2__linear",
          "kind": "statement",
          "label": "child content projection",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7,
          "detail": "Renders ChildContent inside the button"
        },
        {
          "id": "method:4skxop:render-component-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4skxop:render-component-markup__entry__method:4skxop:render-component-markup__action_1_state_binding_1__linear",
          "from": "method:4skxop:render-component-markup__entry",
          "to": "method:4skxop:render-component-markup__action_1_state_binding_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_state_binding_1__linear__method:4skxop:render-component-markup__action_1_ui_binding_1__linear",
          "from": "method:4skxop:render-component-markup__action_1_state_binding_1__linear",
          "to": "method:4skxop:render-component-markup__action_1_ui_binding_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_ui_binding_1__linear__method:4skxop:render-component-markup__action_1_attribute_propagation_1__linear",
          "from": "method:4skxop:render-component-markup__action_1_ui_binding_1__linear",
          "to": "method:4skxop:render-component-markup__action_1_attribute_propagation_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7
        },
        {
          "id": "method:4skxop:render-component-markup__action_1_attribute_propagation_1__linear__call_method:4skxop:render-component-markup__call_1_OnClick_EventCallback_",
          "from": "method:4skxop:render-component-markup__action_1_attribute_propagation_1__linear",
          "to": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback_",
          "kind": "call",
          "label": "MouseEventArgs from the click event (passed by Blazor runtime)",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.88
        },
        {
          "id": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback___method:4skxop:render-component-markup__action_2_render_2__linear",
          "from": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback_",
          "to": "method:4skxop:render-component-markup__action_2_render_2__linear",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.7
        },
        {
          "id": "method:4skxop:render-component-markup__action_2_render_2__linear__implicit_return",
          "from": "method:4skxop:render-component-markup__action_2_render_2__linear",
          "to": "method:4skxop:render-component-markup__implicit_return",
          "kind": "return",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback___jump_unknown_OnClick_EventCallback_",
          "fromNodeId": "method:4skxop:render-component-markup__call_1_OnClick_EventCallback_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnClick (EventCallback)",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "reason": "Call target OnClick (EventCallback) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8299999999999998,
      "lineSpan": {
        "start": 1,
        "end": 3
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method Render (component markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:viikop:render-razor-template-component-render__fragment",
      "ownerFileId": "file:q8opk3:nexusicon-razor",
      "ownerSymbolId": "method:viikop:render-razor-template-component-render",
      "ownerSymbolName": "Render (Razor template / component render)",
      "entryNodeId": "method:viikop:render-razor-template-component-render__entry",
      "exitNodeIds": [
        "method:viikop:render-razor-template-component-render__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:viikop:render-razor-template-component-render__entry",
          "kind": "entry",
          "label": "Render (Razor template / component render) entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.99,
          "detail": "Renders an <svg> element and selects SVG child elements based on the lowercase Name parameter; merges additional attributes into the svg element."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "kind": "statement",
          "label": "Use Size parameter for svg width/height",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7,
          "detail": "Width and height attributes set to @Size."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_1_attribute_merge_1__linear",
          "kind": "statement",
          "label": "Merge AdditionalAttributes into svg element via @attributes",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7,
          "detail": "Allows callers to add arbitrary HTML/SVG attributes (e.g., aria, data-*, role) to the root <svg>."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition",
          "kind": "condition",
          "label": "Name.ToLowerInvariant() matches specific icon keys",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7,
          "detail": "Each case emits one or more SVG path/shape elements; a default fallback circle is emitted if no case matches."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__true",
          "kind": "branch-true",
          "label": "home (lines 4-7)",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__false",
          "kind": "branch-false",
          "label": "map (lines 8-12)",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_transformation_2__linear",
          "kind": "statement",
          "label": "Normalize Name for matching",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7,
          "detail": "If Name is empty or not in map, default case executes."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch",
          "kind": "switch",
          "label": "Name.ToLowerInvariant()",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82,
          "detail": "@switch (Name.ToLowerInvariant())"
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge",
          "kind": "statement",
          "label": "merge",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__case_0",
          "kind": "case",
          "label": "case",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84,
          "detail": "default:"
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition",
          "kind": "condition",
          "label": "Default icon fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7,
          "detail": "If no switch case matches, emits a simple circle as a fallback icon (lines 90-91)."
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__true",
          "kind": "branch-true",
          "label": "true",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__false",
          "kind": "branch-false",
          "label": "false",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "kind": "statement",
          "label": "merge",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:viikop:render-razor-template-component-render__entry__method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "from": "method:viikop:render-razor-template-component-render__entry",
          "to": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear__method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "from": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "to": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear__method:viikop:render-razor-template-component-render__action_1_attribute_merge_1__linear",
          "from": "method:viikop:render-razor-template-component-render__action_1_parameter_usage_1__linear",
          "to": "method:viikop:render-razor-template-component-render__action_1_attribute_merge_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_1_attribute_merge_1__linear__method:viikop:render-razor-template-component-render__action_2_branch_2__condition",
          "from": "method:viikop:render-razor-template-component-render__action_1_attribute_merge_1__linear",
          "to": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition__method:viikop:render-razor-template-component-render__action_2_branch_2__true",
          "from": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition",
          "to": "method:viikop:render-razor-template-component-render__action_2_branch_2__true",
          "kind": "condition-true",
          "label": "home (lines 4-7)",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition__method:viikop:render-razor-template-component-render__action_2_branch_2__false",
          "from": "method:viikop:render-razor-template-component-render__action_2_branch_2__condition",
          "to": "method:viikop:render-razor-template-component-render__action_2_branch_2__false",
          "kind": "condition-false",
          "label": "map (lines 8-12)",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__true__method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "from": "method:viikop:render-razor-template-component-render__action_2_branch_2__true",
          "to": "method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__false__method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "from": "method:viikop:render-razor-template-component-render__action_2_branch_2__false",
          "to": "method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_branch_2__merge__method:viikop:render-razor-template-component-render__action_2_transformation_2__linear",
          "from": "method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
          "to": "method:viikop:render-razor-template-component-render__action_2_transformation_2__linear",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_transformation_2__linear__method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch",
          "from": "method:viikop:render-razor-template-component-render__action_2_transformation_2__linear",
          "to": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch__method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__case_0",
          "from": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch",
          "to": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__case_0",
          "kind": "case",
          "label": "case",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__case_0__method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge",
          "from": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__case_0",
          "to": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.82
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge__method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition",
          "from": "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge",
          "to": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition",
          "kind": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition__method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__true",
          "from": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition",
          "to": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition__method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__false",
          "from": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__condition",
          "to": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__true__method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "from": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__true",
          "to": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__false__method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "from": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__false",
          "to": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.84
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge__method:viikop:render-razor-template-component-render__action_89_fallback_89__condition",
          "from": "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
          "to": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition",
          "kind": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition__method:viikop:render-razor-template-component-render__action_89_fallback_89__true",
          "from": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition",
          "to": "method:viikop:render-razor-template-component-render__action_89_fallback_89__true",
          "kind": "condition-true",
          "label": "true",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition__method:viikop:render-razor-template-component-render__action_89_fallback_89__false",
          "from": "method:viikop:render-razor-template-component-render__action_89_fallback_89__condition",
          "to": "method:viikop:render-razor-template-component-render__action_89_fallback_89__false",
          "kind": "condition-false",
          "label": "false",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__true__method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "from": "method:viikop:render-razor-template-component-render__action_89_fallback_89__true",
          "to": "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__false__method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "from": "method:viikop:render-razor-template-component-render__action_89_fallback_89__false",
          "to": "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.7
        },
        {
          "id": "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge__implicit_return",
          "from": "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge",
          "to": "method:viikop:render-razor-template-component-render__implicit_return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:viikop:render-razor-template-component-render__action_2_branch_2__merge",
        "method:viikop:render-razor-template-component-render__action_2_render_razor_template_component_render_switch_2_0__switch_merge",
        "method:viikop:render-razor-template-component-render__action_89_render_razor_template_component_render_fallback_89_1__merge",
        "method:viikop:render-razor-template-component-render__action_89_fallback_89__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 1,
        "end": 94
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method Render (Razor template / component render).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:j1tqds:handlekeypress__fragment",
      "ownerFileId": "file:igeyi7:nexussearchbox-razor",
      "ownerSymbolId": "method:j1tqds:handlekeypress",
      "ownerSymbolName": "HandleKeyPress",
      "entryNodeId": "method:j1tqds:handlekeypress__entry",
      "exitNodeIds": [
        "method:j1tqds:handlekeypress__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:j1tqds:handlekeypress__entry",
          "kind": "entry",
          "label": "HandleKeyPress entry",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.99,
          "detail": "Handles keyboard input on the search box and triggers the OnSearch callback when Enter is pressed."
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition",
          "kind": "condition",
          "label": "e.Key == \"Enter\"",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78,
          "detail": "if (e.Key == \"Enter\")"
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition",
          "kind": "condition",
          "label": "e.Key == \"Enter\"",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7,
          "detail": "If Enter, awaits OnSearch.InvokeAsync(SearchValue); otherwise does nothing."
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__true",
          "kind": "branch-true",
          "label": "invoke callback",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_31_handlekeypress_await_31_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.81,
          "detail": "await OnSearch.InvokeAsync(SearchValue);"
        },
        {
          "id": "method:j1tqds:handlekeypress__action_31_external_call_31__linear",
          "kind": "http-call",
          "label": "Invokes parent-provided event callback",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7,
          "detail": "await OnSearch.InvokeAsync(SearchValue) - raises the search event to parent components."
        },
        {
          "id": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync",
          "kind": "call",
          "label": "OnSearch.InvokeAsync",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.88,
          "detail": "SearchValue (string) passed to the parent callback"
        },
        {
          "id": "method:j1tqds:handlekeypress__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:j1tqds:handlekeypress__entry__method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition",
          "from": "method:j1tqds:handlekeypress__entry",
          "to": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition__method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__true",
          "from": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition",
          "to": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition__method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__false",
          "from": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__condition",
          "to": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__true__method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "from": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__true",
          "to": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__false__method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "from": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__false",
          "to": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.78
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge__method:j1tqds:handlekeypress__action_29_guard_clause_29__condition",
          "from": "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
          "to": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition__method:j1tqds:handlekeypress__action_29_guard_clause_29__true",
          "from": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition",
          "to": "method:j1tqds:handlekeypress__action_29_guard_clause_29__true",
          "kind": "condition-true",
          "label": "invoke callback",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition__method:j1tqds:handlekeypress__action_29_guard_clause_29__false",
          "from": "method:j1tqds:handlekeypress__action_29_guard_clause_29__condition",
          "to": "method:j1tqds:handlekeypress__action_29_guard_clause_29__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__true__method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "from": "method:j1tqds:handlekeypress__action_29_guard_clause_29__true",
          "to": "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__false__method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "from": "method:j1tqds:handlekeypress__action_29_guard_clause_29__false",
          "to": "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge__method:j1tqds:handlekeypress__action_31_handlekeypress_await_31_1__await",
          "from": "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge",
          "to": "method:j1tqds:handlekeypress__action_31_handlekeypress_await_31_1__await",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.81
        },
        {
          "id": "method:j1tqds:handlekeypress__action_31_handlekeypress_await_31_1__await__method:j1tqds:handlekeypress__action_31_external_call_31__linear",
          "from": "method:j1tqds:handlekeypress__action_31_handlekeypress_await_31_1__await",
          "to": "method:j1tqds:handlekeypress__action_31_external_call_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:j1tqds:handlekeypress__action_31_external_call_31__linear__call_method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync",
          "from": "method:j1tqds:handlekeypress__action_31_external_call_31__linear",
          "to": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync",
          "kind": "call",
          "label": "SearchValue (string) passed to the parent callback",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.88
        },
        {
          "id": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync__implicit_return",
          "from": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync",
          "to": "method:j1tqds:handlekeypress__implicit_return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync__jump_NexusReader_UI_Shared_Components_Atoms_NexusSearchBox_razor_OnSearch_InvokeAsync",
          "fromNodeId": "method:j1tqds:handlekeypress__call_31_OnSearch_InvokeAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "targetHint": "OnSearch.InvokeAsync",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "reason": "Call target OnSearch.InvokeAsync in NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:j1tqds:handlekeypress__action_29_handlekeypress_branch_29_0__merge",
        "method:j1tqds:handlekeypress__action_29_guard_clause_29__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 27,
        "end": 33
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 27,
          "summary": "Control-flow fragment extracted for method HandleKeyPress.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sx9yhe:clearsearch__fragment",
      "ownerFileId": "file:igeyi7:nexussearchbox-razor",
      "ownerSymbolId": "method:1sx9yhe:clearsearch",
      "ownerSymbolName": "ClearSearch",
      "entryNodeId": "method:1sx9yhe:clearsearch__entry",
      "exitNodeIds": [
        "method:1sx9yhe:clearsearch__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1sx9yhe:clearsearch__entry",
          "kind": "entry",
          "label": "ClearSearch entry",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.99,
          "detail": "Clears the local search input value."
        },
        {
          "id": "method:1sx9yhe:clearsearch__action_37_state_mutation_37__linear",
          "kind": "statement",
          "label": "Resets SearchValue",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7,
          "detail": "Sets SearchValue = string.Empty causing IsActive to become false and UI to reflect cleared state."
        },
        {
          "id": "method:1sx9yhe:clearsearch__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1sx9yhe:clearsearch__entry__method:1sx9yhe:clearsearch__action_37_state_mutation_37__linear",
          "from": "method:1sx9yhe:clearsearch__entry",
          "to": "method:1sx9yhe:clearsearch__action_37_state_mutation_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1sx9yhe:clearsearch__action_37_state_mutation_37__linear__implicit_return",
          "from": "method:1sx9yhe:clearsearch__action_37_state_mutation_37__linear",
          "to": "method:1sx9yhe:clearsearch__implicit_return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 35,
        "end": 38
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 35,
          "summary": "Control-flow fragment extracted for method ClearSearch.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1p9w1qk:isactive-getter__fragment",
      "ownerFileId": "file:igeyi7:nexussearchbox-razor",
      "ownerSymbolId": "method:1p9w1qk:isactive-getter",
      "ownerSymbolName": "IsActive (getter)",
      "entryNodeId": "method:1p9w1qk:isactive-getter__entry",
      "exitNodeIds": [
        "method:1p9w1qk:isactive-getter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1p9w1qk:isactive-getter__entry",
          "kind": "entry",
          "label": "IsActive (getter) entry",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.99,
          "detail": "Computed property that indicates if the search input contains text; used to toggle CSS state."
        },
        {
          "id": "method:1p9w1qk:isactive-getter__action_25_computed_25__linear",
          "kind": "statement",
          "label": "Determines active CSS state",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7,
          "detail": "Returns !string.IsNullOrEmpty(SearchValue); used in markup to add the 'active' class."
        },
        {
          "id": "method:1p9w1qk:isactive-getter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1p9w1qk:isactive-getter__entry__method:1p9w1qk:isactive-getter__action_25_computed_25__linear",
          "from": "method:1p9w1qk:isactive-getter__entry",
          "to": "method:1p9w1qk:isactive-getter__action_25_computed_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p9w1qk:isactive-getter__action_25_computed_25__linear__implicit_return",
          "from": "method:1p9w1qk:isactive-getter__action_25_computed_25__linear",
          "to": "method:1p9w1qk:isactive-getter__implicit_return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 25,
        "end": 25
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor",
          "line": 25,
          "summary": "Control-flow fragment extracted for method IsActive (getter).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10aseyf:componentrender__fragment",
      "ownerFileId": "file:184ajmn:nexustypography-razor",
      "ownerSymbolId": "method:10aseyf:componentrender",
      "ownerSymbolName": "ComponentRender",
      "entryNodeId": "method:10aseyf:componentrender__entry",
      "exitNodeIds": [
        "method:10aseyf:componentrender__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10aseyf:componentrender__entry",
          "kind": "entry",
          "label": "ComponentRender entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.99,
          "detail": "Renders a div with computed CSS classes, applies captured additional attributes, and injects ChildContent."
        },
        {
          "id": "method:10aseyf:componentrender__action_1_render_1__linear",
          "kind": "statement",
          "label": "Render root div",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7,
          "detail": "Emits <div class=\"nexus-typography @VariantCssClass @Class\" ...> and closes it on line 3"
        },
        {
          "id": "method:10aseyf:componentrender__action_1_attribute_capture_1__linear",
          "kind": "statement",
          "label": "Capture unmatched attributes",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7,
          "detail": "Applies AdditionalAttributes to the root div (Parameter with CaptureUnmatchedValues)"
        },
        {
          "id": "method:10aseyf:componentrender__call_1_VariantCssClass",
          "kind": "call",
          "label": "VariantCssClass",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.88,
          "detail": "none; used to compose CSS class string"
        },
        {
          "id": "method:10aseyf:componentrender__action_2_content_insertion_2__linear",
          "kind": "statement",
          "label": "Insert child content",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7,
          "detail": "Renders ChildContent inside the div"
        },
        {
          "id": "method:10aseyf:componentrender__call_2_ChildContent",
          "kind": "call",
          "label": "ChildContent",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.88,
          "detail": "RenderFragment invoked/placed into the div"
        },
        {
          "id": "method:10aseyf:componentrender__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10aseyf:componentrender__entry__method:10aseyf:componentrender__action_1_render_1__linear",
          "from": "method:10aseyf:componentrender__entry",
          "to": "method:10aseyf:componentrender__action_1_render_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10aseyf:componentrender__action_1_render_1__linear__method:10aseyf:componentrender__action_1_attribute_capture_1__linear",
          "from": "method:10aseyf:componentrender__action_1_render_1__linear",
          "to": "method:10aseyf:componentrender__action_1_attribute_capture_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10aseyf:componentrender__action_1_attribute_capture_1__linear__call_method:10aseyf:componentrender__call_1_VariantCssClass",
          "from": "method:10aseyf:componentrender__action_1_attribute_capture_1__linear",
          "to": "method:10aseyf:componentrender__call_1_VariantCssClass",
          "kind": "call",
          "label": "none; used to compose CSS class string",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.88
        },
        {
          "id": "method:10aseyf:componentrender__call_1_VariantCssClass__method:10aseyf:componentrender__action_2_content_insertion_2__linear",
          "from": "method:10aseyf:componentrender__call_1_VariantCssClass",
          "to": "method:10aseyf:componentrender__action_2_content_insertion_2__linear",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10aseyf:componentrender__action_2_content_insertion_2__linear__call_method:10aseyf:componentrender__call_2_ChildContent",
          "from": "method:10aseyf:componentrender__action_2_content_insertion_2__linear",
          "to": "method:10aseyf:componentrender__call_2_ChildContent",
          "kind": "call",
          "label": "RenderFragment invoked/placed into the div",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.88
        },
        {
          "id": "method:10aseyf:componentrender__call_2_ChildContent__implicit_return",
          "from": "method:10aseyf:componentrender__call_2_ChildContent",
          "to": "method:10aseyf:componentrender__implicit_return",
          "kind": "return",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:10aseyf:componentrender__call_1_VariantCssClass__jump_NexusReader_UI_Shared_Components_Atoms_NexusTypography_razor_VariantCssClass",
          "fromNodeId": "method:10aseyf:componentrender__call_1_VariantCssClass",
          "kind": "call-target",
          "targetNodeId": "method:1vxob4r:variantcssclass",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "targetHint": "VariantCssClass",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "reason": "Call target VariantCssClass resolved to NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor.",
          "status": "resolved"
        },
        {
          "id": "method:10aseyf:componentrender__call_2_ChildContent__jump_NexusReader_UI_Shared_Components_Atoms_NexusTypography_razor_ChildContent",
          "fromNodeId": "method:10aseyf:componentrender__call_2_ChildContent",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "targetHint": "ChildContent",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "reason": "Call target ChildContent in NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8299999999999998,
      "lineSpan": {
        "start": 1,
        "end": 3
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method ComponentRender.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1vxob4r:variantcssclass__fragment",
      "ownerFileId": "file:184ajmn:nexustypography-razor",
      "ownerSymbolId": "method:1vxob4r:variantcssclass",
      "ownerSymbolName": "VariantCssClass",
      "entryNodeId": "method:1vxob4r:variantcssclass__entry",
      "exitNodeIds": [
        "method:1vxob4r:variantcssclass__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1vxob4r:variantcssclass__entry",
          "kind": "entry",
          "label": "VariantCssClass entry",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.99,
          "detail": "Computes the CSS class name based on the selected TypographyVariant enum value."
        },
        {
          "id": "method:1vxob4r:variantcssclass__action_11_branch_clause_11__linear",
          "kind": "statement",
          "label": "Switch over TypographyVariant",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7,
          "detail": "Returns one of three CSS class strings depending on Variant"
        },
        {
          "id": "method:1vxob4r:variantcssclass__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1vxob4r:variantcssclass__entry__method:1vxob4r:variantcssclass__action_11_branch_clause_11__linear",
          "from": "method:1vxob4r:variantcssclass__entry",
          "to": "method:1vxob4r:variantcssclass__action_11_branch_clause_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1vxob4r:variantcssclass__action_11_branch_clause_11__linear__implicit_return",
          "from": "method:1vxob4r:variantcssclass__action_11_branch_clause_11__linear",
          "to": "method:1vxob4r:variantcssclass__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor",
          "line": 11,
          "summary": "Control-flow fragment extracted for method VariantCssClass.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16cvbhq:onparameterssetasync__fragment",
      "ownerFileId": "file:83c16m:aiassistantbubble-razor",
      "ownerSymbolId": "method:16cvbhq:onparameterssetasync",
      "ownerSymbolName": "OnParametersSetAsync",
      "entryNodeId": "method:16cvbhq:onparameterssetasync__entry",
      "exitNodeIds": [
        "method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return",
        "method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return",
        "method:16cvbhq:onparameterssetasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16cvbhq:onparameterssetasync__entry",
          "kind": "entry",
          "label": "OnParametersSetAsync entry",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.99,
          "detail": "Lifecycle hook: when parameters change, triggers fetching/streaming of AI content if component is interactive and the block id changed."
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition",
          "kind": "condition",
          "label": "!_isInteractive",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "if (!_isInteractive) return;"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__true",
          "kind": "branch-true",
          "label": "return",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition",
          "kind": "condition",
          "label": "!_isInteractive",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (!_isInteractive)"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(ContextBlockId) || ContextBlockId == _lastFetchedBlockId",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "prevents redundant fetches"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__true",
          "kind": "branch-true",
          "label": "return",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__false",
          "kind": "branch-false",
          "label": "fetch",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "kind": "statement",
          "label": "merge",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(ContextBlockId) || ContextBlockId == _lastFetchedBlockId",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrEmpty(ContextBlockId) || ContextBlockId == _lastFetchedBlockId)"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_65_state_change_65__linear",
          "kind": "statement",
          "label": "Update last fetched block id",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_lastFetchedBlockId = ContextBlockId"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_66_onparameterssetasync_await_66_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "await FetchAndStreamAsync();"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync",
          "kind": "call",
          "label": "FetchAndStreamAsync",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16cvbhq:onparameterssetasync__entry__method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition",
          "from": "method:16cvbhq:onparameterssetasync__entry",
          "to": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition__method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__true",
          "from": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__true",
          "kind": "condition-true",
          "label": "return",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition__method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__false",
          "from": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__true__method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__true",
          "to": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__false__method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__false",
          "to": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge__method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition",
          "from": "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
          "to": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition__method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__true",
          "from": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition__method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__false",
          "from": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__true__method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__true",
          "to": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__false__method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__false",
          "to": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge__method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return",
          "from": "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
          "to": "method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return__method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition",
          "from": "method:16cvbhq:onparameterssetasync__action_59_onparameterssetasync_return_59_1__return",
          "to": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition__method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__true",
          "from": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__true",
          "kind": "condition-true",
          "label": "return",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition__method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__false",
          "from": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__false",
          "kind": "condition-false",
          "label": "fetch",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__true__method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__true",
          "to": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__false__method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__false",
          "to": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge__method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition",
          "from": "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
          "to": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition__method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__true",
          "from": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition__method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__false",
          "from": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__condition",
          "to": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__true__method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__true",
          "to": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__false__method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "from": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__false",
          "to": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge__method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return",
          "from": "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge",
          "to": "method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return__method:16cvbhq:onparameterssetasync__action_65_state_change_65__linear",
          "from": "method:16cvbhq:onparameterssetasync__action_63_onparameterssetasync_return_63_3__return",
          "to": "method:16cvbhq:onparameterssetasync__action_65_state_change_65__linear",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_65_state_change_65__linear__method:16cvbhq:onparameterssetasync__action_66_onparameterssetasync_await_66_4__await",
          "from": "method:16cvbhq:onparameterssetasync__action_65_state_change_65__linear",
          "to": "method:16cvbhq:onparameterssetasync__action_66_onparameterssetasync_await_66_4__await",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__action_66_onparameterssetasync_await_66_4__await__call_method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync",
          "from": "method:16cvbhq:onparameterssetasync__action_66_onparameterssetasync_await_66_4__await",
          "to": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync",
          "kind": "call",
          "label": "no args",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88
        },
        {
          "id": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync__implicit_return",
          "from": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync",
          "to": "method:16cvbhq:onparameterssetasync__implicit_return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync__jump_unknown_FetchAndStreamAsync",
          "fromNodeId": "method:16cvbhq:onparameterssetasync__call_66_FetchAndStreamAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "FetchAndStreamAsync",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "reason": "Call target FetchAndStreamAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:16cvbhq:onparameterssetasync__action_58_guard_clause_58__merge",
        "method:16cvbhq:onparameterssetasync__action_58_onparameterssetasync_branch_58_0__merge",
        "method:16cvbhq:onparameterssetasync__action_62_guard_clause_62__merge",
        "method:16cvbhq:onparameterssetasync__action_62_onparameterssetasync_branch_62_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 56,
        "end": 67
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 56,
          "summary": "Control-flow fragment extracted for method OnParametersSetAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bl306q:onafterrenderasync__fragment",
      "ownerFileId": "file:83c16m:aiassistantbubble-razor",
      "ownerSymbolId": "method:1bl306q:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:1bl306q:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:1bl306q:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1bl306q:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.99,
          "detail": "Lifecycle hook: on first render marks component interactive and triggers initial fetch/stream if a ContextBlockId is present."
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__true",
          "kind": "branch-true",
          "label": "initialize interactive + maybe fetch",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__false",
          "kind": "branch-false",
          "label": "noop",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "kind": "statement",
          "label": "merge",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_73_state_change_73__linear",
          "kind": "statement",
          "label": "Enable interactivity flag",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_isInteractive = true"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(ContextBlockId)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__true",
          "kind": "branch-true",
          "label": "fetch",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(ContextBlockId)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(ContextBlockId))"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_76_state_change_76__linear",
          "kind": "statement",
          "label": "Record last fetched id",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_lastFetchedBlockId = ContextBlockId"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_77_onafterrenderasync_await_77_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "await FetchAndStreamAsync();"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync",
          "kind": "call",
          "label": "FetchAndStreamAsync",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1bl306q:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1bl306q:onafterrenderasync__entry__method:1bl306q:onafterrenderasync__action_71_branch_71__condition",
          "from": "method:1bl306q:onafterrenderasync__entry",
          "to": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition__method:1bl306q:onafterrenderasync__action_71_branch_71__true",
          "from": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition",
          "to": "method:1bl306q:onafterrenderasync__action_71_branch_71__true",
          "kind": "condition-true",
          "label": "initialize interactive + maybe fetch",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition__method:1bl306q:onafterrenderasync__action_71_branch_71__false",
          "from": "method:1bl306q:onafterrenderasync__action_71_branch_71__condition",
          "to": "method:1bl306q:onafterrenderasync__action_71_branch_71__false",
          "kind": "condition-false",
          "label": "noop",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__true__method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "from": "method:1bl306q:onafterrenderasync__action_71_branch_71__true",
          "to": "method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__false__method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "from": "method:1bl306q:onafterrenderasync__action_71_branch_71__false",
          "to": "method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_branch_71__merge__method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition",
          "from": "method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
          "to": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition__method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__true",
          "from": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition",
          "to": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition__method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__false",
          "from": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__condition",
          "to": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__true__method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "from": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__true",
          "to": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__false__method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "from": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__false",
          "to": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge__method:1bl306q:onafterrenderasync__action_73_state_change_73__linear",
          "from": "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
          "to": "method:1bl306q:onafterrenderasync__action_73_state_change_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_73_state_change_73__linear__method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition",
          "from": "method:1bl306q:onafterrenderasync__action_73_state_change_73__linear",
          "to": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition__method:1bl306q:onafterrenderasync__action_74_guard_clause_74__true",
          "from": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition",
          "to": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__true",
          "kind": "condition-true",
          "label": "fetch",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition__method:1bl306q:onafterrenderasync__action_74_guard_clause_74__false",
          "from": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__condition",
          "to": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__true__method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "from": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__true",
          "to": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__false__method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "from": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__false",
          "to": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge__method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition",
          "from": "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
          "to": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition__method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__true",
          "from": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition",
          "to": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition__method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__false",
          "from": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__condition",
          "to": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__true__method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "from": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__true",
          "to": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__false__method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "from": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__false",
          "to": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge__method:1bl306q:onafterrenderasync__action_76_state_change_76__linear",
          "from": "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge",
          "to": "method:1bl306q:onafterrenderasync__action_76_state_change_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_76_state_change_76__linear__method:1bl306q:onafterrenderasync__action_77_onafterrenderasync_await_77_2__await",
          "from": "method:1bl306q:onafterrenderasync__action_76_state_change_76__linear",
          "to": "method:1bl306q:onafterrenderasync__action_77_onafterrenderasync_await_77_2__await",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1bl306q:onafterrenderasync__action_77_onafterrenderasync_await_77_2__await__call_method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync",
          "from": "method:1bl306q:onafterrenderasync__action_77_onafterrenderasync_await_77_2__await",
          "to": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync",
          "kind": "call",
          "label": "no args",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync__implicit_return",
          "from": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync",
          "to": "method:1bl306q:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync__jump_unknown_FetchAndStreamAsync",
          "fromNodeId": "method:1bl306q:onafterrenderasync__call_77_FetchAndStreamAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "FetchAndStreamAsync",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "reason": "Call target FetchAndStreamAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1bl306q:onafterrenderasync__action_71_branch_71__merge",
        "method:1bl306q:onafterrenderasync__action_71_onafterrenderasync_branch_71_0__merge",
        "method:1bl306q:onafterrenderasync__action_74_guard_clause_74__merge",
        "method:1bl306q:onafterrenderasync__action_74_onafterrenderasync_branch_74_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 69,
        "end": 80
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 69,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:9ujebp:fetchandstreamasync__fragment",
      "ownerFileId": "file:83c16m:aiassistantbubble-razor",
      "ownerSymbolId": "method:9ujebp:fetchandstreamasync",
      "ownerSymbolName": "FetchAndStreamAsync",
      "entryNodeId": "method:9ujebp:fetchandstreamasync__entry",
      "exitNodeIds": [
        "method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return",
        "method:9ujebp:fetchandstreamasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:9ujebp:fetchandstreamasync__entry",
          "kind": "entry",
          "label": "FetchAndStreamAsync entry",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.99,
          "detail": "Orchestrates requesting a summary/quiz from the KnowledgeCoordinator, handles fallbacks, streams the summary word-by-word to the UI, and manages cancellation, errors, and state flags."
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_85_side_effect_85__linear",
          "kind": "statement",
          "label": "Cancel in-progress stream",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_streamCts?.Cancel()"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_86_side_effect_86__linear",
          "kind": "statement",
          "label": "Create new CancellationTokenSource",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_streamCts = new CancellationTokenSource()"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_89_state_change_89__linear",
          "kind": "statement",
          "label": "Set loading/stream flags and clear displayed text/packet",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_isLoading=true; _isStreaming=false; _displayedText=string.Empty; _packet=null"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_95_fetchandstreamasync_try_95_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_101_fetchandstreamasync_await_101_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "var result = await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze);"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_101_external_call_101__linear",
          "kind": "http-call",
          "label": "Request summary and quiz from coordinator",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "await Coordinator.RequestSummaryAndQuizAsync(contentToAnalyze)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "RequestSummaryAndQuizAsync",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88,
          "detail": "contentToAnalyze (string: FullPageContent or [ID: ContextBlockId]\\nDialogue)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_102_mapping_102__linear",
          "kind": "statement",
          "label": "Apply coordinator result to local packet",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_packet = result.IsSuccess ? result.Value : null"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(summary)",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "sets _displayedText, _isLoading=false, StateHasChanged(), return"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__true",
          "kind": "branch-true",
          "label": "use Dialogue or default message and return",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__false",
          "kind": "branch-false",
          "label": "continue streaming",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(summary)",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(summary))"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_117_state_change_117__linear",
          "kind": "statement",
          "label": "Begin streaming",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_isLoading=false; _isStreaming=true"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "kind": "loop-entry",
          "label": "foreach (var word in words)",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "appends words with Task.Delay(40, token) between words"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body",
          "kind": "loop-body",
          "label": "appends words with Task.Delay(40, token) between words",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "kind": "loop-entry",
          "label": "var word in words",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86,
          "detail": "foreach (var word in words)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body",
          "kind": "loop-body",
          "label": "foreach (var word in words)",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_cancellation_check_124__linear",
          "kind": "statement",
          "label": "Stop streaming if token canceled",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "if (token.IsCancellationRequested) break;"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition",
          "kind": "condition",
          "label": "token.IsCancellationRequested",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9,
          "detail": "if (token.IsCancellationRequested) break;"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_127_fetchandstreamasync_await_127_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "await Task.Delay(40, token); // ~25 words/sec"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_130_error_handling_130__linear",
          "kind": "statement",
          "label": "Suppress OperationCanceledException",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "catch (OperationCanceledException) { /* silent drop */ }"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_130_fetchandstreamasync_catch_130_7__catch",
          "kind": "catch",
          "label": "catch OperationCanceledException",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86,
          "detail": "catch (OperationCanceledException)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_134_error_handling_134__linear",
          "kind": "statement",
          "label": "On unexpected error set fallback text and log",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_displayedText = fallback; Console.WriteLine(...)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_134_fetchandstreamasync_catch_134_8__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_139_fetchandstreamasync_finally_139_9__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_139_finally_139__finally",
          "kind": "finally",
          "label": "Clear streaming flag and refresh UI",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_isStreaming=false; StateHasChanged()"
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:9ujebp:fetchandstreamasync__entry__method:9ujebp:fetchandstreamasync__action_85_side_effect_85__linear",
          "from": "method:9ujebp:fetchandstreamasync__entry",
          "to": "method:9ujebp:fetchandstreamasync__action_85_side_effect_85__linear",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_85_side_effect_85__linear__method:9ujebp:fetchandstreamasync__action_86_side_effect_86__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_85_side_effect_85__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_86_side_effect_86__linear",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_86_side_effect_86__linear__method:9ujebp:fetchandstreamasync__action_89_state_change_89__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_86_side_effect_86__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_89_state_change_89__linear",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_89_state_change_89__linear__method:9ujebp:fetchandstreamasync__action_95_fetchandstreamasync_try_95_0__try",
          "from": "method:9ujebp:fetchandstreamasync__action_89_state_change_89__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_95_fetchandstreamasync_try_95_0__try",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.84
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_95_fetchandstreamasync_try_95_0__try__method:9ujebp:fetchandstreamasync__action_101_fetchandstreamasync_await_101_1__await",
          "from": "method:9ujebp:fetchandstreamasync__action_95_fetchandstreamasync_try_95_0__try",
          "to": "method:9ujebp:fetchandstreamasync__action_101_fetchandstreamasync_await_101_1__await",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_101_fetchandstreamasync_await_101_1__await__method:9ujebp:fetchandstreamasync__action_101_external_call_101__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_101_fetchandstreamasync_await_101_1__await",
          "to": "method:9ujebp:fetchandstreamasync__action_101_external_call_101__linear",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_101_external_call_101__linear__call_method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync",
          "from": "method:9ujebp:fetchandstreamasync__action_101_external_call_101__linear",
          "to": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "contentToAnalyze (string: FullPageContent or [ID: ContextBlockId]\\nDialogue)",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync__method:9ujebp:fetchandstreamasync__action_102_mapping_102__linear",
          "from": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync",
          "to": "method:9ujebp:fetchandstreamasync__action_102_mapping_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_102_mapping_102__linear__method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition",
          "from": "method:9ujebp:fetchandstreamasync__action_102_mapping_102__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition__method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__true",
          "from": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__true",
          "kind": "condition-true",
          "label": "use Dialogue or default message and return",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition__method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__false",
          "from": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__false",
          "kind": "condition-false",
          "label": "continue streaming",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__true__method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__true",
          "to": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__false__method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__false",
          "to": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge__method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition",
          "from": "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
          "to": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition__method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__true",
          "from": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition__method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__false",
          "from": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__true__method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__true",
          "to": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__false__method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__false",
          "to": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge__method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return",
          "from": "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
          "to": "method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return",
          "kind": "return",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return__method:9ujebp:fetchandstreamasync__action_117_state_change_117__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_114_fetchandstreamasync_return_114_3__return",
          "to": "method:9ujebp:fetchandstreamasync__action_117_state_change_117__linear",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_117_state_change_117__linear__method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "from": "method:9ujebp:fetchandstreamasync__action_117_state_change_117__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry__method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body",
          "from": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "to": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body",
          "kind": "loop-body",
          "label": "append word + delay",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body__method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "from": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body",
          "to": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry__method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_exit",
          "from": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
          "to": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_exit",
          "kind": "loop-exit",
          "label": "break on cancellation",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_exit__method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "from": "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_exit",
          "to": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry__method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body",
          "from": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "to": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body",
          "kind": "loop-body",
          "label": "var word in words",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body__method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "from": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body",
          "to": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry__method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_exit",
          "from": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry",
          "to": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_exit__method:9ujebp:fetchandstreamasync__action_124_cancellation_check_124__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_exit",
          "to": "method:9ujebp:fetchandstreamasync__action_124_cancellation_check_124__linear",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_cancellation_check_124__linear__method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition",
          "from": "method:9ujebp:fetchandstreamasync__action_124_cancellation_check_124__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition__method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__true",
          "from": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition__method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__false",
          "from": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__condition",
          "to": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__true__method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__true",
          "to": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__false__method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "from": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__false",
          "to": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.9
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge__method:9ujebp:fetchandstreamasync__action_127_fetchandstreamasync_await_127_6__await",
          "from": "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge",
          "to": "method:9ujebp:fetchandstreamasync__action_127_fetchandstreamasync_await_127_6__await",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_127_fetchandstreamasync_await_127_6__await__method:9ujebp:fetchandstreamasync__action_130_error_handling_130__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_127_fetchandstreamasync_await_127_6__await",
          "to": "method:9ujebp:fetchandstreamasync__action_130_error_handling_130__linear",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_130_error_handling_130__linear__method:9ujebp:fetchandstreamasync__action_130_fetchandstreamasync_catch_130_7__catch",
          "from": "method:9ujebp:fetchandstreamasync__action_130_error_handling_130__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_130_fetchandstreamasync_catch_130_7__catch",
          "kind": "exception",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_130_fetchandstreamasync_catch_130_7__catch__method:9ujebp:fetchandstreamasync__action_134_error_handling_134__linear",
          "from": "method:9ujebp:fetchandstreamasync__action_130_fetchandstreamasync_catch_130_7__catch",
          "to": "method:9ujebp:fetchandstreamasync__action_134_error_handling_134__linear",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_134_error_handling_134__linear__method:9ujebp:fetchandstreamasync__action_134_fetchandstreamasync_catch_134_8__catch",
          "from": "method:9ujebp:fetchandstreamasync__action_134_error_handling_134__linear",
          "to": "method:9ujebp:fetchandstreamasync__action_134_fetchandstreamasync_catch_134_8__catch",
          "kind": "exception",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.86
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_134_fetchandstreamasync_catch_134_8__catch__method:9ujebp:fetchandstreamasync__action_139_fetchandstreamasync_finally_139_9__finally",
          "from": "method:9ujebp:fetchandstreamasync__action_134_fetchandstreamasync_catch_134_8__catch",
          "to": "method:9ujebp:fetchandstreamasync__action_139_fetchandstreamasync_finally_139_9__finally",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.84
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_139_fetchandstreamasync_finally_139_9__finally__method:9ujebp:fetchandstreamasync__action_139_finally_139__finally",
          "from": "method:9ujebp:fetchandstreamasync__action_139_fetchandstreamasync_finally_139_9__finally",
          "to": "method:9ujebp:fetchandstreamasync__action_139_finally_139__finally",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9ujebp:fetchandstreamasync__action_139_finally_139__finally__implicit_return",
          "from": "method:9ujebp:fetchandstreamasync__action_139_finally_139__finally",
          "to": "method:9ujebp:fetchandstreamasync__implicit_return",
          "kind": "return",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync__jump_unknown_RequestSummaryAndQuizAsync",
          "fromNodeId": "method:9ujebp:fetchandstreamasync__call_101_RequestSummaryAndQuizAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "RequestSummaryAndQuizAsync",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "reason": "Call target RequestSummaryAndQuizAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_body__method:9ujebp:fetchandstreamasync__action_121_loop_121__loop_entry",
        "method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_body__method:9ujebp:fetchandstreamasync__action_122_fetchandstreamasync_loop_122_4__loop_entry"
      ],
      "mergeNodeIds": [
        "method:9ujebp:fetchandstreamasync__action_106_guard_clause_106__merge",
        "method:9ujebp:fetchandstreamasync__action_106_fetchandstreamasync_branch_106_2__merge",
        "method:9ujebp:fetchandstreamasync__action_124_fetchandstreamasync_guard_clause_124_5__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 82,
        "end": 144
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 82,
          "summary": "Control-flow fragment extracted for method FetchAndStreamAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1naqltb:handleactionclick__fragment",
      "ownerFileId": "file:83c16m:aiassistantbubble-razor",
      "ownerSymbolId": "method:1naqltb:handleactionclick",
      "ownerSymbolName": "HandleActionClick",
      "entryNodeId": "method:1naqltb:handleactionclick__entry",
      "exitNodeIds": [
        "method:1naqltb:handleactionclick__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1naqltb:handleactionclick__entry",
          "kind": "entry",
          "label": "HandleActionClick entry",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.99,
          "detail": "Handles UI action button clicks: triggers quiz request when action indicates 'quiz' and forwards action via the OnActionTriggered callback if provided."
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition",
          "kind": "condition",
          "label": "action.Contains(\"quiz\", StringComparison.OrdinalIgnoreCase)",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (action.Contains(\"quiz\", StringComparison.OrdinalIgnoreCase))"
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__condition",
          "kind": "condition",
          "label": "action.Contains(\"quiz\", StringComparison.OrdinalIgnoreCase)",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__true",
          "kind": "branch-true",
          "label": "invoke quiz request",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "kind": "statement",
          "label": "merge",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_150_handleactionclick_await_150_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "await QuizState.RequestQuiz(ContextBlockId);"
        },
        {
          "id": "method:1naqltb:handleactionclick__call_150_RequestQuiz",
          "kind": "call",
          "label": "RequestQuiz",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88,
          "detail": "ContextBlockId (string)"
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_event_153__linear",
          "kind": "statement",
          "label": "Invoke external callback when attached",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "await OnActionTriggered.InvokeAsync(action)"
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition",
          "kind": "condition",
          "label": "OnActionTriggered.HasDelegate",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78,
          "detail": "if (OnActionTriggered.HasDelegate)"
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_155_handleactionclick_await_155_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81,
          "detail": "await OnActionTriggered.InvokeAsync(action);"
        },
        {
          "id": "method:1naqltb:handleactionclick__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1naqltb:handleactionclick__entry__method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition",
          "from": "method:1naqltb:handleactionclick__entry",
          "to": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition__method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__true",
          "from": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition",
          "to": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition__method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__false",
          "from": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__condition",
          "to": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__true__method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "from": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__true",
          "to": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__false__method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "from": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__false",
          "to": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge__method:1naqltb:handleactionclick__action_148_branch_148__condition",
          "from": "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
          "to": "method:1naqltb:handleactionclick__action_148_branch_148__condition",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__condition__method:1naqltb:handleactionclick__action_148_branch_148__true",
          "from": "method:1naqltb:handleactionclick__action_148_branch_148__condition",
          "to": "method:1naqltb:handleactionclick__action_148_branch_148__true",
          "kind": "condition-true",
          "label": "invoke quiz request",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__condition__method:1naqltb:handleactionclick__action_148_branch_148__false",
          "from": "method:1naqltb:handleactionclick__action_148_branch_148__condition",
          "to": "method:1naqltb:handleactionclick__action_148_branch_148__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__true__method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "from": "method:1naqltb:handleactionclick__action_148_branch_148__true",
          "to": "method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__false__method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "from": "method:1naqltb:handleactionclick__action_148_branch_148__false",
          "to": "method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_148_branch_148__merge__method:1naqltb:handleactionclick__action_150_handleactionclick_await_150_1__await",
          "from": "method:1naqltb:handleactionclick__action_148_branch_148__merge",
          "to": "method:1naqltb:handleactionclick__action_150_handleactionclick_await_150_1__await",
          "kind": "next",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1naqltb:handleactionclick__action_150_handleactionclick_await_150_1__await__call_method:1naqltb:handleactionclick__call_150_RequestQuiz",
          "from": "method:1naqltb:handleactionclick__action_150_handleactionclick_await_150_1__await",
          "to": "method:1naqltb:handleactionclick__call_150_RequestQuiz",
          "kind": "call",
          "label": "ContextBlockId (string)",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1naqltb:handleactionclick__call_150_RequestQuiz__method:1naqltb:handleactionclick__action_153_event_153__linear",
          "from": "method:1naqltb:handleactionclick__call_150_RequestQuiz",
          "to": "method:1naqltb:handleactionclick__action_153_event_153__linear",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_event_153__linear__method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition",
          "from": "method:1naqltb:handleactionclick__action_153_event_153__linear",
          "to": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition__method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__true",
          "from": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition",
          "to": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition__method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__false",
          "from": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__condition",
          "to": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__true__method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "from": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__true",
          "to": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__false__method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "from": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__false",
          "to": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge__method:1naqltb:handleactionclick__action_155_handleactionclick_await_155_3__await",
          "from": "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge",
          "to": "method:1naqltb:handleactionclick__action_155_handleactionclick_await_155_3__await",
          "kind": "next",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1naqltb:handleactionclick__action_155_handleactionclick_await_155_3__await__implicit_return",
          "from": "method:1naqltb:handleactionclick__action_155_handleactionclick_await_155_3__await",
          "to": "method:1naqltb:handleactionclick__implicit_return",
          "kind": "return",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1naqltb:handleactionclick__call_150_RequestQuiz__jump_unknown_RequestQuiz",
          "fromNodeId": "method:1naqltb:handleactionclick__call_150_RequestQuiz",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "RequestQuiz",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "reason": "Call target RequestQuiz in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1naqltb:handleactionclick__action_148_handleactionclick_branch_148_0__merge",
        "method:1naqltb:handleactionclick__action_148_branch_148__merge",
        "method:1naqltb:handleactionclick__action_153_handleactionclick_branch_153_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 146,
        "end": 157
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 146,
          "summary": "Control-flow fragment extracted for method HandleActionClick.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1p3ftme:dispose__fragment",
      "ownerFileId": "file:83c16m:aiassistantbubble-razor",
      "ownerSymbolId": "method:1p3ftme:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:1p3ftme:dispose__entry",
      "exitNodeIds": [
        "method:1p3ftme:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1p3ftme:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.99,
          "detail": "Component disposal: cancels and disposes the streaming CancellationTokenSource to stop background streaming when the component is destroyed."
        },
        {
          "id": "method:1p3ftme:dispose__action_161_resource_cleanup_161__linear",
          "kind": "statement",
          "label": "Cancel active stream cancellation token",
          "line": 161,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_streamCts?.Cancel()"
        },
        {
          "id": "method:1p3ftme:dispose__action_162_resource_cleanup_162__linear",
          "kind": "statement",
          "label": "Dispose CancellationTokenSource",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7,
          "detail": "_streamCts?.Dispose()"
        },
        {
          "id": "method:1p3ftme:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1p3ftme:dispose__entry__method:1p3ftme:dispose__action_161_resource_cleanup_161__linear",
          "from": "method:1p3ftme:dispose__entry",
          "to": "method:1p3ftme:dispose__action_161_resource_cleanup_161__linear",
          "kind": "next",
          "line": 161,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3ftme:dispose__action_161_resource_cleanup_161__linear__method:1p3ftme:dispose__action_162_resource_cleanup_162__linear",
          "from": "method:1p3ftme:dispose__action_161_resource_cleanup_161__linear",
          "to": "method:1p3ftme:dispose__action_162_resource_cleanup_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3ftme:dispose__action_162_resource_cleanup_162__linear__implicit_return",
          "from": "method:1p3ftme:dispose__action_162_resource_cleanup_162__linear",
          "to": "method:1p3ftme:dispose__implicit_return",
          "kind": "return",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 159,
        "end": 163
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor",
          "line": 159,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:gfuk2l:onparametersset__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:gfuk2l:onparametersset",
      "ownerSymbolName": "OnParametersSet",
      "entryNodeId": "method:gfuk2l:onparametersset__entry",
      "exitNodeIds": [
        "method:gfuk2l:onparametersset__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:gfuk2l:onparametersset__entry",
          "kind": "entry",
          "label": "OnParametersSet entry",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Resets cached result when Answer or Context parameters change."
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition",
          "kind": "condition",
          "label": "Answer != _previousAnswer || Context != _previousContext",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78,
          "detail": "if (Answer != _previousAnswer || Context != _previousContext)"
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition",
          "kind": "condition",
          "label": "Answer != _previousAnswer || Context != _previousContext",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "_result = null; _previousAnswer = Answer; _previousContext = Context;"
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__true",
          "kind": "branch-true",
          "label": "reset _result",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__false",
          "kind": "branch-false",
          "label": "update previous values",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:gfuk2l:onparametersset__entry__method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition",
          "from": "method:gfuk2l:onparametersset__entry",
          "to": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition__method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__true",
          "from": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition",
          "to": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition__method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__false",
          "from": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__condition",
          "to": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__true__method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "from": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__true",
          "to": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__false__method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "from": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__false",
          "to": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge__method:gfuk2l:onparametersset__action_35_guard_clause_35__condition",
          "from": "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
          "to": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition__method:gfuk2l:onparametersset__action_35_guard_clause_35__true",
          "from": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition",
          "to": "method:gfuk2l:onparametersset__action_35_guard_clause_35__true",
          "kind": "condition-true",
          "label": "reset _result",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition__method:gfuk2l:onparametersset__action_35_guard_clause_35__false",
          "from": "method:gfuk2l:onparametersset__action_35_guard_clause_35__condition",
          "to": "method:gfuk2l:onparametersset__action_35_guard_clause_35__false",
          "kind": "condition-false",
          "label": "update previous values",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__true__method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "from": "method:gfuk2l:onparametersset__action_35_guard_clause_35__true",
          "to": "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__false__method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "from": "method:gfuk2l:onparametersset__action_35_guard_clause_35__false",
          "to": "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge__implicit_return",
          "from": "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge",
          "to": "method:gfuk2l:onparametersset__implicit_return",
          "kind": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:gfuk2l:onparametersset__action_35_onparametersset_branch_35_0__merge",
        "method:gfuk2l:onparametersset__action_35_guard_clause_35__merge"
      ],
      "language": "unknown",
      "confidence": 0.97,
      "lineSpan": {
        "start": 33,
        "end": 41
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 33,
          "summary": "Control-flow fragment extracted for method OnParametersSet.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mes1h8:onparameterssetasync__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:mes1h8:onparameterssetasync",
      "ownerSymbolName": "OnParametersSetAsync",
      "entryNodeId": "method:mes1h8:onparameterssetasync__entry",
      "exitNodeIds": [
        "method:mes1h8:onparameterssetasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mes1h8:onparameterssetasync__entry",
          "kind": "entry",
          "label": "OnParametersSetAsync entry",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Triggers a background groundedness check if component is interactive and inputs are present and no result cached."
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition",
          "kind": "condition",
          "label": "_isInteractive && !string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "await RunCheck();"
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__true",
          "kind": "branch-true",
          "label": "invoke RunCheck",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition",
          "kind": "condition",
          "label": "_isInteractive && !string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78,
          "detail": "if (_isInteractive && !string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null)"
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_47_onparameterssetasync_await_47_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81,
          "detail": "await RunCheck();"
        },
        {
          "id": "method:mes1h8:onparameterssetasync__call_47_RunCheck",
          "kind": "call",
          "label": "RunCheck",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:mes1h8:onparameterssetasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mes1h8:onparameterssetasync__entry__method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition",
          "from": "method:mes1h8:onparameterssetasync__entry",
          "to": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition__method:mes1h8:onparameterssetasync__action_45_guard_clause_45__true",
          "from": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition",
          "to": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__true",
          "kind": "condition-true",
          "label": "invoke RunCheck",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition__method:mes1h8:onparameterssetasync__action_45_guard_clause_45__false",
          "from": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__condition",
          "to": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__true__method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "from": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__true",
          "to": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__false__method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "from": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__false",
          "to": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge__method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition",
          "from": "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
          "to": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition__method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true",
          "from": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition",
          "to": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition__method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false",
          "from": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__condition",
          "to": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true__method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "from": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__true",
          "to": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false__method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "from": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__false",
          "to": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge__method:mes1h8:onparameterssetasync__action_47_onparameterssetasync_await_47_1__await",
          "from": "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge",
          "to": "method:mes1h8:onparameterssetasync__action_47_onparameterssetasync_await_47_1__await",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81
        },
        {
          "id": "method:mes1h8:onparameterssetasync__action_47_onparameterssetasync_await_47_1__await__call_method:mes1h8:onparameterssetasync__call_47_RunCheck",
          "from": "method:mes1h8:onparameterssetasync__action_47_onparameterssetasync_await_47_1__await",
          "to": "method:mes1h8:onparameterssetasync__call_47_RunCheck",
          "kind": "call",
          "label": "no args",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88
        },
        {
          "id": "method:mes1h8:onparameterssetasync__call_47_RunCheck__implicit_return",
          "from": "method:mes1h8:onparameterssetasync__call_47_RunCheck",
          "to": "method:mes1h8:onparameterssetasync__implicit_return",
          "kind": "return",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mes1h8:onparameterssetasync__call_47_RunCheck__jump_unknown_RunCheck",
          "fromNodeId": "method:mes1h8:onparameterssetasync__call_47_RunCheck",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "RunCheck",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "reason": "Call target RunCheck in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:mes1h8:onparameterssetasync__action_45_guard_clause_45__merge",
        "method:mes1h8:onparameterssetasync__action_45_onparameterssetasync_branch_45_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.9799999999999998,
      "lineSpan": {
        "start": 43,
        "end": 49
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 43,
          "summary": "Control-flow fragment extracted for method OnParametersSetAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1nedo1:onafterrenderasync__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:1nedo1:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:1nedo1:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:1nedo1:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1nedo1:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Marks component as interactive on first render and triggers a check if needed."
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "_isInteractive = true; if inputs present && _result == null => await RunCheck();"
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__true",
          "kind": "branch-true",
          "label": "set _isInteractive true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__false",
          "kind": "branch-false",
          "label": "maybe RunCheck",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(Answer) && !string.IsNullOrEmpty(Context) && _result == null)"
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_58_onafterrenderasync_await_58_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81,
          "detail": "await RunCheck();"
        },
        {
          "id": "method:1nedo1:onafterrenderasync__call_58_RunCheck",
          "kind": "call",
          "label": "RunCheck",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1nedo1:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1nedo1:onafterrenderasync__entry__method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition",
          "from": "method:1nedo1:onafterrenderasync__entry",
          "to": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition__method:1nedo1:onafterrenderasync__action_53_guard_clause_53__true",
          "from": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition",
          "to": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__true",
          "kind": "condition-true",
          "label": "set _isInteractive true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition__method:1nedo1:onafterrenderasync__action_53_guard_clause_53__false",
          "from": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__condition",
          "to": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__false",
          "kind": "condition-false",
          "label": "maybe RunCheck",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__true__method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "from": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__true",
          "to": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__false__method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "from": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__false",
          "to": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge__method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition",
          "from": "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
          "to": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition__method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true",
          "from": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition",
          "to": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition__method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false",
          "from": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__condition",
          "to": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true__method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "from": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__true",
          "to": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false__method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "from": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__false",
          "to": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge__method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition",
          "from": "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
          "to": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition__method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true",
          "from": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition",
          "to": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition__method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false",
          "from": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__condition",
          "to": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true__method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "from": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__true",
          "to": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false__method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "from": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__false",
          "to": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge__method:1nedo1:onafterrenderasync__action_58_onafterrenderasync_await_58_2__await",
          "from": "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge",
          "to": "method:1nedo1:onafterrenderasync__action_58_onafterrenderasync_await_58_2__await",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1nedo1:onafterrenderasync__action_58_onafterrenderasync_await_58_2__await__call_method:1nedo1:onafterrenderasync__call_58_RunCheck",
          "from": "method:1nedo1:onafterrenderasync__action_58_onafterrenderasync_await_58_2__await",
          "to": "method:1nedo1:onafterrenderasync__call_58_RunCheck",
          "kind": "call",
          "label": "no args",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1nedo1:onafterrenderasync__call_58_RunCheck__implicit_return",
          "from": "method:1nedo1:onafterrenderasync__call_58_RunCheck",
          "to": "method:1nedo1:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1nedo1:onafterrenderasync__call_58_RunCheck__jump_unknown_RunCheck",
          "fromNodeId": "method:1nedo1:onafterrenderasync__call_58_RunCheck",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "RunCheck",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "reason": "Call target RunCheck in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1nedo1:onafterrenderasync__action_53_guard_clause_53__merge",
        "method:1nedo1:onafterrenderasync__action_53_onafterrenderasync_branch_53_0__merge",
        "method:1nedo1:onafterrenderasync__action_56_onafterrenderasync_branch_56_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 51,
        "end": 61
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 51,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:xt4lks:runcheck__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:xt4lks:runcheck",
      "ownerSymbolName": "RunCheck",
      "entryNodeId": "method:xt4lks:runcheck__entry",
      "exitNodeIds": [
        "method:xt4lks:runcheck__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:xt4lks:runcheck__entry",
          "kind": "entry",
          "label": "RunCheck entry",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Performs the verification: sets checking state, obtains tenant id from auth, requests groundedness verification, stores result on success, and clears checking state."
        },
        {
          "id": "method:xt4lks:runcheck__action_65_state_change_65__linear",
          "kind": "statement",
          "label": "enter checking",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "_isChecking = true; StateHasChanged();"
        },
        {
          "id": "method:xt4lks:runcheck__action_68_runcheck_await_68_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81,
          "detail": "var authState = await AuthProvider.GetAuthenticationStateAsync();"
        },
        {
          "id": "method:xt4lks:runcheck__action_68_external_call_68__linear",
          "kind": "http-call",
          "label": "Get authentication state",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "await AuthProvider.GetAuthenticationStateAsync() (reads current user/claims)"
        },
        {
          "id": "method:xt4lks:runcheck__action_69_runcheck_repository_read_69_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.86,
          "detail": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";"
        },
        {
          "id": "method:xt4lks:runcheck__action_69_mapping_69__linear",
          "kind": "statement",
          "label": "Derive tenant id",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "var tenantId = authState.User.FindFirst(\"TenantId\")?.Value ?? \"global\";"
        },
        {
          "id": "method:xt4lks:runcheck__action_71_runcheck_await_71_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81,
          "detail": "var res = await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId));"
        },
        {
          "id": "method:xt4lks:runcheck__action_71_external_call_71__linear",
          "kind": "http-call",
          "label": "Request groundedness verification",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "await Mediator.Send(new VerifyGroundednessCommand(Answer, Context, tenantId)); (dispatches to application handler)"
        },
        {
          "id": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler",
          "kind": "call",
          "label": "VerifyGroundednessCommand handler",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88,
          "detail": "new VerifyGroundednessCommand(Answer, Context, tenantId) sent via IMediator"
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition",
          "kind": "condition",
          "label": "res.IsSuccess",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78,
          "detail": "if (res.IsSuccess)"
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__condition",
          "kind": "condition",
          "label": "res.IsSuccess",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "if (res.IsSuccess) _result = res.Value;"
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__true",
          "kind": "branch-true",
          "label": "store result",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__false",
          "kind": "branch-false",
          "label": "ignore failure",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__merge",
          "kind": "statement",
          "label": "merge",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_77_state_change_77__linear",
          "kind": "statement",
          "label": "exit checking",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "_isChecking = false; StateHasChanged();"
        },
        {
          "id": "method:xt4lks:runcheck__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:xt4lks:runcheck__entry__method:xt4lks:runcheck__action_65_state_change_65__linear",
          "from": "method:xt4lks:runcheck__entry",
          "to": "method:xt4lks:runcheck__action_65_state_change_65__linear",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_65_state_change_65__linear__method:xt4lks:runcheck__action_68_runcheck_await_68_0__await",
          "from": "method:xt4lks:runcheck__action_65_state_change_65__linear",
          "to": "method:xt4lks:runcheck__action_68_runcheck_await_68_0__await",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81
        },
        {
          "id": "method:xt4lks:runcheck__action_68_runcheck_await_68_0__await__method:xt4lks:runcheck__action_68_external_call_68__linear",
          "from": "method:xt4lks:runcheck__action_68_runcheck_await_68_0__await",
          "to": "method:xt4lks:runcheck__action_68_external_call_68__linear",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_68_external_call_68__linear__method:xt4lks:runcheck__action_69_runcheck_repository_read_69_1__linear",
          "from": "method:xt4lks:runcheck__action_68_external_call_68__linear",
          "to": "method:xt4lks:runcheck__action_69_runcheck_repository_read_69_1__linear",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.86
        },
        {
          "id": "method:xt4lks:runcheck__action_69_runcheck_repository_read_69_1__linear__method:xt4lks:runcheck__action_69_mapping_69__linear",
          "from": "method:xt4lks:runcheck__action_69_runcheck_repository_read_69_1__linear",
          "to": "method:xt4lks:runcheck__action_69_mapping_69__linear",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_69_mapping_69__linear__method:xt4lks:runcheck__action_71_runcheck_await_71_2__await",
          "from": "method:xt4lks:runcheck__action_69_mapping_69__linear",
          "to": "method:xt4lks:runcheck__action_71_runcheck_await_71_2__await",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.81
        },
        {
          "id": "method:xt4lks:runcheck__action_71_runcheck_await_71_2__await__method:xt4lks:runcheck__action_71_external_call_71__linear",
          "from": "method:xt4lks:runcheck__action_71_runcheck_await_71_2__await",
          "to": "method:xt4lks:runcheck__action_71_external_call_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_71_external_call_71__linear__call_method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler",
          "from": "method:xt4lks:runcheck__action_71_external_call_71__linear",
          "to": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler",
          "kind": "call",
          "label": "new VerifyGroundednessCommand(Answer, Context, tenantId) sent via IMediator",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.88
        },
        {
          "id": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler__method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition",
          "from": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler",
          "to": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition__method:xt4lks:runcheck__action_72_runcheck_branch_72_3__true",
          "from": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition",
          "to": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition__method:xt4lks:runcheck__action_72_runcheck_branch_72_3__false",
          "from": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__condition",
          "to": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__true__method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "from": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__true",
          "to": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__false__method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "from": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__false",
          "to": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.78
        },
        {
          "id": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge__method:xt4lks:runcheck__action_72_branch_72__condition",
          "from": "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
          "to": "method:xt4lks:runcheck__action_72_branch_72__condition",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__condition__method:xt4lks:runcheck__action_72_branch_72__true",
          "from": "method:xt4lks:runcheck__action_72_branch_72__condition",
          "to": "method:xt4lks:runcheck__action_72_branch_72__true",
          "kind": "condition-true",
          "label": "store result",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__condition__method:xt4lks:runcheck__action_72_branch_72__false",
          "from": "method:xt4lks:runcheck__action_72_branch_72__condition",
          "to": "method:xt4lks:runcheck__action_72_branch_72__false",
          "kind": "condition-false",
          "label": "ignore failure",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__true__method:xt4lks:runcheck__action_72_branch_72__merge",
          "from": "method:xt4lks:runcheck__action_72_branch_72__true",
          "to": "method:xt4lks:runcheck__action_72_branch_72__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__false__method:xt4lks:runcheck__action_72_branch_72__merge",
          "from": "method:xt4lks:runcheck__action_72_branch_72__false",
          "to": "method:xt4lks:runcheck__action_72_branch_72__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_72_branch_72__merge__method:xt4lks:runcheck__action_77_state_change_77__linear",
          "from": "method:xt4lks:runcheck__action_72_branch_72__merge",
          "to": "method:xt4lks:runcheck__action_77_state_change_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:xt4lks:runcheck__action_77_state_change_77__linear__implicit_return",
          "from": "method:xt4lks:runcheck__action_77_state_change_77__linear",
          "to": "method:xt4lks:runcheck__implicit_return",
          "kind": "return",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler__jump_unknown_VerifyGroundednessCommand_handler",
          "fromNodeId": "method:xt4lks:runcheck__call_71_VerifyGroundednessCommand_handler",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "VerifyGroundednessCommand handler",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "reason": "Call target VerifyGroundednessCommand handler in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:xt4lks:runcheck__action_72_runcheck_branch_72_3__merge",
        "method:xt4lks:runcheck__action_72_branch_72__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 63,
        "end": 79
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 63,
          "summary": "Control-flow fragment extracted for method RunCheck.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8ug383:getstatusclass__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:8ug383:getstatusclass",
      "ownerSymbolName": "GetStatusClass",
      "entryNodeId": "method:8ug383:getstatusclass__entry",
      "exitNodeIds": [
        "method:8ug383:getstatusclass__action_86_getstatusclass_return_86_3__return"
      ],
      "nodes": [
        {
          "id": "method:8ug383:getstatusclass__entry",
          "kind": "entry",
          "label": "GetStatusClass entry",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Maps numeric groundedness score to a CSS status class with thresholds for high/medium/low."
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition",
          "kind": "condition",
          "label": "_result == null",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "if (_result == null) return \"\";"
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__true",
          "kind": "branch-true",
          "label": "return empty string",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__false",
          "kind": "branch-false",
          "label": "evaluate score",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "kind": "statement",
          "label": "merge",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition",
          "kind": "condition",
          "label": "_result == null",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result == null) return \"\";"
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.8, >= 0.5, else",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "returns CSS class based on score ranges"
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__true",
          "kind": "branch-true",
          "label": "status-high",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__false",
          "kind": "branch-false",
          "label": "status-medium",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__merge",
          "kind": "statement",
          "label": "merge",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.8",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result.Score >= 0.8) return \"status-high\";"
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.5",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result.Score >= 0.5) return \"status-medium\";"
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_86_getstatusclass_return_86_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "return \"status-low\";"
        }
      ],
      "edges": [
        {
          "id": "method:8ug383:getstatusclass__entry__method:8ug383:getstatusclass__action_83_guard_clause_83__condition",
          "from": "method:8ug383:getstatusclass__entry",
          "to": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition__method:8ug383:getstatusclass__action_83_guard_clause_83__true",
          "from": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition",
          "to": "method:8ug383:getstatusclass__action_83_guard_clause_83__true",
          "kind": "condition-true",
          "label": "return empty string",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition__method:8ug383:getstatusclass__action_83_guard_clause_83__false",
          "from": "method:8ug383:getstatusclass__action_83_guard_clause_83__condition",
          "to": "method:8ug383:getstatusclass__action_83_guard_clause_83__false",
          "kind": "condition-false",
          "label": "evaluate score",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__true__method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "from": "method:8ug383:getstatusclass__action_83_guard_clause_83__true",
          "to": "method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__false__method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "from": "method:8ug383:getstatusclass__action_83_guard_clause_83__false",
          "to": "method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_guard_clause_83__merge__method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition",
          "from": "method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
          "to": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition__method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__true",
          "from": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition",
          "to": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition__method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__false",
          "from": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__condition",
          "to": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__true__method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "from": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__true",
          "to": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__false__method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "from": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__false",
          "to": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge__method:8ug383:getstatusclass__action_84_branch_84__condition",
          "from": "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
          "to": "method:8ug383:getstatusclass__action_84_branch_84__condition",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__condition__method:8ug383:getstatusclass__action_84_branch_84__true",
          "from": "method:8ug383:getstatusclass__action_84_branch_84__condition",
          "to": "method:8ug383:getstatusclass__action_84_branch_84__true",
          "kind": "condition-true",
          "label": "status-high",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__condition__method:8ug383:getstatusclass__action_84_branch_84__false",
          "from": "method:8ug383:getstatusclass__action_84_branch_84__condition",
          "to": "method:8ug383:getstatusclass__action_84_branch_84__false",
          "kind": "condition-false",
          "label": "status-medium",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__true__method:8ug383:getstatusclass__action_84_branch_84__merge",
          "from": "method:8ug383:getstatusclass__action_84_branch_84__true",
          "to": "method:8ug383:getstatusclass__action_84_branch_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__false__method:8ug383:getstatusclass__action_84_branch_84__merge",
          "from": "method:8ug383:getstatusclass__action_84_branch_84__false",
          "to": "method:8ug383:getstatusclass__action_84_branch_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_branch_84__merge__method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition",
          "from": "method:8ug383:getstatusclass__action_84_branch_84__merge",
          "to": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition__method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__true",
          "from": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition",
          "to": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition__method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__false",
          "from": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__condition",
          "to": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__true__method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "from": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__true",
          "to": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__false__method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "from": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__false",
          "to": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge__method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition",
          "from": "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
          "to": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition__method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__true",
          "from": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition",
          "to": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition__method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__false",
          "from": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__condition",
          "to": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__true__method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "from": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__true",
          "to": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__false__method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "from": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__false",
          "to": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge__method:8ug383:getstatusclass__action_86_getstatusclass_return_86_3__return",
          "from": "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge",
          "to": "method:8ug383:getstatusclass__action_86_getstatusclass_return_86_3__return",
          "kind": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:8ug383:getstatusclass__action_83_guard_clause_83__merge",
        "method:8ug383:getstatusclass__action_83_getstatusclass_guard_clause_83_0__merge",
        "method:8ug383:getstatusclass__action_84_branch_84__merge",
        "method:8ug383:getstatusclass__action_84_getstatusclass_guard_clause_84_1__merge",
        "method:8ug383:getstatusclass__action_85_getstatusclass_guard_clause_85_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 81,
        "end": 87
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 81,
          "summary": "Control-flow fragment extracted for method GetStatusClass.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:zopugm:geticon__fragment",
      "ownerFileId": "file:108l4jq:groundednessbadge-razor",
      "ownerSymbolId": "method:zopugm:geticon",
      "ownerSymbolName": "GetIcon",
      "entryNodeId": "method:zopugm:geticon__entry",
      "exitNodeIds": [
        "method:zopugm:geticon__action_94_geticon_return_94_3__return"
      ],
      "nodes": [
        {
          "id": "method:zopugm:geticon__entry",
          "kind": "entry",
          "label": "GetIcon entry",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.99,
          "detail": "Selects an icon name based on groundedness score thresholds, with fallback for unknown."
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__condition",
          "kind": "condition",
          "label": "_result == null",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "if (_result == null) return \"help\";"
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__true",
          "kind": "branch-true",
          "label": "return 'help'",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__false",
          "kind": "branch-false",
          "label": "evaluate score",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition",
          "kind": "condition",
          "label": "_result == null",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result == null) return \"help\";"
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.8, >= 0.5, else",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "returns icon name string"
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__true",
          "kind": "branch-true",
          "label": "check-circle",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__false",
          "kind": "branch-false",
          "label": "info-circle",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.8",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result.Score >= 0.8) return \"check-circle\";"
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition",
          "kind": "condition",
          "label": "_result.Score >= 0.5",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9,
          "detail": "if (_result.Score >= 0.5) return \"info-circle\";"
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_94_geticon_return_94_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7,
          "detail": "return \"alert-triangle\";"
        }
      ],
      "edges": [
        {
          "id": "method:zopugm:geticon__entry__method:zopugm:geticon__action_91_guard_clause_91__condition",
          "from": "method:zopugm:geticon__entry",
          "to": "method:zopugm:geticon__action_91_guard_clause_91__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__condition__method:zopugm:geticon__action_91_guard_clause_91__true",
          "from": "method:zopugm:geticon__action_91_guard_clause_91__condition",
          "to": "method:zopugm:geticon__action_91_guard_clause_91__true",
          "kind": "condition-true",
          "label": "return 'help'",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__condition__method:zopugm:geticon__action_91_guard_clause_91__false",
          "from": "method:zopugm:geticon__action_91_guard_clause_91__condition",
          "to": "method:zopugm:geticon__action_91_guard_clause_91__false",
          "kind": "condition-false",
          "label": "evaluate score",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__true__method:zopugm:geticon__action_91_guard_clause_91__merge",
          "from": "method:zopugm:geticon__action_91_guard_clause_91__true",
          "to": "method:zopugm:geticon__action_91_guard_clause_91__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__false__method:zopugm:geticon__action_91_guard_clause_91__merge",
          "from": "method:zopugm:geticon__action_91_guard_clause_91__false",
          "to": "method:zopugm:geticon__action_91_guard_clause_91__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_91_guard_clause_91__merge__method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition",
          "from": "method:zopugm:geticon__action_91_guard_clause_91__merge",
          "to": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition__method:zopugm:geticon__action_91_geticon_guard_clause_91_0__true",
          "from": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition",
          "to": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition__method:zopugm:geticon__action_91_geticon_guard_clause_91_0__false",
          "from": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__condition",
          "to": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__true__method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "from": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__true",
          "to": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__false__method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "from": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__false",
          "to": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge__method:zopugm:geticon__action_92_branch_92__condition",
          "from": "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
          "to": "method:zopugm:geticon__action_92_branch_92__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__condition__method:zopugm:geticon__action_92_branch_92__true",
          "from": "method:zopugm:geticon__action_92_branch_92__condition",
          "to": "method:zopugm:geticon__action_92_branch_92__true",
          "kind": "condition-true",
          "label": "check-circle",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__condition__method:zopugm:geticon__action_92_branch_92__false",
          "from": "method:zopugm:geticon__action_92_branch_92__condition",
          "to": "method:zopugm:geticon__action_92_branch_92__false",
          "kind": "condition-false",
          "label": "info-circle",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__true__method:zopugm:geticon__action_92_branch_92__merge",
          "from": "method:zopugm:geticon__action_92_branch_92__true",
          "to": "method:zopugm:geticon__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__false__method:zopugm:geticon__action_92_branch_92__merge",
          "from": "method:zopugm:geticon__action_92_branch_92__false",
          "to": "method:zopugm:geticon__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zopugm:geticon__action_92_branch_92__merge__method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition",
          "from": "method:zopugm:geticon__action_92_branch_92__merge",
          "to": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition__method:zopugm:geticon__action_92_geticon_guard_clause_92_1__true",
          "from": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition",
          "to": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition__method:zopugm:geticon__action_92_geticon_guard_clause_92_1__false",
          "from": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__condition",
          "to": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__true__method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "from": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__true",
          "to": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__false__method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "from": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__false",
          "to": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge__method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition",
          "from": "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
          "to": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition__method:zopugm:geticon__action_93_geticon_guard_clause_93_2__true",
          "from": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition",
          "to": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition__method:zopugm:geticon__action_93_geticon_guard_clause_93_2__false",
          "from": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__condition",
          "to": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__true__method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "from": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__true",
          "to": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__false__method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "from": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__false",
          "to": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.9
        },
        {
          "id": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge__method:zopugm:geticon__action_94_geticon_return_94_3__return",
          "from": "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge",
          "to": "method:zopugm:geticon__action_94_geticon_return_94_3__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:zopugm:geticon__action_91_guard_clause_91__merge",
        "method:zopugm:geticon__action_91_geticon_guard_clause_91_0__merge",
        "method:zopugm:geticon__action_92_branch_92__merge",
        "method:zopugm:geticon__action_92_geticon_guard_clause_92_1__merge",
        "method:zopugm:geticon__action_93_geticon_guard_clause_93_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 89,
        "end": 95
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor",
          "line": 89,
          "summary": "Control-flow fragment extracted for method GetIcon.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ef8df:oninitialized__fragment",
      "ownerFileId": "file:q33ld0:intelligencetoolbar-razor",
      "ownerSymbolId": "method:1ef8df:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:1ef8df:oninitialized__entry",
      "exitNodeIds": [
        "method:1ef8df:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ef8df:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.99,
          "detail": "Component lifecycle initialization: subscribes to FocusMode change events to trigger UI updates."
        },
        {
          "id": "method:1ef8df:oninitialized__action_50_event_subscribe_50__linear",
          "kind": "statement",
          "label": "Subscribe to FocusMode changes",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged += HandleUpdate"
        },
        {
          "id": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add_",
          "kind": "call",
          "label": "OnFocusModeChanged (event add)",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88,
          "detail": "adds HandleUpdate delegate"
        },
        {
          "id": "method:1ef8df:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ef8df:oninitialized__entry__method:1ef8df:oninitialized__action_50_event_subscribe_50__linear",
          "from": "method:1ef8df:oninitialized__entry",
          "to": "method:1ef8df:oninitialized__action_50_event_subscribe_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ef8df:oninitialized__action_50_event_subscribe_50__linear__call_method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add_",
          "from": "method:1ef8df:oninitialized__action_50_event_subscribe_50__linear",
          "to": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add_",
          "kind": "call",
          "label": "adds HandleUpdate delegate",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add___implicit_return",
          "from": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add_",
          "to": "method:1ef8df:oninitialized__implicit_return",
          "kind": "return",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add___jump_NexusReader_UI_Shared_Services_IFocusModeService_cs_OnFocusModeChanged_event_add_",
          "fromNodeId": "method:1ef8df:oninitialized__call_50_OnFocusModeChanged_event_add_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "targetHint": "OnFocusModeChanged (event add)",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "reason": "Call target OnFocusModeChanged (event add) in NexusReader.UI.Shared/Services/IFocusModeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 48,
        "end": 51
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 48,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1dyzngl:handleclearcache__fragment",
      "ownerFileId": "file:q33ld0:intelligencetoolbar-razor",
      "ownerSymbolId": "method:1dyzngl:handleclearcache",
      "ownerSymbolName": "HandleClearCache",
      "entryNodeId": "method:1dyzngl:handleclearcache__entry",
      "exitNodeIds": [
        "method:1dyzngl:handleclearcache__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1dyzngl:handleclearcache__entry",
          "kind": "entry",
          "label": "HandleClearCache entry",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.99,
          "detail": "Asynchronously requests clearing the AI/knowledge cache via KnowledgeService and logs the outcome."
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_56_log_56__linear",
          "kind": "statement",
          "label": "Requesting cache clear",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[IntelligenceToolbar] Requesting cache clear...\")"
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_57_handleclearcache_await_57_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.81,
          "detail": "var result = await KnowledgeService.ClearCacheAsync();"
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_57_external_call_57__linear",
          "kind": "http-call",
          "label": "ClearCacheAsync invoked",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "await KnowledgeService.ClearCacheAsync()"
        },
        {
          "id": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync",
          "kind": "call",
          "label": "ClearCacheAsync",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88,
          "detail": "no params, awaited call"
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "if (result.IsSuccess) { Console.WriteLine(...) }"
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__true",
          "kind": "branch-true",
          "label": "log-success",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_60_log_60__linear",
          "kind": "statement",
          "label": "Cache cleared confirmation",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[IntelligenceToolbar] Cache cleared successfully!\")"
        },
        {
          "id": "method:1dyzngl:handleclearcache__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1dyzngl:handleclearcache__entry__method:1dyzngl:handleclearcache__action_56_log_56__linear",
          "from": "method:1dyzngl:handleclearcache__entry",
          "to": "method:1dyzngl:handleclearcache__action_56_log_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_56_log_56__linear__method:1dyzngl:handleclearcache__action_57_handleclearcache_await_57_0__await",
          "from": "method:1dyzngl:handleclearcache__action_56_log_56__linear",
          "to": "method:1dyzngl:handleclearcache__action_57_handleclearcache_await_57_0__await",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_57_handleclearcache_await_57_0__await__method:1dyzngl:handleclearcache__action_57_external_call_57__linear",
          "from": "method:1dyzngl:handleclearcache__action_57_handleclearcache_await_57_0__await",
          "to": "method:1dyzngl:handleclearcache__action_57_external_call_57__linear",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_57_external_call_57__linear__call_method:1dyzngl:handleclearcache__call_57_ClearCacheAsync",
          "from": "method:1dyzngl:handleclearcache__action_57_external_call_57__linear",
          "to": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync",
          "kind": "call",
          "label": "no params, awaited call",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync__method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition",
          "from": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync",
          "to": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition__method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__true",
          "from": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition",
          "to": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition__method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__false",
          "from": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__condition",
          "to": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__true__method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "from": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__true",
          "to": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__false__method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "from": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__false",
          "to": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge__method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition",
          "from": "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
          "to": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition__method:1dyzngl:handleclearcache__action_58_guard_clause_58__true",
          "from": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition",
          "to": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__true",
          "kind": "condition-true",
          "label": "log-success",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition__method:1dyzngl:handleclearcache__action_58_guard_clause_58__false",
          "from": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__condition",
          "to": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__true__method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "from": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__true",
          "to": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__false__method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "from": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__false",
          "to": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge__method:1dyzngl:handleclearcache__action_60_log_60__linear",
          "from": "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge",
          "to": "method:1dyzngl:handleclearcache__action_60_log_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dyzngl:handleclearcache__action_60_log_60__linear__implicit_return",
          "from": "method:1dyzngl:handleclearcache__action_60_log_60__linear",
          "to": "method:1dyzngl:handleclearcache__implicit_return",
          "kind": "return",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_cs_ClearCacheAsync",
          "fromNodeId": "method:1dyzngl:handleclearcache__call_57_ClearCacheAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
          "targetHint": "ClearCacheAsync",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "reason": "Call target ClearCacheAsync in NexusReader.Application.Abstractions/Services/IKnowledgeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1dyzngl:handleclearcache__action_58_handleclearcache_branch_58_1__merge",
        "method:1dyzngl:handleclearcache__action_58_guard_clause_58__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 53,
        "end": 62
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 53,
          "summary": "Control-flow fragment extracted for method HandleClearCache.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:68za1u:handlelogout__fragment",
      "ownerFileId": "file:q33ld0:intelligencetoolbar-razor",
      "ownerSymbolId": "method:68za1u:handlelogout",
      "ownerSymbolName": "HandleLogout",
      "entryNodeId": "method:68za1u:handlelogout__entry",
      "exitNodeIds": [
        "method:68za1u:handlelogout__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:68za1u:handlelogout__entry",
          "kind": "entry",
          "label": "HandleLogout entry",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.99,
          "detail": "Logs the user out via IdentityService and then navigates to the logout form."
        },
        {
          "id": "method:68za1u:handlelogout__action_66_handlelogout_await_66_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.81,
          "detail": "await IdentityService.LogoutAsync();"
        },
        {
          "id": "method:68za1u:handlelogout__action_66_external_call_66__linear",
          "kind": "http-call",
          "label": "Logout invoked",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.LogoutAsync()"
        },
        {
          "id": "method:68za1u:handlelogout__call_66_LogoutAsync",
          "kind": "call",
          "label": "LogoutAsync",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88,
          "detail": "no params, awaited call"
        },
        {
          "id": "method:68za1u:handlelogout__action_67_navigation_67__linear",
          "kind": "statement",
          "label": "Navigate to logout form",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)"
        },
        {
          "id": "method:68za1u:handlelogout__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:68za1u:handlelogout__entry__method:68za1u:handlelogout__action_66_handlelogout_await_66_0__await",
          "from": "method:68za1u:handlelogout__entry",
          "to": "method:68za1u:handlelogout__action_66_handlelogout_await_66_0__await",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.81
        },
        {
          "id": "method:68za1u:handlelogout__action_66_handlelogout_await_66_0__await__method:68za1u:handlelogout__action_66_external_call_66__linear",
          "from": "method:68za1u:handlelogout__action_66_handlelogout_await_66_0__await",
          "to": "method:68za1u:handlelogout__action_66_external_call_66__linear",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:68za1u:handlelogout__action_66_external_call_66__linear__call_method:68za1u:handlelogout__call_66_LogoutAsync",
          "from": "method:68za1u:handlelogout__action_66_external_call_66__linear",
          "to": "method:68za1u:handlelogout__call_66_LogoutAsync",
          "kind": "call",
          "label": "no params, awaited call",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88
        },
        {
          "id": "method:68za1u:handlelogout__call_66_LogoutAsync__method:68za1u:handlelogout__action_67_navigation_67__linear",
          "from": "method:68za1u:handlelogout__call_66_LogoutAsync",
          "to": "method:68za1u:handlelogout__action_67_navigation_67__linear",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:68za1u:handlelogout__action_67_navigation_67__linear__implicit_return",
          "from": "method:68za1u:handlelogout__action_67_navigation_67__linear",
          "to": "method:68za1u:handlelogout__implicit_return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:68za1u:handlelogout__call_66_LogoutAsync__jump_NexusReader_Application_Abstractions_Services_IIdentityService_cs_LogoutAsync",
          "fromNodeId": "method:68za1u:handlelogout__call_66_LogoutAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions/Services/IIdentityService.cs",
          "targetHint": "LogoutAsync",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "reason": "Call target LogoutAsync in NexusReader.Application.Abstractions/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 64,
        "end": 68
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 64,
          "summary": "Control-flow fragment extracted for method HandleLogout.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:oj5ghm:handleupdate__fragment",
      "ownerFileId": "file:q33ld0:intelligencetoolbar-razor",
      "ownerSymbolId": "method:oj5ghm:handleupdate",
      "ownerSymbolName": "HandleUpdate",
      "entryNodeId": "method:oj5ghm:handleupdate__entry",
      "exitNodeIds": [
        "method:oj5ghm:handleupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:oj5ghm:handleupdate__entry",
          "kind": "entry",
          "label": "HandleUpdate entry",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.99,
          "detail": "Triggers a UI refresh on the Blazor renderer when FocusMode changes."
        },
        {
          "id": "method:oj5ghm:handleupdate__action_70_ui_refresh_70__linear",
          "kind": "statement",
          "label": "Invoke StateHasChanged on UI thread",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged) to schedule a re-render"
        },
        {
          "id": "method:oj5ghm:handleupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:oj5ghm:handleupdate__entry__method:oj5ghm:handleupdate__action_70_ui_refresh_70__linear",
          "from": "method:oj5ghm:handleupdate__entry",
          "to": "method:oj5ghm:handleupdate__action_70_ui_refresh_70__linear",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:oj5ghm:handleupdate__action_70_ui_refresh_70__linear__implicit_return",
          "from": "method:oj5ghm:handleupdate__action_70_ui_refresh_70__linear",
          "to": "method:oj5ghm:handleupdate__implicit_return",
          "kind": "return",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 70,
        "end": 70
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 70,
          "summary": "Control-flow fragment extracted for method HandleUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1nyg1j6:dispose__fragment",
      "ownerFileId": "file:q33ld0:intelligencetoolbar-razor",
      "ownerSymbolId": "method:1nyg1j6:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:1nyg1j6:dispose__entry",
      "exitNodeIds": [
        "method:1nyg1j6:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1nyg1j6:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.99,
          "detail": "Lifecycle cleanup: unsubscribes from FocusMode change events to avoid memory leaks."
        },
        {
          "id": "method:1nyg1j6:dispose__action_74_event_unsubscribe_74__linear",
          "kind": "statement",
          "label": "Unsubscribe from FocusMode changes",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged -= HandleUpdate"
        },
        {
          "id": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove_",
          "kind": "call",
          "label": "OnFocusModeChanged (event remove)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88,
          "detail": "removes HandleUpdate delegate"
        },
        {
          "id": "method:1nyg1j6:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1nyg1j6:dispose__entry__method:1nyg1j6:dispose__action_74_event_unsubscribe_74__linear",
          "from": "method:1nyg1j6:dispose__entry",
          "to": "method:1nyg1j6:dispose__action_74_event_unsubscribe_74__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nyg1j6:dispose__action_74_event_unsubscribe_74__linear__call_method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove_",
          "from": "method:1nyg1j6:dispose__action_74_event_unsubscribe_74__linear",
          "to": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove_",
          "kind": "call",
          "label": "removes HandleUpdate delegate",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove___implicit_return",
          "from": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove_",
          "to": "method:1nyg1j6:dispose__implicit_return",
          "kind": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove___jump_NexusReader_UI_Shared_Services_IFocusModeService_cs_OnFocusModeChanged_event_remove_",
          "fromNodeId": "method:1nyg1j6:dispose__call_74_OnFocusModeChanged_event_remove_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "targetHint": "OnFocusModeChanged (event remove)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "reason": "Call target OnFocusModeChanged (event remove) in NexusReader.UI.Shared/Services/IFocusModeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 72,
        "end": 75
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor",
          "line": 72,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13emvrm:oninitialized__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:13emvrm:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:13emvrm:oninitialized__entry",
      "exitNodeIds": [
        "method:13emvrm:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13emvrm:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Lifecycle initialization: subscribes to the QuizService update event to refresh UI when quiz state changes."
        },
        {
          "id": "method:13emvrm:oninitialized__action_58_event_subscribe_58__linear",
          "kind": "statement",
          "label": "Subscribe to quiz updates",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "QuizService.OnQuizUpdated += HandleUpdate"
        },
        {
          "id": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add_",
          "kind": "call",
          "label": "QuizService.OnQuizUpdated (event add)",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "HandleUpdate delegate"
        },
        {
          "id": "method:13emvrm:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13emvrm:oninitialized__entry__method:13emvrm:oninitialized__action_58_event_subscribe_58__linear",
          "from": "method:13emvrm:oninitialized__entry",
          "to": "method:13emvrm:oninitialized__action_58_event_subscribe_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:13emvrm:oninitialized__action_58_event_subscribe_58__linear__call_method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add_",
          "from": "method:13emvrm:oninitialized__action_58_event_subscribe_58__linear",
          "to": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add_",
          "kind": "call",
          "label": "HandleUpdate delegate",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add___implicit_return",
          "from": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add_",
          "to": "method:13emvrm:oninitialized__implicit_return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add___jump_unknown_QuizService_OnQuizUpdated_event_add_",
          "fromNodeId": "method:13emvrm:oninitialized__call_58_QuizService_OnQuizUpdated_event_add_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QuizService.OnQuizUpdated (event add)",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target QuizService.OnQuizUpdated (event add) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 56,
        "end": 59
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 56,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1b8lqka:handleupdate__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:1b8lqka:handleupdate",
      "ownerSymbolName": "HandleUpdate",
      "entryNodeId": "method:1b8lqka:handleupdate__entry",
      "exitNodeIds": [
        "method:1b8lqka:handleupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1b8lqka:handleupdate__entry",
          "kind": "entry",
          "label": "HandleUpdate entry",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Requests a UI re-render on the Blazor synchronization context when the quiz service signals an update."
        },
        {
          "id": "method:1b8lqka:handleupdate__action_61_ui_update_61__linear",
          "kind": "statement",
          "label": "Invoke StateHasChanged asynchronously",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1b8lqka:handleupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1b8lqka:handleupdate__entry__method:1b8lqka:handleupdate__action_61_ui_update_61__linear",
          "from": "method:1b8lqka:handleupdate__entry",
          "to": "method:1b8lqka:handleupdate__action_61_ui_update_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1b8lqka:handleupdate__action_61_ui_update_61__linear__implicit_return",
          "from": "method:1b8lqka:handleupdate__action_61_ui_update_61__linear",
          "to": "method:1b8lqka:handleupdate__implicit_return",
          "kind": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 61,
        "end": 61
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 61,
          "summary": "Control-flow fragment extracted for method HandleUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:9q9eda:dispose__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:9q9eda:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:9q9eda:dispose__entry",
      "exitNodeIds": [
        "method:9q9eda:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:9q9eda:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Lifecycle cleanup: unsubscribes from the QuizService update event."
        },
        {
          "id": "method:9q9eda:dispose__action_65_event_unsubscribe_65__linear",
          "kind": "statement",
          "label": "Unsubscribe from quiz updates",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "QuizService.OnQuizUpdated -= HandleUpdate"
        },
        {
          "id": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove_",
          "kind": "call",
          "label": "QuizService.OnQuizUpdated (event remove)",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "HandleUpdate delegate"
        },
        {
          "id": "method:9q9eda:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:9q9eda:dispose__entry__method:9q9eda:dispose__action_65_event_unsubscribe_65__linear",
          "from": "method:9q9eda:dispose__entry",
          "to": "method:9q9eda:dispose__action_65_event_unsubscribe_65__linear",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:9q9eda:dispose__action_65_event_unsubscribe_65__linear__call_method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove_",
          "from": "method:9q9eda:dispose__action_65_event_unsubscribe_65__linear",
          "to": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove_",
          "kind": "call",
          "label": "HandleUpdate delegate",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove___implicit_return",
          "from": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove_",
          "to": "method:9q9eda:dispose__implicit_return",
          "kind": "return",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove___jump_unknown_QuizService_OnQuizUpdated_event_remove_",
          "fromNodeId": "method:9q9eda:dispose__call_65_QuizService_OnQuizUpdated_event_remove_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QuizService.OnQuizUpdated (event remove)",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target QuizService.OnQuizUpdated (event remove) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 63,
        "end": 66
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 63,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cgrv35:selectoptionasync__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:cgrv35:selectoptionasync",
      "ownerSymbolName": "SelectOptionAsync",
      "entryNodeId": "method:cgrv35:selectoptionasync__entry",
      "exitNodeIds": [
        "method:cgrv35:selectoptionasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cgrv35:selectoptionasync__entry",
          "kind": "entry",
          "label": "SelectOptionAsync entry",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Handles user's option selection: prevents double submissions, triggers haptic feedback, submits an answer command via Mediator, updates local state, and triggers success/error vibration and UI refresh."
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition",
          "kind": "condition",
          "label": "_states.ContainsKey(question)",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "if already answered, method returns immediately"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__true",
          "kind": "branch-true",
          "label": "return (ignored)",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition",
          "kind": "condition",
          "label": "_states.ContainsKey(question)",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9,
          "detail": "if (_states.ContainsKey(question)) return;"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_73_selectoptionasync_await_73_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81,
          "detail": "await PlatformService.VibrateAsync(40);"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_73_external_call_73__linear",
          "kind": "http-call",
          "label": "Haptic feedback before submit",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "await PlatformService.VibrateAsync(40)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync",
          "kind": "call",
          "label": "PlatformService.VibrateAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "40 (ms vibration duration)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_75_create_command_75__linear",
          "kind": "statement",
          "label": "Build submit command",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "new SubmitAnswerCommand(index, question.CorrectIndex)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor",
          "kind": "call",
          "label": "SubmitAnswerCommand..ctor",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "index, question.CorrectIndex"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_76_selectoptionasync_await_76_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81,
          "detail": "var res = await Mediator.Send(cmd);"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_76_external_call_76__linear",
          "kind": "http-call",
          "label": "Send command to mediator",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "var res = await Mediator.Send(cmd)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_76_IMediator_Send",
          "kind": "call",
          "label": "IMediator.Send",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "SubmitAnswerCommand"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_78_state_write_78__linear",
          "kind": "statement",
          "label": "Record selected index and correctness",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "_states[question] = (index, res.IsSuccess)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__condition",
          "kind": "condition",
          "label": "res.IsSuccess",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__true",
          "kind": "branch-true",
          "label": "success -> VibrateSuccessAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__false",
          "kind": "branch-false",
          "label": "failure -> VibrateErrorAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "kind": "statement",
          "label": "merge",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition",
          "kind": "condition",
          "label": "res.IsSuccess",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78,
          "detail": "if (res.IsSuccess)"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_81_selectoptionasync_await_81_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81,
          "detail": "await PlatformService.VibrateSuccessAsync();"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "PlatformService.VibrateSuccessAsync",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_83_selectoptionasync_await_83_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81,
          "detail": "await PlatformService.VibrateErrorAsync();"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync",
          "kind": "call",
          "label": "PlatformService.VibrateErrorAsync",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_85_ui_update_85__linear",
          "kind": "statement",
          "label": "Trigger UI refresh",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "StateHasChanged()"
        },
        {
          "id": "method:cgrv35:selectoptionasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cgrv35:selectoptionasync__entry__method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition",
          "from": "method:cgrv35:selectoptionasync__entry",
          "to": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition__method:cgrv35:selectoptionasync__action_70_guard_clause_70__true",
          "from": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition",
          "to": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__true",
          "kind": "condition-true",
          "label": "return (ignored)",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition__method:cgrv35:selectoptionasync__action_70_guard_clause_70__false",
          "from": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__condition",
          "to": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__true__method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "from": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__true",
          "to": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__false__method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "from": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__false",
          "to": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge__method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition",
          "from": "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
          "to": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition__method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true",
          "from": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition",
          "to": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition__method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false",
          "from": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__condition",
          "to": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true__method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "from": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__true",
          "to": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false__method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "from": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__false",
          "to": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge__method:cgrv35:selectoptionasync__action_73_selectoptionasync_await_73_1__await",
          "from": "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
          "to": "method:cgrv35:selectoptionasync__action_73_selectoptionasync_await_73_1__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_73_selectoptionasync_await_73_1__await__method:cgrv35:selectoptionasync__action_73_external_call_73__linear",
          "from": "method:cgrv35:selectoptionasync__action_73_selectoptionasync_await_73_1__await",
          "to": "method:cgrv35:selectoptionasync__action_73_external_call_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_73_external_call_73__linear__call_method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync",
          "from": "method:cgrv35:selectoptionasync__action_73_external_call_73__linear",
          "to": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync",
          "kind": "call",
          "label": "40 (ms vibration duration)",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync__method:cgrv35:selectoptionasync__action_75_create_command_75__linear",
          "from": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync",
          "to": "method:cgrv35:selectoptionasync__action_75_create_command_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_75_create_command_75__linear__call_method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor",
          "from": "method:cgrv35:selectoptionasync__action_75_create_command_75__linear",
          "to": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor",
          "kind": "call",
          "label": "index, question.CorrectIndex",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor__method:cgrv35:selectoptionasync__action_76_selectoptionasync_await_76_2__await",
          "from": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor",
          "to": "method:cgrv35:selectoptionasync__action_76_selectoptionasync_await_76_2__await",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_76_selectoptionasync_await_76_2__await__method:cgrv35:selectoptionasync__action_76_external_call_76__linear",
          "from": "method:cgrv35:selectoptionasync__action_76_selectoptionasync_await_76_2__await",
          "to": "method:cgrv35:selectoptionasync__action_76_external_call_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_76_external_call_76__linear__call_method:cgrv35:selectoptionasync__call_76_IMediator_Send",
          "from": "method:cgrv35:selectoptionasync__action_76_external_call_76__linear",
          "to": "method:cgrv35:selectoptionasync__call_76_IMediator_Send",
          "kind": "call",
          "label": "SubmitAnswerCommand",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_76_IMediator_Send__method:cgrv35:selectoptionasync__action_78_state_write_78__linear",
          "from": "method:cgrv35:selectoptionasync__call_76_IMediator_Send",
          "to": "method:cgrv35:selectoptionasync__action_78_state_write_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_78_state_write_78__linear__method:cgrv35:selectoptionasync__action_80_branch_80__condition",
          "from": "method:cgrv35:selectoptionasync__action_78_state_write_78__linear",
          "to": "method:cgrv35:selectoptionasync__action_80_branch_80__condition",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__condition__method:cgrv35:selectoptionasync__action_80_branch_80__true",
          "from": "method:cgrv35:selectoptionasync__action_80_branch_80__condition",
          "to": "method:cgrv35:selectoptionasync__action_80_branch_80__true",
          "kind": "condition-true",
          "label": "success -> VibrateSuccessAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__condition__method:cgrv35:selectoptionasync__action_80_branch_80__false",
          "from": "method:cgrv35:selectoptionasync__action_80_branch_80__condition",
          "to": "method:cgrv35:selectoptionasync__action_80_branch_80__false",
          "kind": "condition-false",
          "label": "failure -> VibrateErrorAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__true__method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "from": "method:cgrv35:selectoptionasync__action_80_branch_80__true",
          "to": "method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__false__method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "from": "method:cgrv35:selectoptionasync__action_80_branch_80__false",
          "to": "method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_branch_80__merge__method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition",
          "from": "method:cgrv35:selectoptionasync__action_80_branch_80__merge",
          "to": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition__method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__true",
          "from": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition",
          "to": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition__method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__false",
          "from": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__condition",
          "to": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__true__method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "from": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__true",
          "to": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__false__method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "from": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__false",
          "to": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge__method:cgrv35:selectoptionasync__action_81_selectoptionasync_await_81_4__await",
          "from": "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
          "to": "method:cgrv35:selectoptionasync__action_81_selectoptionasync_await_81_4__await",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_81_selectoptionasync_await_81_4__await__call_method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync",
          "from": "method:cgrv35:selectoptionasync__action_81_selectoptionasync_await_81_4__await",
          "to": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "no args",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync__method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition",
          "from": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync",
          "to": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition",
          "kind": "fallback",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition__method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__true",
          "from": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition",
          "to": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition__method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__false",
          "from": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__condition",
          "to": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__true__method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "from": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__true",
          "to": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__false__method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "from": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__false",
          "to": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge__method:cgrv35:selectoptionasync__action_83_selectoptionasync_await_83_6__await",
          "from": "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge",
          "to": "method:cgrv35:selectoptionasync__action_83_selectoptionasync_await_83_6__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.81
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_83_selectoptionasync_await_83_6__await__call_method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync",
          "from": "method:cgrv35:selectoptionasync__action_83_selectoptionasync_await_83_6__await",
          "to": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync",
          "kind": "call",
          "label": "no args",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync__method:cgrv35:selectoptionasync__action_85_ui_update_85__linear",
          "from": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync",
          "to": "method:cgrv35:selectoptionasync__action_85_ui_update_85__linear",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cgrv35:selectoptionasync__action_85_ui_update_85__linear__implicit_return",
          "from": "method:cgrv35:selectoptionasync__action_85_ui_update_85__linear",
          "to": "method:cgrv35:selectoptionasync__implicit_return",
          "kind": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync__jump_unknown_PlatformService_VibrateAsync",
          "fromNodeId": "method:cgrv35:selectoptionasync__call_73_PlatformService_VibrateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "PlatformService.VibrateAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target PlatformService.VibrateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor__jump_NexusReader_Application_Commands_Quiz_SubmitAnswerCommand_ctor",
          "fromNodeId": "method:cgrv35:selectoptionasync__call_75_SubmitAnswerCommand_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Commands.Quiz",
          "targetHint": "SubmitAnswerCommand..ctor",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target SubmitAnswerCommand..ctor in NexusReader.Application.Commands.Quiz could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_76_IMediator_Send__jump_unknown_IMediator_Send",
          "fromNodeId": "method:cgrv35:selectoptionasync__call_76_IMediator_Send",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IMediator.Send",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target IMediator.Send in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync__jump_unknown_PlatformService_VibrateSuccessAsync",
          "fromNodeId": "method:cgrv35:selectoptionasync__call_81_PlatformService_VibrateSuccessAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "PlatformService.VibrateSuccessAsync",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target PlatformService.VibrateSuccessAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync__jump_unknown_PlatformService_VibrateErrorAsync",
          "fromNodeId": "method:cgrv35:selectoptionasync__call_83_PlatformService_VibrateErrorAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "PlatformService.VibrateErrorAsync",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target PlatformService.VibrateErrorAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:cgrv35:selectoptionasync__action_70_guard_clause_70__merge",
        "method:cgrv35:selectoptionasync__action_70_selectoptionasync_guard_clause_70_0__merge",
        "method:cgrv35:selectoptionasync__action_80_branch_80__merge",
        "method:cgrv35:selectoptionasync__action_80_selectoptionasync_branch_80_3__merge",
        "method:cgrv35:selectoptionasync__action_82_selectoptionasync_fallback_82_5__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 68,
        "end": 86
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 68,
          "summary": "Control-flow fragment extracted for method SelectOptionAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ty8u23:allquestionsanswered__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:ty8u23:allquestionsanswered",
      "ownerSymbolName": "AllQuestionsAnswered",
      "entryNodeId": "method:ty8u23:allquestionsanswered__entry",
      "exitNodeIds": [
        "method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return",
        "method:ty8u23:allquestionsanswered__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ty8u23:allquestionsanswered__entry",
          "kind": "entry",
          "label": "AllQuestionsAnswered entry",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Determines whether all quiz questions have been answered by comparing local state count with current quiz question count."
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "return QuizService.CurrentQuiz != null && _states.Count == QuizService.CurrentQuiz.Questions.Count;"
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition",
          "kind": "condition",
          "label": "QuizService.CurrentQuiz != null",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "Ensures CurrentQuiz exists before comparing counts"
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__true",
          "kind": "branch-true",
          "label": "false if null",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "kind": "statement",
          "label": "merge",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_comparison_90__linear",
          "kind": "statement",
          "label": "Compare answered count to question count",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "_states.Count == QuizService.CurrentQuiz.Questions.Count"
        },
        {
          "id": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz",
          "kind": "call",
          "label": "QuizService.CurrentQuiz",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88,
          "detail": "read property to check null and access Questions.Count"
        },
        {
          "id": "method:ty8u23:allquestionsanswered__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ty8u23:allquestionsanswered__entry__method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return",
          "from": "method:ty8u23:allquestionsanswered__entry",
          "to": "method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return",
          "kind": "return",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return__method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition",
          "from": "method:ty8u23:allquestionsanswered__action_90_allquestionsanswered_return_90_0__return",
          "to": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition__method:ty8u23:allquestionsanswered__action_90_guard_clause_90__true",
          "from": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition",
          "to": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__true",
          "kind": "condition-true",
          "label": "false if null",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition__method:ty8u23:allquestionsanswered__action_90_guard_clause_90__false",
          "from": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__condition",
          "to": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__true__method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "from": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__true",
          "to": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__false__method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "from": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__false",
          "to": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge__method:ty8u23:allquestionsanswered__action_90_comparison_90__linear",
          "from": "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge",
          "to": "method:ty8u23:allquestionsanswered__action_90_comparison_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ty8u23:allquestionsanswered__action_90_comparison_90__linear__call_method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz",
          "from": "method:ty8u23:allquestionsanswered__action_90_comparison_90__linear",
          "to": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz",
          "kind": "call",
          "label": "read property to check null and access Questions.Count",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz__implicit_return",
          "from": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz",
          "to": "method:ty8u23:allquestionsanswered__implicit_return",
          "kind": "return",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz__jump_unknown_QuizService_CurrentQuiz",
          "fromNodeId": "method:ty8u23:allquestionsanswered__call_90_QuizService_CurrentQuiz",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QuizService.CurrentQuiz",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "reason": "Call target QuizService.CurrentQuiz in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:ty8u23:allquestionsanswered__action_90_guard_clause_90__merge"
      ],
      "language": "unknown",
      "confidence": 0.8899999999999999,
      "lineSpan": {
        "start": 88,
        "end": 91
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 88,
          "summary": "Control-flow fragment extracted for method AllQuestionsAnswered.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1dimc2e:getblockclass__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:1dimc2e:getblockclass",
      "ownerSymbolName": "GetBlockClass",
      "entryNodeId": "method:1dimc2e:getblockclass__entry",
      "exitNodeIds": [
        "method:1dimc2e:getblockclass__action_97_getblockclass_return_97_1__return"
      ],
      "nodes": [
        {
          "id": "method:1dimc2e:getblockclass__entry",
          "kind": "entry",
          "label": "GetBlockClass entry",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Returns a CSS class for a question block based on local correctness state (correct/incorrect) or empty when unanswered."
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__condition",
          "kind": "condition",
          "label": "_states.TryGetValue(question, out state)",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__true",
          "kind": "branch-true",
          "label": "return empty string",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__false",
          "kind": "branch-false",
          "label": "return state-based class",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "kind": "statement",
          "label": "merge",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition",
          "kind": "condition",
          "label": "!_states.TryGetValue(question, out var state)",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9,
          "detail": "if (!_states.TryGetValue(question, out var state)) return \"\";"
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_97_getblockclass_return_97_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "return state.IsCorrect ? \"state-correct\" : \"state-incorrect\";"
        }
      ],
      "edges": [
        {
          "id": "method:1dimc2e:getblockclass__entry__method:1dimc2e:getblockclass__action_96_branch_96__condition",
          "from": "method:1dimc2e:getblockclass__entry",
          "to": "method:1dimc2e:getblockclass__action_96_branch_96__condition",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__condition__method:1dimc2e:getblockclass__action_96_branch_96__true",
          "from": "method:1dimc2e:getblockclass__action_96_branch_96__condition",
          "to": "method:1dimc2e:getblockclass__action_96_branch_96__true",
          "kind": "condition-true",
          "label": "return empty string",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__condition__method:1dimc2e:getblockclass__action_96_branch_96__false",
          "from": "method:1dimc2e:getblockclass__action_96_branch_96__condition",
          "to": "method:1dimc2e:getblockclass__action_96_branch_96__false",
          "kind": "condition-false",
          "label": "return state-based class",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__true__method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "from": "method:1dimc2e:getblockclass__action_96_branch_96__true",
          "to": "method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__false__method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "from": "method:1dimc2e:getblockclass__action_96_branch_96__false",
          "to": "method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_branch_96__merge__method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition",
          "from": "method:1dimc2e:getblockclass__action_96_branch_96__merge",
          "to": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition__method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__true",
          "from": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition",
          "to": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition__method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__false",
          "from": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__condition",
          "to": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__true__method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "from": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__true",
          "to": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__false__method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "from": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__false",
          "to": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge__method:1dimc2e:getblockclass__action_97_getblockclass_return_97_1__return",
          "from": "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge",
          "to": "method:1dimc2e:getblockclass__action_97_getblockclass_return_97_1__return",
          "kind": "return",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1dimc2e:getblockclass__action_96_branch_96__merge",
        "method:1dimc2e:getblockclass__action_96_getblockclass_guard_clause_96_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.97,
      "lineSpan": {
        "start": 94,
        "end": 98
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 94,
          "summary": "Control-flow fragment extracted for method GetBlockClass.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1q9e63q:getoptionclass__fragment",
      "ownerFileId": "file:yno7se:knowledgecheck-razor",
      "ownerSymbolId": "method:1q9e63q:getoptionclass",
      "ownerSymbolName": "GetOptionClass",
      "entryNodeId": "method:1q9e63q:getoptionclass__entry",
      "exitNodeIds": [
        "method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return",
        "method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return",
        "method:1q9e63q:getoptionclass__action_110_getoptionclass_return_110_5__return"
      ],
      "nodes": [
        {
          "id": "method:1q9e63q:getoptionclass__entry",
          "kind": "entry",
          "label": "GetOptionClass entry",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.99,
          "detail": "Returns CSS class for an option depending on selection, correctness, revealed-correct when incorrect, or faded for others."
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition",
          "kind": "condition",
          "label": "!_states.TryGetValue(question, out state)",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__true",
          "kind": "branch-true",
          "label": "return empty",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "kind": "statement",
          "label": "merge",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition",
          "kind": "condition",
          "label": "!_states.TryGetValue(question, out var state)",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9,
          "detail": "if (!_states.TryGetValue(question, out var state)) return \"\";"
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__condition",
          "kind": "condition",
          "label": "state.SelectedIndex == index",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__true",
          "kind": "branch-true",
          "label": "option-correct / option-incorrect",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__false",
          "kind": "branch-false",
          "label": "check revealed correct",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "kind": "statement",
          "label": "merge",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition",
          "kind": "condition",
          "label": "state.SelectedIndex == index",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78,
          "detail": "if (state.SelectedIndex == index)"
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "return state.IsCorrect ? \"option-correct\" : \"option-incorrect\";"
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__condition",
          "kind": "condition",
          "label": "state.IsCorrect == false && question.CorrectIndex == index",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__true",
          "kind": "branch-true",
          "label": "option-revealed-correct",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__false",
          "kind": "branch-false",
          "label": "option-faded",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "kind": "statement",
          "label": "merge",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition",
          "kind": "condition",
          "label": "state.IsCorrect == false && question.CorrectIndex == index",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78,
          "detail": "if (state.IsCorrect == false && question.CorrectIndex == index)"
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "return \"option-revealed-correct\";"
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_110_getoptionclass_return_110_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7,
          "detail": "return \"option-faded\";"
        }
      ],
      "edges": [
        {
          "id": "method:1q9e63q:getoptionclass__entry__method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition",
          "from": "method:1q9e63q:getoptionclass__entry",
          "to": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition__method:1q9e63q:getoptionclass__action_102_guard_clause_102__true",
          "from": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition",
          "to": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__true",
          "kind": "condition-true",
          "label": "return empty",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition__method:1q9e63q:getoptionclass__action_102_guard_clause_102__false",
          "from": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__condition",
          "to": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__true__method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "from": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__true",
          "to": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__false__method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "from": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__false",
          "to": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge__method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition",
          "from": "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
          "to": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition__method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__true",
          "from": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition",
          "to": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition__method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__false",
          "from": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__condition",
          "to": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__true__method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "from": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__true",
          "to": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__false__method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "from": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__false",
          "to": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge__method:1q9e63q:getoptionclass__action_104_branch_104__condition",
          "from": "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
          "to": "method:1q9e63q:getoptionclass__action_104_branch_104__condition",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__condition__method:1q9e63q:getoptionclass__action_104_branch_104__true",
          "from": "method:1q9e63q:getoptionclass__action_104_branch_104__condition",
          "to": "method:1q9e63q:getoptionclass__action_104_branch_104__true",
          "kind": "condition-true",
          "label": "option-correct / option-incorrect",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__condition__method:1q9e63q:getoptionclass__action_104_branch_104__false",
          "from": "method:1q9e63q:getoptionclass__action_104_branch_104__condition",
          "to": "method:1q9e63q:getoptionclass__action_104_branch_104__false",
          "kind": "condition-false",
          "label": "check revealed correct",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__true__method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "from": "method:1q9e63q:getoptionclass__action_104_branch_104__true",
          "to": "method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__false__method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "from": "method:1q9e63q:getoptionclass__action_104_branch_104__false",
          "to": "method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_branch_104__merge__method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition",
          "from": "method:1q9e63q:getoptionclass__action_104_branch_104__merge",
          "to": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition__method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__true",
          "from": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition",
          "to": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition__method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__false",
          "from": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__condition",
          "to": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__true__method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "from": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__true",
          "to": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__false__method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "from": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__false",
          "to": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge__method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return",
          "from": "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
          "to": "method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return",
          "kind": "return",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return__method:1q9e63q:getoptionclass__action_107_branch_107__condition",
          "from": "method:1q9e63q:getoptionclass__action_105_getoptionclass_return_105_2__return",
          "to": "method:1q9e63q:getoptionclass__action_107_branch_107__condition",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__condition__method:1q9e63q:getoptionclass__action_107_branch_107__true",
          "from": "method:1q9e63q:getoptionclass__action_107_branch_107__condition",
          "to": "method:1q9e63q:getoptionclass__action_107_branch_107__true",
          "kind": "condition-true",
          "label": "option-revealed-correct",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__condition__method:1q9e63q:getoptionclass__action_107_branch_107__false",
          "from": "method:1q9e63q:getoptionclass__action_107_branch_107__condition",
          "to": "method:1q9e63q:getoptionclass__action_107_branch_107__false",
          "kind": "condition-false",
          "label": "option-faded",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__true__method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "from": "method:1q9e63q:getoptionclass__action_107_branch_107__true",
          "to": "method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__false__method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "from": "method:1q9e63q:getoptionclass__action_107_branch_107__false",
          "to": "method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_branch_107__merge__method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition",
          "from": "method:1q9e63q:getoptionclass__action_107_branch_107__merge",
          "to": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition__method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__true",
          "from": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition",
          "to": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition__method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__false",
          "from": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__condition",
          "to": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__true__method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "from": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__true",
          "to": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__false__method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "from": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__false",
          "to": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge__method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return",
          "from": "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge",
          "to": "method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return",
          "kind": "return",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return__method:1q9e63q:getoptionclass__action_110_getoptionclass_return_110_5__return",
          "from": "method:1q9e63q:getoptionclass__action_108_getoptionclass_return_108_4__return",
          "to": "method:1q9e63q:getoptionclass__action_110_getoptionclass_return_110_5__return",
          "kind": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1q9e63q:getoptionclass__action_102_guard_clause_102__merge",
        "method:1q9e63q:getoptionclass__action_102_getoptionclass_guard_clause_102_0__merge",
        "method:1q9e63q:getoptionclass__action_104_branch_104__merge",
        "method:1q9e63q:getoptionclass__action_104_getoptionclass_branch_104_1__merge",
        "method:1q9e63q:getoptionclass__action_107_branch_107__merge",
        "method:1q9e63q:getoptionclass__action_107_getoptionclass_branch_107_3__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 100,
        "end": 111
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor",
          "line": 100,
          "summary": "Control-flow fragment extracted for method GetOptionClass.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1kikefa:isvisible__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:1kikefa:isvisible",
      "ownerSymbolName": "IsVisible",
      "entryNodeId": "method:1kikefa:isvisible__entry",
      "exitNodeIds": [
        "method:1kikefa:isvisible__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1kikefa:isvisible__entry",
          "kind": "entry",
          "label": "IsVisible entry",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Computed property indicating if the selection panel should be shown (non-empty SelectedText and Coordinates present)."
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(SelectedText) && Coordinates != null",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Determines whether component markup is rendered"
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__true",
          "kind": "branch-true",
          "label": "visible",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__false",
          "kind": "branch-false",
          "label": "hidden",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "kind": "statement",
          "label": "merge",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1kikefa:isvisible__entry__method:1kikefa:isvisible__action_57_guard_clause_57__condition",
          "from": "method:1kikefa:isvisible__entry",
          "to": "method:1kikefa:isvisible__action_57_guard_clause_57__condition",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__condition__method:1kikefa:isvisible__action_57_guard_clause_57__true",
          "from": "method:1kikefa:isvisible__action_57_guard_clause_57__condition",
          "to": "method:1kikefa:isvisible__action_57_guard_clause_57__true",
          "kind": "condition-true",
          "label": "visible",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__condition__method:1kikefa:isvisible__action_57_guard_clause_57__false",
          "from": "method:1kikefa:isvisible__action_57_guard_clause_57__condition",
          "to": "method:1kikefa:isvisible__action_57_guard_clause_57__false",
          "kind": "condition-false",
          "label": "hidden",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__true__method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "from": "method:1kikefa:isvisible__action_57_guard_clause_57__true",
          "to": "method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__false__method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "from": "method:1kikefa:isvisible__action_57_guard_clause_57__false",
          "to": "method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1kikefa:isvisible__action_57_guard_clause_57__merge__implicit_return",
          "from": "method:1kikefa:isvisible__action_57_guard_clause_57__merge",
          "to": "method:1kikefa:isvisible__implicit_return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1kikefa:isvisible__action_57_guard_clause_57__merge"
      ],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 57,
        "end": 57
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 57,
          "summary": "Control-flow fragment extracted for method IsVisible.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1g73g8y:positionbelow__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:1g73g8y:positionbelow",
      "ownerSymbolName": "PositionBelow",
      "entryNodeId": "method:1g73g8y:positionbelow__entry",
      "exitNodeIds": [
        "method:1g73g8y:positionbelow__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1g73g8y:positionbelow__entry",
          "kind": "entry",
          "label": "PositionBelow entry",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Determines whether the panel should be positioned below the selection based on Coordinates.Top."
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition",
          "kind": "condition",
          "label": "Coordinates.Top < 320",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Used by PanelStyle to compute top/transform values"
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__true",
          "kind": "branch-true",
          "label": "position below",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__false",
          "kind": "branch-false",
          "label": "position above",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1g73g8y:positionbelow__entry__method:1g73g8y:positionbelow__action_60_guard_clause_60__condition",
          "from": "method:1g73g8y:positionbelow__entry",
          "to": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition__method:1g73g8y:positionbelow__action_60_guard_clause_60__true",
          "from": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition",
          "to": "method:1g73g8y:positionbelow__action_60_guard_clause_60__true",
          "kind": "condition-true",
          "label": "position below",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition__method:1g73g8y:positionbelow__action_60_guard_clause_60__false",
          "from": "method:1g73g8y:positionbelow__action_60_guard_clause_60__condition",
          "to": "method:1g73g8y:positionbelow__action_60_guard_clause_60__false",
          "kind": "condition-false",
          "label": "position above",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__true__method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "from": "method:1g73g8y:positionbelow__action_60_guard_clause_60__true",
          "to": "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__false__method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "from": "method:1g73g8y:positionbelow__action_60_guard_clause_60__false",
          "to": "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge__implicit_return",
          "from": "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge",
          "to": "method:1g73g8y:positionbelow__implicit_return",
          "kind": "return",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1g73g8y:positionbelow__action_60_guard_clause_60__merge"
      ],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 60,
        "end": 60
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 60,
          "summary": "Control-flow fragment extracted for method PositionBelow.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ilkln5:onparametersset__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:ilkln5:onparametersset",
      "ownerSymbolName": "OnParametersSet",
      "entryNodeId": "method:ilkln5:onparametersset__entry",
      "exitNodeIds": [
        "method:ilkln5:onparametersset__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ilkln5:onparametersset__entry",
          "kind": "entry",
          "label": "OnParametersSet entry",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Lifecycle method called when component parameters change; logs state and resets the cached KnowledgePacket."
        },
        {
          "id": "method:ilkln5:onparametersset__action_64_log_64__linear",
          "kind": "statement",
          "label": "Parameter debug log",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Console.WriteLine prints SelectedText length, Coordinates.Top and PositionBelow"
        },
        {
          "id": "method:ilkln5:onparametersset__action_66_state_mutation_66__linear",
          "kind": "statement",
          "label": "Reset Packet",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Packet = null to clear previous summary when selection changes"
        },
        {
          "id": "method:ilkln5:onparametersset__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ilkln5:onparametersset__entry__method:ilkln5:onparametersset__action_64_log_64__linear",
          "from": "method:ilkln5:onparametersset__entry",
          "to": "method:ilkln5:onparametersset__action_64_log_64__linear",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ilkln5:onparametersset__action_64_log_64__linear__method:ilkln5:onparametersset__action_66_state_mutation_66__linear",
          "from": "method:ilkln5:onparametersset__action_64_log_64__linear",
          "to": "method:ilkln5:onparametersset__action_66_state_mutation_66__linear",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ilkln5:onparametersset__action_66_state_mutation_66__linear__implicit_return",
          "from": "method:ilkln5:onparametersset__action_66_state_mutation_66__linear",
          "to": "method:ilkln5:onparametersset__implicit_return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 62,
        "end": 67
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 62,
          "summary": "Control-flow fragment extracted for method OnParametersSet.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8m5lws:panelstyle__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:8m5lws:panelstyle",
      "ownerSymbolName": "PanelStyle",
      "entryNodeId": "method:8m5lws:panelstyle__entry",
      "exitNodeIds": [
        "method:8m5lws:panelstyle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8m5lws:panelstyle__entry",
          "kind": "entry",
          "label": "PanelStyle entry",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Builds inline CSS positioning string for the panel using Coordinates and PositionBelow; returns empty string when Coordinates is null."
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__condition",
          "kind": "condition",
          "label": "Coordinates != null",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "When present, formats top/left/transform using CultureInfo and Math.Clamp"
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__true",
          "kind": "branch-true",
          "label": "compute style",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__false",
          "kind": "branch-false",
          "label": "return empty",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__merge",
          "kind": "statement",
          "label": "merge",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_71_calculation_71__linear",
          "kind": "statement",
          "label": "Positioning math",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Uses Coordinates.Top, Left, Width and Math.Clamp to produce pixel values"
        },
        {
          "id": "method:8m5lws:panelstyle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8m5lws:panelstyle__entry__method:8m5lws:panelstyle__action_69_branch_69__condition",
          "from": "method:8m5lws:panelstyle__entry",
          "to": "method:8m5lws:panelstyle__action_69_branch_69__condition",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__condition__method:8m5lws:panelstyle__action_69_branch_69__true",
          "from": "method:8m5lws:panelstyle__action_69_branch_69__condition",
          "to": "method:8m5lws:panelstyle__action_69_branch_69__true",
          "kind": "condition-true",
          "label": "compute style",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__condition__method:8m5lws:panelstyle__action_69_branch_69__false",
          "from": "method:8m5lws:panelstyle__action_69_branch_69__condition",
          "to": "method:8m5lws:panelstyle__action_69_branch_69__false",
          "kind": "condition-false",
          "label": "return empty",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__true__method:8m5lws:panelstyle__action_69_branch_69__merge",
          "from": "method:8m5lws:panelstyle__action_69_branch_69__true",
          "to": "method:8m5lws:panelstyle__action_69_branch_69__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__false__method:8m5lws:panelstyle__action_69_branch_69__merge",
          "from": "method:8m5lws:panelstyle__action_69_branch_69__false",
          "to": "method:8m5lws:panelstyle__action_69_branch_69__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_69_branch_69__merge__method:8m5lws:panelstyle__action_71_calculation_71__linear",
          "from": "method:8m5lws:panelstyle__action_69_branch_69__merge",
          "to": "method:8m5lws:panelstyle__action_71_calculation_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8m5lws:panelstyle__action_71_calculation_71__linear__implicit_return",
          "from": "method:8m5lws:panelstyle__action_71_calculation_71__linear",
          "to": "method:8m5lws:panelstyle__implicit_return",
          "kind": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:8m5lws:panelstyle__action_69_branch_69__merge"
      ],
      "language": "unknown",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 69,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 69,
          "summary": "Control-flow fragment extracted for method PanelStyle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oq28g8:requestsummary__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:1oq28g8:requestsummary",
      "ownerSymbolName": "RequestSummary",
      "entryNodeId": "method:1oq28g8:requestsummary__entry",
      "exitNodeIds": [
        "method:1oq28g8:requestsummary__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oq28g8:requestsummary__entry",
          "kind": "entry",
          "label": "RequestSummary entry",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Orchestrates an async request to the KnowledgeCoordinator to produce a summary/quiz for the selected text (optionally including full page context) and stores the resulting KnowledgePacket."
        },
        {
          "id": "method:1oq28g8:requestsummary__action_41_ui_action_binding_41__linear",
          "kind": "statement",
          "label": "Invoked from button",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Bound to @onclick=\"RequestSummary\" in markup (user triggers via UI)"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_78_state_mutation_78__linear",
          "kind": "statement",
          "label": "Set loading start",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "IsLoading = true"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__condition",
          "kind": "condition",
          "label": "!string.IsNullOrWhiteSpace(FullPageContent)",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Prepends full page content to the prompt if present"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__true",
          "kind": "branch-true",
          "label": "include full page context",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__false",
          "kind": "branch-false",
          "label": "no extra context",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_83_requestsummary_await_83_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81,
          "detail": "var result = await Coordinator.RequestSummaryAndQuizAsync($\"{contextPrompt}{SelectedText}\");"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_83_external_call_83__linear",
          "kind": "http-call",
          "label": "Coordinator request",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Awaits Coordinator.RequestSummaryAndQuizAsync(...)"
        },
        {
          "id": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "RequestSummaryAndQuizAsync",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88,
          "detail": "string: contextPrompt + SelectedText (includes FullPageContent if not empty)"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Packet = result.Value when success, else null"
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__true",
          "kind": "branch-true",
          "label": "Packet assigned",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__false",
          "kind": "branch-false",
          "label": "Packet cleared",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "kind": "statement",
          "label": "merge",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_85_state_mutation_85__linear",
          "kind": "statement",
          "label": "Set loading end",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "IsLoading = false"
        },
        {
          "id": "method:1oq28g8:requestsummary__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oq28g8:requestsummary__entry__method:1oq28g8:requestsummary__action_41_ui_action_binding_41__linear",
          "from": "method:1oq28g8:requestsummary__entry",
          "to": "method:1oq28g8:requestsummary__action_41_ui_action_binding_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_41_ui_action_binding_41__linear__method:1oq28g8:requestsummary__action_78_state_mutation_78__linear",
          "from": "method:1oq28g8:requestsummary__action_41_ui_action_binding_41__linear",
          "to": "method:1oq28g8:requestsummary__action_78_state_mutation_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_78_state_mutation_78__linear__method:1oq28g8:requestsummary__action_79_branch_79__condition",
          "from": "method:1oq28g8:requestsummary__action_78_state_mutation_78__linear",
          "to": "method:1oq28g8:requestsummary__action_79_branch_79__condition",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__condition__method:1oq28g8:requestsummary__action_79_branch_79__true",
          "from": "method:1oq28g8:requestsummary__action_79_branch_79__condition",
          "to": "method:1oq28g8:requestsummary__action_79_branch_79__true",
          "kind": "condition-true",
          "label": "include full page context",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__condition__method:1oq28g8:requestsummary__action_79_branch_79__false",
          "from": "method:1oq28g8:requestsummary__action_79_branch_79__condition",
          "to": "method:1oq28g8:requestsummary__action_79_branch_79__false",
          "kind": "condition-false",
          "label": "no extra context",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__true__method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "from": "method:1oq28g8:requestsummary__action_79_branch_79__true",
          "to": "method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__false__method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "from": "method:1oq28g8:requestsummary__action_79_branch_79__false",
          "to": "method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_79_branch_79__merge__method:1oq28g8:requestsummary__action_83_requestsummary_await_83_0__await",
          "from": "method:1oq28g8:requestsummary__action_79_branch_79__merge",
          "to": "method:1oq28g8:requestsummary__action_83_requestsummary_await_83_0__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1oq28g8:requestsummary__action_83_requestsummary_await_83_0__await__method:1oq28g8:requestsummary__action_83_external_call_83__linear",
          "from": "method:1oq28g8:requestsummary__action_83_requestsummary_await_83_0__await",
          "to": "method:1oq28g8:requestsummary__action_83_external_call_83__linear",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_83_external_call_83__linear__call_method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync",
          "from": "method:1oq28g8:requestsummary__action_83_external_call_83__linear",
          "to": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "string: contextPrompt + SelectedText (includes FullPageContent if not empty)",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync__method:1oq28g8:requestsummary__action_84_fallback_84__condition",
          "from": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync",
          "to": "method:1oq28g8:requestsummary__action_84_fallback_84__condition",
          "kind": "fallback",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__condition__method:1oq28g8:requestsummary__action_84_fallback_84__true",
          "from": "method:1oq28g8:requestsummary__action_84_fallback_84__condition",
          "to": "method:1oq28g8:requestsummary__action_84_fallback_84__true",
          "kind": "condition-true",
          "label": "Packet assigned",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__condition__method:1oq28g8:requestsummary__action_84_fallback_84__false",
          "from": "method:1oq28g8:requestsummary__action_84_fallback_84__condition",
          "to": "method:1oq28g8:requestsummary__action_84_fallback_84__false",
          "kind": "condition-false",
          "label": "Packet cleared",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__true__method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "from": "method:1oq28g8:requestsummary__action_84_fallback_84__true",
          "to": "method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__false__method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "from": "method:1oq28g8:requestsummary__action_84_fallback_84__false",
          "to": "method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_84_fallback_84__merge__method:1oq28g8:requestsummary__action_85_state_mutation_85__linear",
          "from": "method:1oq28g8:requestsummary__action_84_fallback_84__merge",
          "to": "method:1oq28g8:requestsummary__action_85_state_mutation_85__linear",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oq28g8:requestsummary__action_85_state_mutation_85__linear__implicit_return",
          "from": "method:1oq28g8:requestsummary__action_85_state_mutation_85__linear",
          "to": "method:1oq28g8:requestsummary__implicit_return",
          "kind": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_RequestSummaryAndQuizAsync",
          "fromNodeId": "method:1oq28g8:requestsummary__call_83_RequestSummaryAndQuizAsync",
          "kind": "call-target",
          "targetNodeId": "method:2y4xzb:requestsummaryandquizasync",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "RequestSummaryAndQuizAsync",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "reason": "Call target RequestSummaryAndQuizAsync resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1oq28g8:requestsummary__action_79_branch_79__merge",
        "method:1oq28g8:requestsummary__action_84_fallback_84__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 76,
        "end": 86
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 76,
          "summary": "Control-flow fragment extracted for method RequestSummary.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bkauax:generatefullquiz__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:1bkauax:generatefullquiz",
      "ownerSymbolName": "GenerateFullQuiz",
      "entryNodeId": "method:1bkauax:generatefullquiz__entry",
      "exitNodeIds": [
        "method:1bkauax:generatefullquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1bkauax:generatefullquiz__entry",
          "kind": "entry",
          "label": "GenerateFullQuiz entry",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Requests a summary/quiz for the entire page content, then closes the panel."
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_31_ui_action_binding_31__linear",
          "kind": "statement",
          "label": "Invoked from button",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Bound to @onclick=\"GenerateFullQuiz\" in markup (user triggers via UI)"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_90_state_mutation_90__linear",
          "kind": "statement",
          "label": "Set loading start",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "IsLoading = true"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_91_generatefullquiz_await_91_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81,
          "detail": "await Coordinator.RequestSummaryAndQuizAsync(FullPageContent);"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_91_external_call_91__linear",
          "kind": "http-call",
          "label": "Coordinator full-page request",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Awaits Coordinator.RequestSummaryAndQuizAsync(FullPageContent)"
        },
        {
          "id": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "RequestSummaryAndQuizAsync",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88,
          "detail": "string: FullPageContent"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_92_state_mutation_92__linear",
          "kind": "statement",
          "label": "Set loading end",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "IsLoading = false"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_93_generatefullquiz_await_93_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81,
          "detail": "await CloseAsync();"
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_93_orchestration_93__linear",
          "kind": "statement",
          "label": "Close after request",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Awaits CloseAsync() to notify interaction service and clear Packet"
        },
        {
          "id": "method:1bkauax:generatefullquiz__call_93_CloseAsync",
          "kind": "call",
          "label": "CloseAsync",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1bkauax:generatefullquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1bkauax:generatefullquiz__entry__method:1bkauax:generatefullquiz__action_31_ui_action_binding_31__linear",
          "from": "method:1bkauax:generatefullquiz__entry",
          "to": "method:1bkauax:generatefullquiz__action_31_ui_action_binding_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_31_ui_action_binding_31__linear__method:1bkauax:generatefullquiz__action_90_state_mutation_90__linear",
          "from": "method:1bkauax:generatefullquiz__action_31_ui_action_binding_31__linear",
          "to": "method:1bkauax:generatefullquiz__action_90_state_mutation_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_90_state_mutation_90__linear__method:1bkauax:generatefullquiz__action_91_generatefullquiz_await_91_0__await",
          "from": "method:1bkauax:generatefullquiz__action_90_state_mutation_90__linear",
          "to": "method:1bkauax:generatefullquiz__action_91_generatefullquiz_await_91_0__await",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_91_generatefullquiz_await_91_0__await__method:1bkauax:generatefullquiz__action_91_external_call_91__linear",
          "from": "method:1bkauax:generatefullquiz__action_91_generatefullquiz_await_91_0__await",
          "to": "method:1bkauax:generatefullquiz__action_91_external_call_91__linear",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_91_external_call_91__linear__call_method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync",
          "from": "method:1bkauax:generatefullquiz__action_91_external_call_91__linear",
          "to": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync",
          "kind": "call",
          "label": "string: FullPageContent",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync__method:1bkauax:generatefullquiz__action_92_state_mutation_92__linear",
          "from": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync",
          "to": "method:1bkauax:generatefullquiz__action_92_state_mutation_92__linear",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_92_state_mutation_92__linear__method:1bkauax:generatefullquiz__action_93_generatefullquiz_await_93_1__await",
          "from": "method:1bkauax:generatefullquiz__action_92_state_mutation_92__linear",
          "to": "method:1bkauax:generatefullquiz__action_93_generatefullquiz_await_93_1__await",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_93_generatefullquiz_await_93_1__await__method:1bkauax:generatefullquiz__action_93_orchestration_93__linear",
          "from": "method:1bkauax:generatefullquiz__action_93_generatefullquiz_await_93_1__await",
          "to": "method:1bkauax:generatefullquiz__action_93_orchestration_93__linear",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bkauax:generatefullquiz__action_93_orchestration_93__linear__call_method:1bkauax:generatefullquiz__call_93_CloseAsync",
          "from": "method:1bkauax:generatefullquiz__action_93_orchestration_93__linear",
          "to": "method:1bkauax:generatefullquiz__call_93_CloseAsync",
          "kind": "call",
          "label": "no args",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bkauax:generatefullquiz__call_93_CloseAsync__implicit_return",
          "from": "method:1bkauax:generatefullquiz__call_93_CloseAsync",
          "to": "method:1bkauax:generatefullquiz__implicit_return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_RequestSummaryAndQuizAsync",
          "fromNodeId": "method:1bkauax:generatefullquiz__call_91_RequestSummaryAndQuizAsync",
          "kind": "call-target",
          "targetNodeId": "method:2y4xzb:requestsummaryandquizasync",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "RequestSummaryAndQuizAsync",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "reason": "Call target RequestSummaryAndQuizAsync resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        },
        {
          "id": "method:1bkauax:generatefullquiz__call_93_CloseAsync__jump_NexusReader_UI_Shared_Components_Molecules_SelectionAiPanel_razor_CloseAsync",
          "fromNodeId": "method:1bkauax:generatefullquiz__call_93_CloseAsync",
          "kind": "call-target",
          "targetNodeId": "method:1pecu6b:closeasync",
          "targetPath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "targetHint": "CloseAsync",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "reason": "Call target CloseAsync resolved to NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 88,
        "end": 94
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 88,
          "summary": "Control-flow fragment extracted for method GenerateFullQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pecu6b:closeasync__fragment",
      "ownerFileId": "file:1ez5kuw:selectionaipanel-razor",
      "ownerSymbolId": "method:1pecu6b:closeasync",
      "ownerSymbolName": "CloseAsync",
      "entryNodeId": "method:1pecu6b:closeasync__entry",
      "exitNodeIds": [
        "method:1pecu6b:closeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pecu6b:closeasync__entry",
          "kind": "entry",
          "label": "CloseAsync entry",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.99,
          "detail": "Clears the cached packet and notifies the reader interaction service that selection has been cleared, effectively closing the panel."
        },
        {
          "id": "method:1pecu6b:closeasync__action_32_ui_action_binding_32__linear",
          "kind": "statement",
          "label": "Invoked from buttons",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Bound to @onclick=\"CloseAsync\" (buttons 'Pomiń' and 'Zamknij')"
        },
        {
          "id": "method:1pecu6b:closeasync__action_98_state_mutation_98__linear",
          "kind": "statement",
          "label": "Clear Packet",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Packet = null"
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_closeasync_await_99_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81,
          "detail": "await InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!);"
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_closeasync_notification_99_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.83,
          "detail": "await InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!);"
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_external_call_99__linear",
          "kind": "http-call",
          "label": "Notify interaction service",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7,
          "detail": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally"
        },
        {
          "id": "method:1pecu6b:closeasync__call_99_NotifyTextSelected",
          "kind": "call",
          "label": "NotifyTextSelected",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88,
          "detail": "('', '', null) — clears selection context"
        },
        {
          "id": "method:1pecu6b:closeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pecu6b:closeasync__entry__method:1pecu6b:closeasync__action_32_ui_action_binding_32__linear",
          "from": "method:1pecu6b:closeasync__entry",
          "to": "method:1pecu6b:closeasync__action_32_ui_action_binding_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pecu6b:closeasync__action_32_ui_action_binding_32__linear__method:1pecu6b:closeasync__action_98_state_mutation_98__linear",
          "from": "method:1pecu6b:closeasync__action_32_ui_action_binding_32__linear",
          "to": "method:1pecu6b:closeasync__action_98_state_mutation_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pecu6b:closeasync__action_98_state_mutation_98__linear__method:1pecu6b:closeasync__action_99_closeasync_await_99_1__await",
          "from": "method:1pecu6b:closeasync__action_98_state_mutation_98__linear",
          "to": "method:1pecu6b:closeasync__action_99_closeasync_await_99_1__await",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_closeasync_await_99_1__await__method:1pecu6b:closeasync__action_99_closeasync_notification_99_0__linear",
          "from": "method:1pecu6b:closeasync__action_99_closeasync_await_99_1__await",
          "to": "method:1pecu6b:closeasync__action_99_closeasync_notification_99_0__linear",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.83
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_closeasync_notification_99_0__linear__method:1pecu6b:closeasync__action_99_external_call_99__linear",
          "from": "method:1pecu6b:closeasync__action_99_closeasync_notification_99_0__linear",
          "to": "method:1pecu6b:closeasync__action_99_external_call_99__linear",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pecu6b:closeasync__action_99_external_call_99__linear__call_method:1pecu6b:closeasync__call_99_NotifyTextSelected",
          "from": "method:1pecu6b:closeasync__action_99_external_call_99__linear",
          "to": "method:1pecu6b:closeasync__call_99_NotifyTextSelected",
          "kind": "call",
          "label": "('', '', null) — clears selection context",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1pecu6b:closeasync__call_99_NotifyTextSelected__implicit_return",
          "from": "method:1pecu6b:closeasync__call_99_NotifyTextSelected",
          "to": "method:1pecu6b:closeasync__implicit_return",
          "kind": "return",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1pecu6b:closeasync__call_99_NotifyTextSelected__jump_NexusReader_UI_Shared_Services_IReaderInteractionService_cs_NotifyTextSelected",
          "fromNodeId": "method:1pecu6b:closeasync__call_99_NotifyTextSelected",
          "kind": "call-target",
          "targetNodeId": "method:p2mw02:notifytextselected",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "targetHint": "NotifyTextSelected",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "reason": "Call target NotifyTextSelected resolved to NexusReader.UI.Shared/Services/IReaderInteractionService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 96,
        "end": 100
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor",
          "line": 96,
          "summary": "Control-flow fragment extracted for method CloseAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ujsh2c:closemodal__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:ujsh2c:closemodal",
      "ownerSymbolName": "CloseModal",
      "entryNodeId": "method:ujsh2c:closemodal__entry",
      "exitNodeIds": [
        "method:ujsh2c:closemodal__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ujsh2c:closemodal__entry",
          "kind": "entry",
          "label": "CloseModal entry",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Closes the modal, resets internal state, and notifies consumers that IsOpen changed."
        },
        {
          "id": "method:ujsh2c:closemodal__action_130_state_change_130__linear",
          "kind": "statement",
          "label": "Close modal",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsOpen = false"
        },
        {
          "id": "method:ujsh2c:closemodal__action_131_call_131__linear",
          "kind": "statement",
          "label": "Reset state",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "Reset()"
        },
        {
          "id": "method:ujsh2c:closemodal__call_131_Reset",
          "kind": "call",
          "label": "Reset",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:ujsh2c:closemodal__action_132_closemodal_await_132_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "await IsOpenChanged.InvokeAsync(false);"
        },
        {
          "id": "method:ujsh2c:closemodal__action_132_event_132__linear",
          "kind": "statement",
          "label": "Notify parent of IsOpen change",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsOpenChanged.InvokeAsync(false)"
        },
        {
          "id": "method:ujsh2c:closemodal__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ujsh2c:closemodal__entry__method:ujsh2c:closemodal__action_130_state_change_130__linear",
          "from": "method:ujsh2c:closemodal__entry",
          "to": "method:ujsh2c:closemodal__action_130_state_change_130__linear",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ujsh2c:closemodal__action_130_state_change_130__linear__method:ujsh2c:closemodal__action_131_call_131__linear",
          "from": "method:ujsh2c:closemodal__action_130_state_change_130__linear",
          "to": "method:ujsh2c:closemodal__action_131_call_131__linear",
          "kind": "next",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ujsh2c:closemodal__action_131_call_131__linear__call_method:ujsh2c:closemodal__call_131_Reset",
          "from": "method:ujsh2c:closemodal__action_131_call_131__linear",
          "to": "method:ujsh2c:closemodal__call_131_Reset",
          "kind": "call",
          "label": "none",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ujsh2c:closemodal__call_131_Reset__method:ujsh2c:closemodal__action_132_closemodal_await_132_0__await",
          "from": "method:ujsh2c:closemodal__call_131_Reset",
          "to": "method:ujsh2c:closemodal__action_132_closemodal_await_132_0__await",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:ujsh2c:closemodal__action_132_closemodal_await_132_0__await__method:ujsh2c:closemodal__action_132_event_132__linear",
          "from": "method:ujsh2c:closemodal__action_132_closemodal_await_132_0__await",
          "to": "method:ujsh2c:closemodal__action_132_event_132__linear",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ujsh2c:closemodal__action_132_event_132__linear__implicit_return",
          "from": "method:ujsh2c:closemodal__action_132_event_132__linear",
          "to": "method:ujsh2c:closemodal__implicit_return",
          "kind": "return",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ujsh2c:closemodal__call_131_Reset__jump_NexusReader_UI_Shared_Components_Organisms_BookIngestionModal_razor_Reset",
          "fromNodeId": "method:ujsh2c:closemodal__call_131_Reset",
          "kind": "call-target",
          "targetNodeId": "method:d54w6c:reset",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "targetHint": "Reset",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "reason": "Call target Reset resolved to NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 128,
        "end": 133
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 128,
          "summary": "Control-flow fragment extracted for method CloseModal.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:d54w6c:reset__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:d54w6c:reset",
      "ownerSymbolName": "Reset",
      "entryNodeId": "method:d54w6c:reset__entry",
      "exitNodeIds": [
        "method:d54w6c:reset__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:d54w6c:reset__entry",
          "kind": "entry",
          "label": "Reset entry",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Clears parsing/verification/ingestion flags and temporary data (metadata, errors, drag state, epub bytes)."
        },
        {
          "id": "method:d54w6c:reset__action_137_state_change_137__linear",
          "kind": "statement",
          "label": "Clear parsing/verifying/ingesting flags",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsParsing/IsVerifying/IsIngesting = false"
        },
        {
          "id": "method:d54w6c:reset__action_140_state_change_140__linear",
          "kind": "statement",
          "label": "Clear metadata and temp data",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "Metadata = null; ErrorMessage = null; _epubBytes = null; _isDragging = false"
        },
        {
          "id": "method:d54w6c:reset__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:d54w6c:reset__entry__method:d54w6c:reset__action_137_state_change_137__linear",
          "from": "method:d54w6c:reset__entry",
          "to": "method:d54w6c:reset__action_137_state_change_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:d54w6c:reset__action_137_state_change_137__linear__method:d54w6c:reset__action_140_state_change_140__linear",
          "from": "method:d54w6c:reset__action_137_state_change_137__linear",
          "to": "method:d54w6c:reset__action_140_state_change_140__linear",
          "kind": "next",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:d54w6c:reset__action_140_state_change_140__linear__implicit_return",
          "from": "method:d54w6c:reset__action_140_state_change_140__linear",
          "to": "method:d54w6c:reset__implicit_return",
          "kind": "return",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 135,
        "end": 144
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 135,
          "summary": "Control-flow fragment extracted for method Reset.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1u9mlsa:ondragenter__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:1u9mlsa:ondragenter",
      "ownerSymbolName": "OnDragEnter",
      "entryNodeId": "method:1u9mlsa:ondragenter__entry",
      "exitNodeIds": [
        "method:1u9mlsa:ondragenter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1u9mlsa:ondragenter__entry",
          "kind": "entry",
          "label": "OnDragEnter entry",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Sets drag-over UI state when a drag enters the drop zone."
        },
        {
          "id": "method:1u9mlsa:ondragenter__action_146_state_change_146__linear",
          "kind": "statement",
          "label": "Set dragging flag",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "_isDragging = true"
        },
        {
          "id": "method:1u9mlsa:ondragenter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1u9mlsa:ondragenter__entry__method:1u9mlsa:ondragenter__action_146_state_change_146__linear",
          "from": "method:1u9mlsa:ondragenter__entry",
          "to": "method:1u9mlsa:ondragenter__action_146_state_change_146__linear",
          "kind": "next",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1u9mlsa:ondragenter__action_146_state_change_146__linear__implicit_return",
          "from": "method:1u9mlsa:ondragenter__action_146_state_change_146__linear",
          "to": "method:1u9mlsa:ondragenter__implicit_return",
          "kind": "return",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 146,
        "end": 146
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 146,
          "summary": "Control-flow fragment extracted for method OnDragEnter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6bf66s:ondragleave__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:6bf66s:ondragleave",
      "ownerSymbolName": "OnDragLeave",
      "entryNodeId": "method:6bf66s:ondragleave__entry",
      "exitNodeIds": [
        "method:6bf66s:ondragleave__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:6bf66s:ondragleave__entry",
          "kind": "entry",
          "label": "OnDragLeave entry",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Clears drag-over UI state when a drag leaves the drop zone."
        },
        {
          "id": "method:6bf66s:ondragleave__action_147_state_change_147__linear",
          "kind": "statement",
          "label": "Clear dragging flag",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "_isDragging = false"
        },
        {
          "id": "method:6bf66s:ondragleave__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:6bf66s:ondragleave__entry__method:6bf66s:ondragleave__action_147_state_change_147__linear",
          "from": "method:6bf66s:ondragleave__entry",
          "to": "method:6bf66s:ondragleave__action_147_state_change_147__linear",
          "kind": "next",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6bf66s:ondragleave__action_147_state_change_147__linear__implicit_return",
          "from": "method:6bf66s:ondragleave__action_147_state_change_147__linear",
          "to": "method:6bf66s:ondragleave__implicit_return",
          "kind": "return",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 147,
        "end": 147
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 147,
          "summary": "Control-flow fragment extracted for method OnDragLeave.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ptxaoh:handlefileselected__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:1ptxaoh:handlefileselected",
      "ownerSymbolName": "HandleFileSelected",
      "entryNodeId": "method:1ptxaoh:handlefileselected__entry",
      "exitNodeIds": [
        "method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return",
        "method:1ptxaoh:handlefileselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ptxaoh:handlefileselected__entry",
          "kind": "entry",
          "label": "HandleFileSelected entry",
          "line": 149,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Handles file selection or drop: validates file type/size, reads bytes, invokes metadata extractor, and transitions UI to verification or error state."
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition",
          "kind": "condition",
          "label": "file == null",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "if (file == null) return;"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__true",
          "kind": "branch-true",
          "label": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "kind": "statement",
          "label": "merge",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition",
          "kind": "condition",
          "label": "file == null",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9,
          "detail": "if (file == null) return;"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition",
          "kind": "condition",
          "label": "file.Name endsWith .epub",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "if not .epub set ErrorMessage and return"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__true",
          "kind": "branch-true",
          "label": "invalid->set ErrorMessage",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "kind": "statement",
          "label": "merge",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition",
          "kind": "condition",
          "label": "!file.Name.EndsWith(\".epub\", StringComparison.OrdinalIgnoreCase)",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78,
          "detail": "if (!file.Name.EndsWith(\".epub\", StringComparison.OrdinalIgnoreCase))"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_163_state_change_163__linear",
          "kind": "statement",
          "label": "Start parsing",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsParsing = true; StateHasChanged()"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_166_handlefileselected_try_166_3__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_168_io_168__linear",
          "kind": "statement",
          "label": "Read uploaded file into memory",
          "line": 168,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "stream.CopyToAsync(memoryStream); _epubBytes = memoryStream.ToArray()"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_170_handlefileselected_await_170_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 170,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "await stream.CopyToAsync(memoryStream);"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_174_handlefileselected_await_174_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "var result = await MetadataExtractor.ExtractMetadataAsync(memoryStream);"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_174_external_call_174__linear",
          "kind": "http-call",
          "label": "Extract EPUB metadata",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors)"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync",
          "kind": "call",
          "label": "ExtractMetadataAsync",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88,
          "detail": "memoryStream (stream of uploaded .epub)"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition",
          "kind": "condition",
          "label": "Metadata extraction success check",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "if (result.IsSuccess) set Metadata and IsVerifying=true else set ErrorMessage from result.Errors"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__true",
          "kind": "branch-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__false",
          "kind": "branch-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "kind": "statement",
          "label": "merge",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_183_handlefileselected_repository_read_183_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86,
          "detail": "ErrorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Failed to parse EPUB.\";"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_186_handlefileselected_catch_186_9__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 186,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_186_error_handling_186__linear",
          "kind": "statement",
          "label": "Catch exceptions during upload/parsing",
          "line": 186,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "Logger.LogError and set ErrorMessage"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_188_handlefileselected_log_188_10__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 188,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.92,
          "detail": "Logger.LogError(ex, \"Error uploading EPUB\");"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_191_handlefileselected_finally_191_11__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 191,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_193_finalize_193__linear",
          "kind": "statement",
          "label": "Stop parsing and refresh UI",
          "line": 193,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsParsing = false; StateHasChanged()"
        },
        {
          "id": "method:1ptxaoh:handlefileselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ptxaoh:handlefileselected__entry__method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition",
          "from": "method:1ptxaoh:handlefileselected__entry",
          "to": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition__method:1ptxaoh:handlefileselected__action_154_guard_clause_154__true",
          "from": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition",
          "to": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__true",
          "kind": "condition-true",
          "label": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition__method:1ptxaoh:handlefileselected__action_154_guard_clause_154__false",
          "from": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__condition",
          "to": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__true__method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "from": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__true",
          "to": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__false__method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "from": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__false",
          "to": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge__method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition",
          "from": "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
          "to": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition__method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__true",
          "from": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition",
          "to": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition__method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__false",
          "from": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__condition",
          "to": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__true__method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "from": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__true",
          "to": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__false__method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "from": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__false",
          "to": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge__method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition",
          "from": "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
          "to": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition__method:1ptxaoh:handlefileselected__action_156_guard_clause_156__true",
          "from": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition",
          "to": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__true",
          "kind": "condition-true",
          "label": "invalid->set ErrorMessage",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition__method:1ptxaoh:handlefileselected__action_156_guard_clause_156__false",
          "from": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__condition",
          "to": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__true__method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "from": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__true",
          "to": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__false__method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "from": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__false",
          "to": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge__method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition",
          "from": "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
          "to": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition__method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__true",
          "from": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition",
          "to": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition__method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__false",
          "from": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__condition",
          "to": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__true__method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "from": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__true",
          "to": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__false__method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "from": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__false",
          "to": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge__method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return",
          "from": "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
          "to": "method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return",
          "kind": "return",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return__method:1ptxaoh:handlefileselected__action_163_state_change_163__linear",
          "from": "method:1ptxaoh:handlefileselected__action_159_handlefileselected_return_159_2__return",
          "to": "method:1ptxaoh:handlefileselected__action_163_state_change_163__linear",
          "kind": "next",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_163_state_change_163__linear__method:1ptxaoh:handlefileselected__action_166_handlefileselected_try_166_3__try",
          "from": "method:1ptxaoh:handlefileselected__action_163_state_change_163__linear",
          "to": "method:1ptxaoh:handlefileselected__action_166_handlefileselected_try_166_3__try",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_166_handlefileselected_try_166_3__try__method:1ptxaoh:handlefileselected__action_168_io_168__linear",
          "from": "method:1ptxaoh:handlefileselected__action_166_handlefileselected_try_166_3__try",
          "to": "method:1ptxaoh:handlefileselected__action_168_io_168__linear",
          "kind": "next",
          "line": 168,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_168_io_168__linear__method:1ptxaoh:handlefileselected__action_170_handlefileselected_await_170_4__await",
          "from": "method:1ptxaoh:handlefileselected__action_168_io_168__linear",
          "to": "method:1ptxaoh:handlefileselected__action_170_handlefileselected_await_170_4__await",
          "kind": "next",
          "line": 170,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_170_handlefileselected_await_170_4__await__method:1ptxaoh:handlefileselected__action_174_handlefileselected_await_174_5__await",
          "from": "method:1ptxaoh:handlefileselected__action_170_handlefileselected_await_170_4__await",
          "to": "method:1ptxaoh:handlefileselected__action_174_handlefileselected_await_174_5__await",
          "kind": "next",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_174_handlefileselected_await_174_5__await__method:1ptxaoh:handlefileselected__action_174_external_call_174__linear",
          "from": "method:1ptxaoh:handlefileselected__action_174_handlefileselected_await_174_5__await",
          "to": "method:1ptxaoh:handlefileselected__action_174_external_call_174__linear",
          "kind": "next",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_174_external_call_174__linear__call_method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync",
          "from": "method:1ptxaoh:handlefileselected__action_174_external_call_174__linear",
          "to": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync",
          "kind": "call",
          "label": "memoryStream (stream of uploaded .epub)",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync__method:1ptxaoh:handlefileselected__action_176_branch_176__condition",
          "from": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync",
          "to": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition__method:1ptxaoh:handlefileselected__action_176_branch_176__true",
          "from": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition",
          "to": "method:1ptxaoh:handlefileselected__action_176_branch_176__true",
          "kind": "condition-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition__method:1ptxaoh:handlefileselected__action_176_branch_176__false",
          "from": "method:1ptxaoh:handlefileselected__action_176_branch_176__condition",
          "to": "method:1ptxaoh:handlefileselected__action_176_branch_176__false",
          "kind": "condition-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__true__method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "from": "method:1ptxaoh:handlefileselected__action_176_branch_176__true",
          "to": "method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__false__method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "from": "method:1ptxaoh:handlefileselected__action_176_branch_176__false",
          "to": "method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_branch_176__merge__method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition",
          "from": "method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
          "to": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition__method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__true",
          "from": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition",
          "to": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition__method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__false",
          "from": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__condition",
          "to": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__true__method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "from": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__true",
          "to": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__false__method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "from": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__false",
          "to": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge__method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition",
          "from": "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
          "to": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition",
          "kind": "fallback",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition__method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__true",
          "from": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition",
          "to": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition__method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__false",
          "from": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__condition",
          "to": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__true__method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "from": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__true",
          "to": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "kind": "next",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__false__method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "from": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__false",
          "to": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "kind": "next",
          "line": 181,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge__method:1ptxaoh:handlefileselected__action_183_handlefileselected_repository_read_183_8__linear",
          "from": "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge",
          "to": "method:1ptxaoh:handlefileselected__action_183_handlefileselected_repository_read_183_8__linear",
          "kind": "next",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_183_handlefileselected_repository_read_183_8__linear__method:1ptxaoh:handlefileselected__action_186_handlefileselected_catch_186_9__catch",
          "from": "method:1ptxaoh:handlefileselected__action_183_handlefileselected_repository_read_183_8__linear",
          "to": "method:1ptxaoh:handlefileselected__action_186_handlefileselected_catch_186_9__catch",
          "kind": "exception",
          "line": 186,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_186_handlefileselected_catch_186_9__catch__method:1ptxaoh:handlefileselected__action_186_error_handling_186__linear",
          "from": "method:1ptxaoh:handlefileselected__action_186_handlefileselected_catch_186_9__catch",
          "to": "method:1ptxaoh:handlefileselected__action_186_error_handling_186__linear",
          "kind": "next",
          "line": 186,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_186_error_handling_186__linear__method:1ptxaoh:handlefileselected__action_188_handlefileselected_log_188_10__linear",
          "from": "method:1ptxaoh:handlefileselected__action_186_error_handling_186__linear",
          "to": "method:1ptxaoh:handlefileselected__action_188_handlefileselected_log_188_10__linear",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.92
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_188_handlefileselected_log_188_10__linear__method:1ptxaoh:handlefileselected__action_191_handlefileselected_finally_191_11__finally",
          "from": "method:1ptxaoh:handlefileselected__action_188_handlefileselected_log_188_10__linear",
          "to": "method:1ptxaoh:handlefileselected__action_191_handlefileselected_finally_191_11__finally",
          "kind": "next",
          "line": 191,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_191_handlefileselected_finally_191_11__finally__method:1ptxaoh:handlefileselected__action_193_finalize_193__linear",
          "from": "method:1ptxaoh:handlefileselected__action_191_handlefileselected_finally_191_11__finally",
          "to": "method:1ptxaoh:handlefileselected__action_193_finalize_193__linear",
          "kind": "next",
          "line": 193,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ptxaoh:handlefileselected__action_193_finalize_193__linear__implicit_return",
          "from": "method:1ptxaoh:handlefileselected__action_193_finalize_193__linear",
          "to": "method:1ptxaoh:handlefileselected__implicit_return",
          "kind": "return",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync__jump_unknown_ExtractMetadataAsync",
          "fromNodeId": "method:1ptxaoh:handlefileselected__call_174_ExtractMetadataAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ExtractMetadataAsync",
          "line": 174,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "reason": "Call target ExtractMetadataAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ptxaoh:handlefileselected__action_154_guard_clause_154__merge",
        "method:1ptxaoh:handlefileselected__action_154_handlefileselected_guard_clause_154_0__merge",
        "method:1ptxaoh:handlefileselected__action_156_guard_clause_156__merge",
        "method:1ptxaoh:handlefileselected__action_156_handlefileselected_branch_156_1__merge",
        "method:1ptxaoh:handlefileselected__action_176_branch_176__merge",
        "method:1ptxaoh:handlefileselected__action_176_handlefileselected_branch_176_6__merge",
        "method:1ptxaoh:handlefileselected__action_181_handlefileselected_fallback_181_7__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 149,
        "end": 196
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 149,
          "summary": "Control-flow fragment extracted for method HandleFileSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10uf4tt:savetolibrary__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:10uf4tt:savetolibrary",
      "ownerSymbolName": "SaveToLibrary",
      "entryNodeId": "method:10uf4tt:savetolibrary__entry",
      "exitNodeIds": [
        "method:10uf4tt:savetolibrary__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10uf4tt:savetolibrary__entry",
          "kind": "entry",
          "label": "SaveToLibrary entry",
          "line": 198,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Sends the ingested ebook (metadata + base64 content) to the server API and on success closes the modal and navigates to the new book."
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition",
          "kind": "condition",
          "label": "Metadata == null || _epubBytes == null",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9,
          "detail": "if (Metadata == null || _epubBytes == null) return;"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition",
          "kind": "condition",
          "label": "Metadata != null && _epubBytes != null",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "return"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__true",
          "kind": "branch-true",
          "label": "return if missing",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "kind": "statement",
          "label": "merge",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_202_state_change_202__linear",
          "kind": "statement",
          "label": "Start ingesting",
          "line": 202,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsIngesting = true; ErrorMessage = null; StateHasChanged()"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_206_savetolibrary_try_206_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_208_mapping_208__linear",
          "kind": "statement",
          "label": "Build ingest request DTO",
          "line": 208,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IngestEbookRequest constructed from Metadata fields and base64-encoded bytes/cover"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_216_savetolibrary_await_216_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "var response = await Http.PostAsJsonAsync(\"api/library/ingest\", request);"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_216_external_call_216__linear",
          "kind": "http-call",
          "label": "POST ingest request to server API",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "Http.PostAsJsonAsync(\"api/library/ingest\", request)"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__condition",
          "kind": "condition",
          "label": "Handle response success/failure",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "If success read result, CloseModal and navigate; else set ErrorMessage from response body"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__true",
          "kind": "branch-true",
          "label": "true",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__false",
          "kind": "branch-false",
          "label": "false",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "kind": "statement",
          "label": "merge",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_220_savetolibrary_await_220_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 220,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "var result = await response.Content.ReadFromJsonAsync<IngestResult>();"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_220_io_220__linear",
          "kind": "statement",
          "label": "Read response and parse result",
          "line": 220,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<IngestResult>()"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition",
          "kind": "condition",
          "label": "result != null",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78,
          "detail": "if (result != null)"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_223_savetolibrary_await_223_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 223,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "await CloseModal();"
        },
        {
          "id": "method:10uf4tt:savetolibrary__call_223_CloseModal",
          "kind": "call",
          "label": "CloseModal",
          "line": 223,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:10uf4tt:savetolibrary__call_224_NavigateToBook",
          "kind": "call",
          "label": "NavigateToBook",
          "line": 224,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88,
          "detail": "result.Id (Guid)"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_229_savetolibrary_await_229_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81,
          "detail": "ErrorMessage = await response.Content.ReadAsStringAsync();"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_232_savetolibrary_catch_232_9__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_232_error_handling_232__linear",
          "kind": "statement",
          "label": "Catch exceptions during ingest",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "Logger.LogError and set ErrorMessage"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_234_savetolibrary_log_234_10__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.92,
          "detail": "Logger.LogError(ex, \"Error during ingestion\");"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_237_savetolibrary_finally_237_11__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 237,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_239_finalize_239__linear",
          "kind": "statement",
          "label": "Stop ingesting and refresh UI",
          "line": 239,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "IsIngesting = false; StateHasChanged()"
        },
        {
          "id": "method:10uf4tt:savetolibrary__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 242,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10uf4tt:savetolibrary__entry__method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition",
          "from": "method:10uf4tt:savetolibrary__entry",
          "to": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition__method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__true",
          "from": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition",
          "to": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition__method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__false",
          "from": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__condition",
          "to": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__true__method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "from": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__true",
          "to": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__false__method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "from": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__false",
          "to": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.9
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge__method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition",
          "from": "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
          "to": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition__method:10uf4tt:savetolibrary__action_200_guard_clause_200__true",
          "from": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition",
          "to": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__true",
          "kind": "condition-true",
          "label": "return if missing",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition__method:10uf4tt:savetolibrary__action_200_guard_clause_200__false",
          "from": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__condition",
          "to": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__true__method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "from": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__true",
          "to": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__false__method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "from": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__false",
          "to": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge__method:10uf4tt:savetolibrary__action_202_state_change_202__linear",
          "from": "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
          "to": "method:10uf4tt:savetolibrary__action_202_state_change_202__linear",
          "kind": "next",
          "line": 202,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_202_state_change_202__linear__method:10uf4tt:savetolibrary__action_206_savetolibrary_try_206_1__try",
          "from": "method:10uf4tt:savetolibrary__action_202_state_change_202__linear",
          "to": "method:10uf4tt:savetolibrary__action_206_savetolibrary_try_206_1__try",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_206_savetolibrary_try_206_1__try__method:10uf4tt:savetolibrary__action_208_mapping_208__linear",
          "from": "method:10uf4tt:savetolibrary__action_206_savetolibrary_try_206_1__try",
          "to": "method:10uf4tt:savetolibrary__action_208_mapping_208__linear",
          "kind": "next",
          "line": 208,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_208_mapping_208__linear__method:10uf4tt:savetolibrary__action_216_savetolibrary_await_216_2__await",
          "from": "method:10uf4tt:savetolibrary__action_208_mapping_208__linear",
          "to": "method:10uf4tt:savetolibrary__action_216_savetolibrary_await_216_2__await",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_216_savetolibrary_await_216_2__await__method:10uf4tt:savetolibrary__action_216_external_call_216__linear",
          "from": "method:10uf4tt:savetolibrary__action_216_savetolibrary_await_216_2__await",
          "to": "method:10uf4tt:savetolibrary__action_216_external_call_216__linear",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_216_external_call_216__linear__method:10uf4tt:savetolibrary__action_218_branch_218__condition",
          "from": "method:10uf4tt:savetolibrary__action_216_external_call_216__linear",
          "to": "method:10uf4tt:savetolibrary__action_218_branch_218__condition",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__condition__method:10uf4tt:savetolibrary__action_218_branch_218__true",
          "from": "method:10uf4tt:savetolibrary__action_218_branch_218__condition",
          "to": "method:10uf4tt:savetolibrary__action_218_branch_218__true",
          "kind": "condition-true",
          "label": "true",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__condition__method:10uf4tt:savetolibrary__action_218_branch_218__false",
          "from": "method:10uf4tt:savetolibrary__action_218_branch_218__condition",
          "to": "method:10uf4tt:savetolibrary__action_218_branch_218__false",
          "kind": "condition-false",
          "label": "false",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__true__method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "from": "method:10uf4tt:savetolibrary__action_218_branch_218__true",
          "to": "method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__false__method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "from": "method:10uf4tt:savetolibrary__action_218_branch_218__false",
          "to": "method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_branch_218__merge__method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition",
          "from": "method:10uf4tt:savetolibrary__action_218_branch_218__merge",
          "to": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition__method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__true",
          "from": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition",
          "to": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition__method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__false",
          "from": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__condition",
          "to": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__true__method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "from": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__true",
          "to": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__false__method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "from": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__false",
          "to": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge__method:10uf4tt:savetolibrary__action_220_savetolibrary_await_220_4__await",
          "from": "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
          "to": "method:10uf4tt:savetolibrary__action_220_savetolibrary_await_220_4__await",
          "kind": "next",
          "line": 220,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_220_savetolibrary_await_220_4__await__method:10uf4tt:savetolibrary__action_220_io_220__linear",
          "from": "method:10uf4tt:savetolibrary__action_220_savetolibrary_await_220_4__await",
          "to": "method:10uf4tt:savetolibrary__action_220_io_220__linear",
          "kind": "next",
          "line": 220,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_220_io_220__linear__method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition",
          "from": "method:10uf4tt:savetolibrary__action_220_io_220__linear",
          "to": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition",
          "kind": "next",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition__method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__true",
          "from": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition",
          "to": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition__method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__false",
          "from": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__condition",
          "to": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__true__method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "from": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__true",
          "to": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "kind": "next",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__false__method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "from": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__false",
          "to": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "kind": "next",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.78
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge__method:10uf4tt:savetolibrary__action_223_savetolibrary_await_223_6__await",
          "from": "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
          "to": "method:10uf4tt:savetolibrary__action_223_savetolibrary_await_223_6__await",
          "kind": "next",
          "line": 223,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_223_savetolibrary_await_223_6__await__call_method:10uf4tt:savetolibrary__call_223_CloseModal",
          "from": "method:10uf4tt:savetolibrary__action_223_savetolibrary_await_223_6__await",
          "to": "method:10uf4tt:savetolibrary__call_223_CloseModal",
          "kind": "call",
          "label": "none",
          "line": 223,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88
        },
        {
          "id": "method:10uf4tt:savetolibrary__call_223_CloseModal__call_method:10uf4tt:savetolibrary__call_224_NavigateToBook",
          "from": "method:10uf4tt:savetolibrary__call_223_CloseModal",
          "to": "method:10uf4tt:savetolibrary__call_224_NavigateToBook",
          "kind": "call",
          "label": "result.Id (Guid)",
          "line": 224,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.88
        },
        {
          "id": "method:10uf4tt:savetolibrary__call_224_NavigateToBook__method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition",
          "from": "method:10uf4tt:savetolibrary__call_224_NavigateToBook",
          "to": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition",
          "kind": "fallback",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition__method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__true",
          "from": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition",
          "to": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition__method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__false",
          "from": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__condition",
          "to": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__true__method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "from": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__true",
          "to": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "kind": "next",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__false__method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "from": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__false",
          "to": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "kind": "next",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge__method:10uf4tt:savetolibrary__action_229_savetolibrary_await_229_8__await",
          "from": "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge",
          "to": "method:10uf4tt:savetolibrary__action_229_savetolibrary_await_229_8__await",
          "kind": "next",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.81
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_229_savetolibrary_await_229_8__await__method:10uf4tt:savetolibrary__action_232_savetolibrary_catch_232_9__catch",
          "from": "method:10uf4tt:savetolibrary__action_229_savetolibrary_await_229_8__await",
          "to": "method:10uf4tt:savetolibrary__action_232_savetolibrary_catch_232_9__catch",
          "kind": "exception",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.86
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_232_savetolibrary_catch_232_9__catch__method:10uf4tt:savetolibrary__action_232_error_handling_232__linear",
          "from": "method:10uf4tt:savetolibrary__action_232_savetolibrary_catch_232_9__catch",
          "to": "method:10uf4tt:savetolibrary__action_232_error_handling_232__linear",
          "kind": "next",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_232_error_handling_232__linear__method:10uf4tt:savetolibrary__action_234_savetolibrary_log_234_10__linear",
          "from": "method:10uf4tt:savetolibrary__action_232_error_handling_232__linear",
          "to": "method:10uf4tt:savetolibrary__action_234_savetolibrary_log_234_10__linear",
          "kind": "next",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.92
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_234_savetolibrary_log_234_10__linear__method:10uf4tt:savetolibrary__action_237_savetolibrary_finally_237_11__finally",
          "from": "method:10uf4tt:savetolibrary__action_234_savetolibrary_log_234_10__linear",
          "to": "method:10uf4tt:savetolibrary__action_237_savetolibrary_finally_237_11__finally",
          "kind": "next",
          "line": 237,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.84
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_237_savetolibrary_finally_237_11__finally__method:10uf4tt:savetolibrary__action_239_finalize_239__linear",
          "from": "method:10uf4tt:savetolibrary__action_237_savetolibrary_finally_237_11__finally",
          "to": "method:10uf4tt:savetolibrary__action_239_finalize_239__linear",
          "kind": "next",
          "line": 239,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:10uf4tt:savetolibrary__action_239_finalize_239__linear__implicit_return",
          "from": "method:10uf4tt:savetolibrary__action_239_finalize_239__linear",
          "to": "method:10uf4tt:savetolibrary__implicit_return",
          "kind": "return",
          "line": 242,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:10uf4tt:savetolibrary__call_223_CloseModal__jump_NexusReader_UI_Shared_Components_Organisms_BookIngestionModal_razor_CloseModal",
          "fromNodeId": "method:10uf4tt:savetolibrary__call_223_CloseModal",
          "kind": "call-target",
          "targetNodeId": "method:ujsh2c:closemodal",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "targetHint": "CloseModal",
          "line": 223,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "reason": "Call target CloseModal resolved to NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor.",
          "status": "resolved"
        },
        {
          "id": "method:10uf4tt:savetolibrary__call_224_NavigateToBook__jump_unknown_NavigateToBook",
          "fromNodeId": "method:10uf4tt:savetolibrary__call_224_NavigateToBook",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NavigateToBook",
          "line": 224,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "reason": "Call target NavigateToBook in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:10uf4tt:savetolibrary__action_200_savetolibrary_guard_clause_200_0__merge",
        "method:10uf4tt:savetolibrary__action_200_guard_clause_200__merge",
        "method:10uf4tt:savetolibrary__action_218_branch_218__merge",
        "method:10uf4tt:savetolibrary__action_218_savetolibrary_branch_218_3__merge",
        "method:10uf4tt:savetolibrary__action_221_savetolibrary_branch_221_5__merge",
        "method:10uf4tt:savetolibrary__action_227_savetolibrary_fallback_227_7__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 198,
        "end": 242
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 198,
          "summary": "Control-flow fragment extracted for method SaveToLibrary.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:46fkcr:disposeasync__fragment",
      "ownerFileId": "file:8kve74:bookingestionmodal-razor",
      "ownerSymbolId": "method:46fkcr:disposeasync",
      "ownerSymbolName": "DisposeAsync",
      "entryNodeId": "method:46fkcr:disposeasync__entry",
      "exitNodeIds": [
        "method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return",
        "method:46fkcr:disposeasync__action_250_return_250__return"
      ],
      "nodes": [
        {
          "id": "method:46fkcr:disposeasync__entry",
          "kind": "entry",
          "label": "DisposeAsync entry",
          "line": 246,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.99,
          "detail": "Clears the large epub byte array so it can be garbage-collected and completes disposal."
        },
        {
          "id": "method:46fkcr:disposeasync__action_249_cleanup_249__linear",
          "kind": "statement",
          "label": "Clear large buffer for GC",
          "line": 249,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "_epubBytes = null"
        },
        {
          "id": "method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "return ValueTask.CompletedTask;"
        },
        {
          "id": "method:46fkcr:disposeasync__action_250_return_250__return",
          "kind": "return",
          "label": "Return completed ValueTask",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7,
          "detail": "return ValueTask.CompletedTask"
        }
      ],
      "edges": [
        {
          "id": "method:46fkcr:disposeasync__entry__method:46fkcr:disposeasync__action_249_cleanup_249__linear",
          "from": "method:46fkcr:disposeasync__entry",
          "to": "method:46fkcr:disposeasync__action_249_cleanup_249__linear",
          "kind": "next",
          "line": 249,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:46fkcr:disposeasync__action_249_cleanup_249__linear__method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return",
          "from": "method:46fkcr:disposeasync__action_249_cleanup_249__linear",
          "to": "method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return",
          "kind": "return",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        },
        {
          "id": "method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return__method:46fkcr:disposeasync__action_250_return_250__return",
          "from": "method:46fkcr:disposeasync__action_250_disposeasync_return_250_0__return",
          "to": "method:46fkcr:disposeasync__action_250_return_250__return",
          "kind": "return",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 246,
        "end": 251
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor",
          "line": 246,
          "summary": "Control-flow fragment extracted for method DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:lwiyp5:render-razor-markup__fragment",
      "ownerFileId": "file:1uvdam9:currentreadingwidget-razor",
      "ownerSymbolId": "method:lwiyp5:render-razor-markup",
      "ownerSymbolName": "Render (Razor markup)",
      "entryNodeId": "method:lwiyp5:render-razor-markup__entry",
      "exitNodeIds": [
        "method:lwiyp5:render-razor-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:lwiyp5:render-razor-markup__entry",
          "kind": "entry",
          "label": "Render (Razor markup) entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.99,
          "detail": "Renders the current-reading card UI and chooses between book view and empty state based on Book parameter."
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition",
          "kind": "condition",
          "label": "Book != null",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78,
          "detail": "@if (Book != null)"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition",
          "kind": "condition",
          "label": "Conditional rendering based on Book presence",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "if (Book != null) -> render book card; else -> render empty state and library button"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_25_render_data_25__linear",
          "kind": "statement",
          "label": "Progress display and inline style width",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "Displays Book.Progress as percentage and sets progress-bar-fill width"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(Book.Description)",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "Renders description paragraph or placeholder text"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__true",
          "kind": "branch-true",
          "label": "show description",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__false",
          "kind": "branch-false",
          "label": "show empty excerpt",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(Book.Description)",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78,
          "detail": "@if (!string.IsNullOrEmpty(Book.Description))"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_44_ui_binding_44__linear",
          "kind": "statement",
          "label": "Button click binds to HandleContinueReading",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "button @onclick=\"HandleContinueReading\""
        },
        {
          "id": "method:lwiyp5:render-razor-markup__call_46_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.88,
          "detail": "Name=\"arrow-right\", Size=16"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__call_56_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.88,
          "detail": "Name=\"book-open\", Size=48"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_62_ui_binding_62__linear",
          "kind": "statement",
          "label": "Inline navigation lambda - navigate to /library",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "button @onclick='() => NavigationManager.NavigateTo(\"/library\")' (framework call)"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:lwiyp5:render-razor-markup__entry__method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition",
          "from": "method:lwiyp5:render-razor-markup__entry",
          "to": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition__method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__true",
          "from": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition",
          "to": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition__method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__false",
          "from": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__condition",
          "to": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__true__method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "from": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__true",
          "to": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__false__method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "from": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__false",
          "to": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge__method:lwiyp5:render-razor-markup__action_6_branch_6__condition",
          "from": "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
          "to": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition__method:lwiyp5:render-razor-markup__action_6_branch_6__true",
          "from": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition",
          "to": "method:lwiyp5:render-razor-markup__action_6_branch_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition__method:lwiyp5:render-razor-markup__action_6_branch_6__false",
          "from": "method:lwiyp5:render-razor-markup__action_6_branch_6__condition",
          "to": "method:lwiyp5:render-razor-markup__action_6_branch_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__true__method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "from": "method:lwiyp5:render-razor-markup__action_6_branch_6__true",
          "to": "method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__false__method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "from": "method:lwiyp5:render-razor-markup__action_6_branch_6__false",
          "to": "method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_6_branch_6__merge__method:lwiyp5:render-razor-markup__action_25_render_data_25__linear",
          "from": "method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
          "to": "method:lwiyp5:render-razor-markup__action_25_render_data_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_25_render_data_25__linear__method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition",
          "from": "method:lwiyp5:render-razor-markup__action_25_render_data_25__linear",
          "to": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition__method:lwiyp5:render-razor-markup__action_29_guard_clause_29__true",
          "from": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition",
          "to": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__true",
          "kind": "condition-true",
          "label": "show description",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition__method:lwiyp5:render-razor-markup__action_29_guard_clause_29__false",
          "from": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__condition",
          "to": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__false",
          "kind": "condition-false",
          "label": "show empty excerpt",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__true__method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "from": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__true",
          "to": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__false__method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "from": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__false",
          "to": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge__method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition",
          "from": "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
          "to": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition__method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__true",
          "from": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition",
          "to": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition__method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__false",
          "from": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__condition",
          "to": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__true__method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "from": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__true",
          "to": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__false__method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "from": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__false",
          "to": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge__method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition",
          "from": "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
          "to": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition",
          "kind": "fallback",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition__method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__true",
          "from": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition",
          "to": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition__method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__false",
          "from": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__condition",
          "to": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__true__method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "from": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__true",
          "to": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__false__method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "from": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__false",
          "to": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge__method:lwiyp5:render-razor-markup__action_44_ui_binding_44__linear",
          "from": "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
          "to": "method:lwiyp5:render-razor-markup__action_44_ui_binding_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_44_ui_binding_44__linear__call_method:lwiyp5:render-razor-markup__call_46_NexusIcon",
          "from": "method:lwiyp5:render-razor-markup__action_44_ui_binding_44__linear",
          "to": "method:lwiyp5:render-razor-markup__call_46_NexusIcon",
          "kind": "call",
          "label": "Name=\"arrow-right\", Size=16",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lwiyp5:render-razor-markup__call_46_NexusIcon__method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition",
          "from": "method:lwiyp5:render-razor-markup__call_46_NexusIcon",
          "to": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition",
          "kind": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition__method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__true",
          "from": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition",
          "to": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition__method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__false",
          "from": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__condition",
          "to": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__true__method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "from": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__true",
          "to": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__false__method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "from": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__false",
          "to": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge__call_method:lwiyp5:render-razor-markup__call_56_NexusIcon",
          "from": "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge",
          "to": "method:lwiyp5:render-razor-markup__call_56_NexusIcon",
          "kind": "call",
          "label": "Name=\"book-open\", Size=48",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lwiyp5:render-razor-markup__call_56_NexusIcon__method:lwiyp5:render-razor-markup__action_62_ui_binding_62__linear",
          "from": "method:lwiyp5:render-razor-markup__call_56_NexusIcon",
          "to": "method:lwiyp5:render-razor-markup__action_62_ui_binding_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lwiyp5:render-razor-markup__action_62_ui_binding_62__linear__implicit_return",
          "from": "method:lwiyp5:render-razor-markup__action_62_ui_binding_62__linear",
          "to": "method:lwiyp5:render-razor-markup__implicit_return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:lwiyp5:render-razor-markup__call_46_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:lwiyp5:render-razor-markup__call_46_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:lwiyp5:render-razor-markup__call_56_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:lwiyp5:render-razor-markup__call_56_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:lwiyp5:render-razor-markup__action_6_render_razor_markup_branch_6_0__merge",
        "method:lwiyp5:render-razor-markup__action_6_branch_6__merge",
        "method:lwiyp5:render-razor-markup__action_29_guard_clause_29__merge",
        "method:lwiyp5:render-razor-markup__action_29_render_razor_markup_branch_29_1__merge",
        "method:lwiyp5:render-razor-markup__action_35_render_razor_markup_fallback_35_2__merge",
        "method:lwiyp5:render-razor-markup__action_52_render_razor_markup_fallback_52_3__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 5,
        "end": 67
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 5,
          "summary": "Control-flow fragment extracted for method Render (Razor markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:yy00ql:handlecontinuereading__fragment",
      "ownerFileId": "file:1uvdam9:currentreadingwidget-razor",
      "ownerSymbolId": "method:yy00ql:handlecontinuereading",
      "ownerSymbolName": "HandleContinueReading",
      "entryNodeId": "method:yy00ql:handlecontinuereading__entry",
      "exitNodeIds": [
        "method:yy00ql:handlecontinuereading__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:yy00ql:handlecontinuereading__entry",
          "kind": "entry",
          "label": "HandleContinueReading entry",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.99,
          "detail": "Handles the Continue Reading button click by navigating to the reader route for the current book and chapter."
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition",
          "kind": "condition",
          "label": "Book != null",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "if (Book != null) { ... }"
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__true",
          "kind": "branch-true",
          "label": "continue (navigate)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition",
          "kind": "condition",
          "label": "Book != null",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78,
          "detail": "if (Book != null)"
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_76_external_call_76__linear",
          "kind": "http-call",
          "label": "Navigate to reader route",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo($\"/reader/{Book.Id}?chapter={Book.LastChapterIndex}\") (framework call)"
        },
        {
          "id": "method:yy00ql:handlecontinuereading__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:yy00ql:handlecontinuereading__entry__method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition",
          "from": "method:yy00ql:handlecontinuereading__entry",
          "to": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition__method:yy00ql:handlecontinuereading__action_74_guard_clause_74__true",
          "from": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition",
          "to": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__true",
          "kind": "condition-true",
          "label": "continue (navigate)",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition__method:yy00ql:handlecontinuereading__action_74_guard_clause_74__false",
          "from": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__condition",
          "to": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__true__method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "from": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__true",
          "to": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__false__method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "from": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__false",
          "to": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge__method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition",
          "from": "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
          "to": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition__method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__true",
          "from": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition",
          "to": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition__method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__false",
          "from": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__condition",
          "to": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__true__method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "from": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__true",
          "to": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__false__method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "from": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__false",
          "to": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.78
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge__method:yy00ql:handlecontinuereading__action_76_external_call_76__linear",
          "from": "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge",
          "to": "method:yy00ql:handlecontinuereading__action_76_external_call_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:yy00ql:handlecontinuereading__action_76_external_call_76__linear__implicit_return",
          "from": "method:yy00ql:handlecontinuereading__action_76_external_call_76__linear",
          "to": "method:yy00ql:handlecontinuereading__implicit_return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:yy00ql:handlecontinuereading__action_74_guard_clause_74__merge",
        "method:yy00ql:handlecontinuereading__action_74_handlecontinuereading_branch_74_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 72,
        "end": 78
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 72,
          "summary": "Control-flow fragment extracted for method HandleContinueReading.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:b9ya71:navigatetolibrary-inline-lambda__fragment",
      "ownerFileId": "file:1uvdam9:currentreadingwidget-razor",
      "ownerSymbolId": "method:b9ya71:navigatetolibrary-inline-lambda",
      "ownerSymbolName": "NavigateToLibrary (inline lambda)",
      "entryNodeId": "method:b9ya71:navigatetolibrary-inline-lambda__entry",
      "exitNodeIds": [
        "method:b9ya71:navigatetolibrary-inline-lambda__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:b9ya71:navigatetolibrary-inline-lambda__entry",
          "kind": "entry",
          "label": "NavigateToLibrary (inline lambda) entry",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.99,
          "detail": "Inline click handler that navigates to the /library route."
        },
        {
          "id": "method:b9ya71:navigatetolibrary-inline-lambda__action_62_external_call_62__linear",
          "kind": "http-call",
          "label": "Navigate to /library",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/library\") (framework call in inline lambda)"
        },
        {
          "id": "method:b9ya71:navigatetolibrary-inline-lambda__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:b9ya71:navigatetolibrary-inline-lambda__entry__method:b9ya71:navigatetolibrary-inline-lambda__action_62_external_call_62__linear",
          "from": "method:b9ya71:navigatetolibrary-inline-lambda__entry",
          "to": "method:b9ya71:navigatetolibrary-inline-lambda__action_62_external_call_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:b9ya71:navigatetolibrary-inline-lambda__action_62_external_call_62__linear__implicit_return",
          "from": "method:b9ya71:navigatetolibrary-inline-lambda__action_62_external_call_62__linear",
          "to": "method:b9ya71:navigatetolibrary-inline-lambda__implicit_return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 62,
        "end": 64
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 62,
          "summary": "Control-flow fragment extracted for method NavigateToLibrary (inline lambda).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lzfzn4:book-component-parameter__fragment",
      "ownerFileId": "file:1uvdam9:currentreadingwidget-razor",
      "ownerSymbolId": "method:1lzfzn4:book-component-parameter",
      "ownerSymbolName": "Book (component parameter)",
      "entryNodeId": "method:1lzfzn4:book-component-parameter__entry",
      "exitNodeIds": [
        "method:1lzfzn4:book-component-parameter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lzfzn4:book-component-parameter__entry",
          "kind": "entry",
          "label": "Book (component parameter) entry",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.99,
          "detail": "Component parameter that provides the last-read book details used to populate the UI."
        },
        {
          "id": "method:1lzfzn4:book-component-parameter__action_70_data_binding_70__linear",
          "kind": "statement",
          "label": "Provides data for rendering",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7,
          "detail": "Used throughout markup for cover, title, author, progress, chapter, and description"
        },
        {
          "id": "method:1lzfzn4:book-component-parameter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lzfzn4:book-component-parameter__entry__method:1lzfzn4:book-component-parameter__action_70_data_binding_70__linear",
          "from": "method:1lzfzn4:book-component-parameter__entry",
          "to": "method:1lzfzn4:book-component-parameter__action_70_data_binding_70__linear",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1lzfzn4:book-component-parameter__action_70_data_binding_70__linear__implicit_return",
          "from": "method:1lzfzn4:book-component-parameter__action_70_data_binding_70__linear",
          "to": "method:1lzfzn4:book-component-parameter__implicit_return",
          "kind": "return",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 70,
        "end": 70
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor",
          "line": 70,
          "summary": "Control-flow fragment extracted for method Book (component parameter).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cylg7j:render-component-markup__fragment",
      "ownerFileId": "file:1niza9w:globalintelligencepanel-razor",
      "ownerSymbolId": "method:cylg7j:render-component-markup",
      "ownerSymbolName": "Render (component markup)",
      "entryNodeId": "method:cylg7j:render-component-markup__entry",
      "exitNodeIds": [
        "method:cylg7j:render-component-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cylg7j:render-component-markup__entry",
          "kind": "entry",
          "label": "Render (component markup) entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.99,
          "detail": "Renders the Global Intelligence panel and conditionally displays loading, search results (with a loop), or an empty state."
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__condition",
          "kind": "condition",
          "label": "IsLoading ? show loading : (Results != null && Results.Any()) ? show results : HasSearched ? show empty",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Conditional rendering at lines 14-46 chooses which UI block to render."
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__true",
          "kind": "branch-true",
          "label": "loading",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__false",
          "kind": "branch-false",
          "label": "results",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition",
          "kind": "condition",
          "label": "IsLoading",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78,
          "detail": "@if (IsLoading)"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84,
          "detail": "else if (Results != null && Results.Any())"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition",
          "kind": "condition",
          "label": "Results != null && Results.Any()",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78,
          "detail": "else if (Results != null && Results.Any())"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "kind": "loop-entry",
          "label": "var result in Results",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86,
          "detail": "@foreach (var result in Results)"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body",
          "kind": "loop-body",
          "label": "@foreach (var result in Results)",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "kind": "loop-entry",
          "label": "foreach over Results when non-empty",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Iterates Results to render each search result (lines 23-37)."
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_body",
          "kind": "loop-body",
          "label": "Iterates Results to render each search result (lines 23-37).",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_27_mapping_27__linear",
          "kind": "statement",
          "label": "Show relevance percentage",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Displays Math.Round(result.RelevanceScore * 100) to present relevance as a percentage."
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(result.SourceBookTitle)",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Only renders source book title when present (lines 28-31)."
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__true",
          "kind": "branch-true",
          "label": "render source",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__false",
          "kind": "branch-false",
          "label": "skip source",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(result.SourceBookTitle)",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78,
          "detail": "@if (!string.IsNullOrEmpty(result.SourceBookTitle))"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84,
          "detail": "else if (HasSearched)"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition",
          "kind": "condition",
          "label": "HasSearched",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78,
          "detail": "else if (HasSearched)"
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cylg7j:render-component-markup__entry__method:cylg7j:render-component-markup__action_14_branch_14__condition",
          "from": "method:cylg7j:render-component-markup__entry",
          "to": "method:cylg7j:render-component-markup__action_14_branch_14__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__condition__method:cylg7j:render-component-markup__action_14_branch_14__true",
          "from": "method:cylg7j:render-component-markup__action_14_branch_14__condition",
          "to": "method:cylg7j:render-component-markup__action_14_branch_14__true",
          "kind": "condition-true",
          "label": "loading",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__condition__method:cylg7j:render-component-markup__action_14_branch_14__false",
          "from": "method:cylg7j:render-component-markup__action_14_branch_14__condition",
          "to": "method:cylg7j:render-component-markup__action_14_branch_14__false",
          "kind": "condition-false",
          "label": "results",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__true__method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "from": "method:cylg7j:render-component-markup__action_14_branch_14__true",
          "to": "method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__false__method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "from": "method:cylg7j:render-component-markup__action_14_branch_14__false",
          "to": "method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_branch_14__merge__method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition",
          "from": "method:cylg7j:render-component-markup__action_14_branch_14__merge",
          "to": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition__method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__true",
          "from": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition",
          "to": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition__method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__false",
          "from": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__condition",
          "to": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__true__method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "from": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__true",
          "to": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__false__method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "from": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__false",
          "to": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge__method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition",
          "from": "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition",
          "kind": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition__method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__true",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition__method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__false",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__condition",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__true__method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__true",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__false__method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__false",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge__method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition__method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__true",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition__method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__false",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__condition",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__true__method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__true",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__false__method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__false",
          "to": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge__method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "from": "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
          "to": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry__method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body",
          "from": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "to": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body",
          "kind": "loop-body",
          "label": "var result in Results",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body__method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "from": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body",
          "to": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry__method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_exit",
          "from": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
          "to": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.86
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_exit__method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "from": "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_exit",
          "to": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry__method:cylg7j:render-component-markup__action_23_loop_23__loop_body",
          "from": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "to": "method:cylg7j:render-component-markup__action_23_loop_23__loop_body",
          "kind": "loop-body",
          "label": "foreach over Results when non-empty",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_body__method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "from": "method:cylg7j:render-component-markup__action_23_loop_23__loop_body",
          "to": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry__method:cylg7j:render-component-markup__action_23_loop_23__loop_exit",
          "from": "method:cylg7j:render-component-markup__action_23_loop_23__loop_entry",
          "to": "method:cylg7j:render-component-markup__action_23_loop_23__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_23_loop_23__loop_exit__method:cylg7j:render-component-markup__action_27_mapping_27__linear",
          "from": "method:cylg7j:render-component-markup__action_23_loop_23__loop_exit",
          "to": "method:cylg7j:render-component-markup__action_27_mapping_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_27_mapping_27__linear__method:cylg7j:render-component-markup__action_28_guard_clause_28__condition",
          "from": "method:cylg7j:render-component-markup__action_27_mapping_27__linear",
          "to": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition__method:cylg7j:render-component-markup__action_28_guard_clause_28__true",
          "from": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition",
          "to": "method:cylg7j:render-component-markup__action_28_guard_clause_28__true",
          "kind": "condition-true",
          "label": "render source",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition__method:cylg7j:render-component-markup__action_28_guard_clause_28__false",
          "from": "method:cylg7j:render-component-markup__action_28_guard_clause_28__condition",
          "to": "method:cylg7j:render-component-markup__action_28_guard_clause_28__false",
          "kind": "condition-false",
          "label": "skip source",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__true__method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "from": "method:cylg7j:render-component-markup__action_28_guard_clause_28__true",
          "to": "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__false__method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "from": "method:cylg7j:render-component-markup__action_28_guard_clause_28__false",
          "to": "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge__method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition",
          "from": "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
          "to": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition__method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__true",
          "from": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition",
          "to": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition__method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__false",
          "from": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__condition",
          "to": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__true__method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "from": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__true",
          "to": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__false__method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "from": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__false",
          "to": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge__method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition",
          "from": "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition",
          "kind": "fallback",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition__method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__true",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition__method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__false",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__condition",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__true__method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__true",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__false__method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__false",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.84
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge__method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition__method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__true",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition__method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__false",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__condition",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__true__method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__true",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__false__method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__false",
          "to": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.78
        },
        {
          "id": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge__implicit_return",
          "from": "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge",
          "to": "method:cylg7j:render-component-markup__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_body__method:cylg7j:render-component-markup__action_23_render_component_markup_loop_23_3__loop_entry",
        "method:cylg7j:render-component-markup__action_23_loop_23__loop_body__method:cylg7j:render-component-markup__action_23_loop_23__loop_entry"
      ],
      "mergeNodeIds": [
        "method:cylg7j:render-component-markup__action_14_branch_14__merge",
        "method:cylg7j:render-component-markup__action_14_render_component_markup_branch_14_0__merge",
        "method:cylg7j:render-component-markup__action_21_render_component_markup_fallback_21_2__merge",
        "method:cylg7j:render-component-markup__action_21_render_component_markup_branch_21_1__merge",
        "method:cylg7j:render-component-markup__action_28_guard_clause_28__merge",
        "method:cylg7j:render-component-markup__action_28_render_component_markup_branch_28_4__merge",
        "method:cylg7j:render-component-markup__action_39_render_component_markup_fallback_39_6__merge",
        "method:cylg7j:render-component-markup__action_39_render_component_markup_branch_39_5__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 5,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 5,
          "summary": "Control-flow fragment extracted for method Render (component markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:h9z30t:handlesearch__fragment",
      "ownerFileId": "file:1niza9w:globalintelligencepanel-razor",
      "ownerSymbolId": "method:h9z30t:handlesearch",
      "ownerSymbolName": "HandleSearch",
      "entryNodeId": "method:h9z30t:handlesearch__entry",
      "exitNodeIds": [
        "method:h9z30t:handlesearch__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:h9z30t:handlesearch__entry",
          "kind": "entry",
          "label": "HandleSearch entry",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.99,
          "detail": "Invoked when the child search box triggers a search; marks that a search occurred and forwards the query via OnPerformSearch EventCallback."
        },
        {
          "id": "method:h9z30t:handlesearch__action_56_async_56__linear",
          "kind": "statement",
          "label": "Async forward",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Method is async and awaits the EventCallback invocation; no retries or error handling visible."
        },
        {
          "id": "method:h9z30t:handlesearch__action_58_state_change_58__linear",
          "kind": "statement",
          "label": "Set HasSearched",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Sets local flag HasSearched = true to enable empty-state rendering when no results are found."
        },
        {
          "id": "method:h9z30t:handlesearch__action_59_handlesearch_await_59_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.81,
          "detail": "await OnPerformSearch.InvokeAsync(query);"
        },
        {
          "id": "method:h9z30t:handlesearch__action_59_external_call_59__linear",
          "kind": "http-call",
          "label": "Forward search to parent/handler",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7,
          "detail": "Awaits EventCallback.InvokeAsync(query) to notify parent component or consumer of the search."
        },
        {
          "id": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync",
          "kind": "call",
          "label": "OnPerformSearch.InvokeAsync",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.88,
          "detail": "query string passed from child search box"
        },
        {
          "id": "method:h9z30t:handlesearch__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:h9z30t:handlesearch__entry__method:h9z30t:handlesearch__action_56_async_56__linear",
          "from": "method:h9z30t:handlesearch__entry",
          "to": "method:h9z30t:handlesearch__action_56_async_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:h9z30t:handlesearch__action_56_async_56__linear__method:h9z30t:handlesearch__action_58_state_change_58__linear",
          "from": "method:h9z30t:handlesearch__action_56_async_56__linear",
          "to": "method:h9z30t:handlesearch__action_58_state_change_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:h9z30t:handlesearch__action_58_state_change_58__linear__method:h9z30t:handlesearch__action_59_handlesearch_await_59_0__await",
          "from": "method:h9z30t:handlesearch__action_58_state_change_58__linear",
          "to": "method:h9z30t:handlesearch__action_59_handlesearch_await_59_0__await",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.81
        },
        {
          "id": "method:h9z30t:handlesearch__action_59_handlesearch_await_59_0__await__method:h9z30t:handlesearch__action_59_external_call_59__linear",
          "from": "method:h9z30t:handlesearch__action_59_handlesearch_await_59_0__await",
          "to": "method:h9z30t:handlesearch__action_59_external_call_59__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.7
        },
        {
          "id": "method:h9z30t:handlesearch__action_59_external_call_59__linear__call_method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync",
          "from": "method:h9z30t:handlesearch__action_59_external_call_59__linear",
          "to": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync",
          "kind": "call",
          "label": "query string passed from child search box",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.88
        },
        {
          "id": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync__implicit_return",
          "from": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync",
          "to": "method:h9z30t:handlesearch__implicit_return",
          "kind": "return",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync__jump_unknown_OnPerformSearch_InvokeAsync",
          "fromNodeId": "method:h9z30t:handlesearch__call_59_OnPerformSearch_InvokeAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnPerformSearch.InvokeAsync",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "reason": "Call target OnPerformSearch.InvokeAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8299999999999998,
      "lineSpan": {
        "start": 56,
        "end": 60
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor",
          "line": 56,
          "summary": "Control-flow fragment extracted for method HandleSearch.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ari3ha:oninitialized__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1ari3ha:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:1ari3ha:oninitialized__entry",
      "exitNodeIds": [
        "method:1ari3ha:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ari3ha:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Subscribe component handlers to FocusMode and GraphService events during component initialization."
        },
        {
          "id": "method:1ari3ha:oninitialized__action_43_event_subscribe_43__linear",
          "kind": "statement",
          "label": "Subscribe FocusMode change",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged += HandleFocusSimulation"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged",
          "kind": "call",
          "label": "OnFocusModeChanged",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "subscribe HandleFocusSimulation"
        },
        {
          "id": "method:1ari3ha:oninitialized__action_44_event_subscribe_44__linear",
          "kind": "statement",
          "label": "Subscribe graph updates",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "GraphService.OnGraphUpdated += HandleGraphUpdate"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated",
          "kind": "call",
          "label": "OnGraphUpdated",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "subscribe HandleGraphUpdate"
        },
        {
          "id": "method:1ari3ha:oninitialized__action_45_event_subscribe_45__linear",
          "kind": "statement",
          "label": "Subscribe active node",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "GraphService.OnActiveNodeChanged += HandleActiveNodeChange"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged",
          "kind": "call",
          "label": "OnActiveNodeChanged",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "subscribe HandleActiveNodeChange"
        },
        {
          "id": "method:1ari3ha:oninitialized__action_46_event_subscribe_46__linear",
          "kind": "statement",
          "label": "Subscribe loading state",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "GraphService.OnLoadingChanged += HandleLoadingChange"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged",
          "kind": "call",
          "label": "OnLoadingChanged",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "subscribe HandleLoadingChange"
        },
        {
          "id": "method:1ari3ha:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ari3ha:oninitialized__entry__method:1ari3ha:oninitialized__action_43_event_subscribe_43__linear",
          "from": "method:1ari3ha:oninitialized__entry",
          "to": "method:1ari3ha:oninitialized__action_43_event_subscribe_43__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ari3ha:oninitialized__action_43_event_subscribe_43__linear__call_method:1ari3ha:oninitialized__call_43_OnFocusModeChanged",
          "from": "method:1ari3ha:oninitialized__action_43_event_subscribe_43__linear",
          "to": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged",
          "kind": "call",
          "label": "subscribe HandleFocusSimulation",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged__method:1ari3ha:oninitialized__action_44_event_subscribe_44__linear",
          "from": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged",
          "to": "method:1ari3ha:oninitialized__action_44_event_subscribe_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ari3ha:oninitialized__action_44_event_subscribe_44__linear__call_method:1ari3ha:oninitialized__call_44_OnGraphUpdated",
          "from": "method:1ari3ha:oninitialized__action_44_event_subscribe_44__linear",
          "to": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated",
          "kind": "call",
          "label": "subscribe HandleGraphUpdate",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated__method:1ari3ha:oninitialized__action_45_event_subscribe_45__linear",
          "from": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated",
          "to": "method:1ari3ha:oninitialized__action_45_event_subscribe_45__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ari3ha:oninitialized__action_45_event_subscribe_45__linear__call_method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged",
          "from": "method:1ari3ha:oninitialized__action_45_event_subscribe_45__linear",
          "to": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged",
          "kind": "call",
          "label": "subscribe HandleActiveNodeChange",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged__method:1ari3ha:oninitialized__action_46_event_subscribe_46__linear",
          "from": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged",
          "to": "method:1ari3ha:oninitialized__action_46_event_subscribe_46__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ari3ha:oninitialized__action_46_event_subscribe_46__linear__call_method:1ari3ha:oninitialized__call_46_OnLoadingChanged",
          "from": "method:1ari3ha:oninitialized__action_46_event_subscribe_46__linear",
          "to": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged",
          "kind": "call",
          "label": "subscribe HandleLoadingChange",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged__implicit_return",
          "from": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged",
          "to": "method:1ari3ha:oninitialized__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged__jump_NexusReader_UI_Shared_Services_IFocusModeService_OnFocusModeChanged",
          "fromNodeId": "method:1ari3ha:oninitialized__call_43_OnFocusModeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
          "targetHint": "OnFocusModeChanged",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnFocusModeChanged in NexusReader.UI.Shared/Services/IFocusModeService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnGraphUpdated",
          "fromNodeId": "method:1ari3ha:oninitialized__call_44_OnGraphUpdated",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnGraphUpdated",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnGraphUpdated in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnActiveNodeChanged",
          "fromNodeId": "method:1ari3ha:oninitialized__call_45_OnActiveNodeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnActiveNodeChanged",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnActiveNodeChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnLoadingChanged",
          "fromNodeId": "method:1ari3ha:oninitialized__call_46_OnLoadingChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnLoadingChanged",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnLoadingChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.77,
      "lineSpan": {
        "start": 41,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 41,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:14hlcms:handlegraphupdate__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:14hlcms:handlegraphupdate",
      "ownerSymbolName": "HandleGraphUpdate",
      "entryNodeId": "method:14hlcms:handlegraphupdate__entry",
      "exitNodeIds": [
        "method:14hlcms:handlegraphupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:14hlcms:handlegraphupdate__entry",
          "kind": "entry",
          "label": "HandleGraphUpdate entry",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Respond to graph data changes by instructing the JS graph module to clear or update and force a UI re-render."
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__true",
          "kind": "branch-true",
          "label": "return",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition",
          "kind": "condition",
          "label": "GraphService.CurrentGraphData == null",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (GraphService.CurrentGraphData == null)"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition",
          "kind": "condition",
          "label": "GraphService.CurrentGraphData == null",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "if null -> clear() else -> updateData(...)"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__true",
          "kind": "branch-true",
          "label": "clear",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__false",
          "kind": "branch-false",
          "label": "update",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData",
          "kind": "call",
          "label": "CurrentGraphData",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "read current graph DTO"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_55_handlegraphupdate_await_55_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"clear\");"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_55_clear",
          "kind": "call",
          "label": "clear",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_59_handlegraphupdate_await_59_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"updateData\", GraphService.CurrentGraphData);"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_59_updateData",
          "kind": "call",
          "label": "updateData",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "GraphService.CurrentGraphData"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_62_handlegraphupdate_await_62_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_62_ui_refresh_62__linear",
          "kind": "statement",
          "label": "Trigger StateHasChanged",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "await InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:14hlcms:handlegraphupdate__entry__method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition",
          "from": "method:14hlcms:handlegraphupdate__entry",
          "to": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition__method:14hlcms:handlegraphupdate__action_51_guard_clause_51__true",
          "from": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition",
          "to": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__true",
          "kind": "condition-true",
          "label": "return",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition__method:14hlcms:handlegraphupdate__action_51_guard_clause_51__false",
          "from": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__condition",
          "to": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__true__method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "from": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__true",
          "to": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__false__method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "from": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__false",
          "to": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge__method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition",
          "from": "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
          "to": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition__method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true",
          "from": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition",
          "to": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition__method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false",
          "from": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__condition",
          "to": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true__method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "from": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__true",
          "to": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false__method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "from": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__false",
          "to": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge__method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition",
          "from": "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
          "to": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition__method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true",
          "from": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition",
          "to": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition__method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false",
          "from": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__condition",
          "to": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true__method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "from": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__true",
          "to": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false__method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "from": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__false",
          "to": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge__method:14hlcms:handlegraphupdate__action_53_branch_53__condition",
          "from": "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
          "to": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition__method:14hlcms:handlegraphupdate__action_53_branch_53__true",
          "from": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition",
          "to": "method:14hlcms:handlegraphupdate__action_53_branch_53__true",
          "kind": "condition-true",
          "label": "clear",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition__method:14hlcms:handlegraphupdate__action_53_branch_53__false",
          "from": "method:14hlcms:handlegraphupdate__action_53_branch_53__condition",
          "to": "method:14hlcms:handlegraphupdate__action_53_branch_53__false",
          "kind": "condition-false",
          "label": "update",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__true__method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "from": "method:14hlcms:handlegraphupdate__action_53_branch_53__true",
          "to": "method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__false__method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "from": "method:14hlcms:handlegraphupdate__action_53_branch_53__false",
          "to": "method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_53_branch_53__merge__call_method:14hlcms:handlegraphupdate__call_53_CurrentGraphData",
          "from": "method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
          "to": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData",
          "kind": "call",
          "label": "read current graph DTO",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData__method:14hlcms:handlegraphupdate__action_55_handlegraphupdate_await_55_2__await",
          "from": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData",
          "to": "method:14hlcms:handlegraphupdate__action_55_handlegraphupdate_await_55_2__await",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_55_handlegraphupdate_await_55_2__await__call_method:14hlcms:handlegraphupdate__call_55_clear",
          "from": "method:14hlcms:handlegraphupdate__action_55_handlegraphupdate_await_55_2__await",
          "to": "method:14hlcms:handlegraphupdate__call_55_clear",
          "kind": "call",
          "label": "no args",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_55_clear__method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition",
          "from": "method:14hlcms:handlegraphupdate__call_55_clear",
          "to": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition",
          "kind": "fallback",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition__method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true",
          "from": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition",
          "to": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition__method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false",
          "from": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__condition",
          "to": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true__method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "from": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__true",
          "to": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false__method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "from": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__false",
          "to": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "kind": "next",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge__method:14hlcms:handlegraphupdate__action_59_handlegraphupdate_await_59_4__await",
          "from": "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge",
          "to": "method:14hlcms:handlegraphupdate__action_59_handlegraphupdate_await_59_4__await",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_59_handlegraphupdate_await_59_4__await__call_method:14hlcms:handlegraphupdate__call_59_updateData",
          "from": "method:14hlcms:handlegraphupdate__action_59_handlegraphupdate_await_59_4__await",
          "to": "method:14hlcms:handlegraphupdate__call_59_updateData",
          "kind": "call",
          "label": "GraphService.CurrentGraphData",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_59_updateData__method:14hlcms:handlegraphupdate__action_62_handlegraphupdate_await_62_5__await",
          "from": "method:14hlcms:handlegraphupdate__call_59_updateData",
          "to": "method:14hlcms:handlegraphupdate__action_62_handlegraphupdate_await_62_5__await",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_62_handlegraphupdate_await_62_5__await__method:14hlcms:handlegraphupdate__action_62_ui_refresh_62__linear",
          "from": "method:14hlcms:handlegraphupdate__action_62_handlegraphupdate_await_62_5__await",
          "to": "method:14hlcms:handlegraphupdate__action_62_ui_refresh_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:14hlcms:handlegraphupdate__action_62_ui_refresh_62__linear__implicit_return",
          "from": "method:14hlcms:handlegraphupdate__action_62_ui_refresh_62__linear",
          "to": "method:14hlcms:handlegraphupdate__implicit_return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_CurrentGraphData",
          "fromNodeId": "method:14hlcms:handlegraphupdate__call_53_CurrentGraphData",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "CurrentGraphData",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_55_clear__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_clear",
          "fromNodeId": "method:14hlcms:handlegraphupdate__call_55_clear",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "clear",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target clear in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:14hlcms:handlegraphupdate__call_59_updateData__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_updateData",
          "fromNodeId": "method:14hlcms:handlegraphupdate__call_59_updateData",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "updateData",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target updateData in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:14hlcms:handlegraphupdate__action_51_guard_clause_51__merge",
        "method:14hlcms:handlegraphupdate__action_51_handlegraphupdate_guard_clause_51_0__merge",
        "method:14hlcms:handlegraphupdate__action_53_handlegraphupdate_branch_53_1__merge",
        "method:14hlcms:handlegraphupdate__action_53_branch_53__merge",
        "method:14hlcms:handlegraphupdate__action_57_handlegraphupdate_fallback_57_3__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 49,
        "end": 63
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 49,
          "summary": "Control-flow fragment extracted for method HandleGraphUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16kjevr:handleactivenodechange__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:16kjevr:handleactivenodechange",
      "ownerSymbolName": "HandleActiveNodeChange",
      "entryNodeId": "method:16kjevr:handleactivenodechange__entry",
      "exitNodeIds": [
        "method:16kjevr:handleactivenodechange__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16kjevr:handleactivenodechange__entry",
          "kind": "entry",
          "label": "HandleActiveNodeChange entry",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Tell the JS graph module to highlight/set the active node when the active node changes in the graph service."
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__true",
          "kind": "branch-true",
          "label": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "kind": "statement",
          "label": "merge",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_68_handleactivenodechange_await_68_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"setActiveNode\", nodeId);"
        },
        {
          "id": "method:16kjevr:handleactivenodechange__call_68_setActiveNode",
          "kind": "call",
          "label": "setActiveNode",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "nodeId"
        },
        {
          "id": "method:16kjevr:handleactivenodechange__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16kjevr:handleactivenodechange__entry__method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition",
          "from": "method:16kjevr:handleactivenodechange__entry",
          "to": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition__method:16kjevr:handleactivenodechange__action_67_guard_clause_67__true",
          "from": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition",
          "to": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__true",
          "kind": "condition-true",
          "label": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition__method:16kjevr:handleactivenodechange__action_67_guard_clause_67__false",
          "from": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__condition",
          "to": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__true__method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "from": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__true",
          "to": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__false__method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "from": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__false",
          "to": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge__method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition",
          "from": "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
          "to": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition__method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true",
          "from": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition",
          "to": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition__method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false",
          "from": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__condition",
          "to": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true__method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "from": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__true",
          "to": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false__method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "from": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__false",
          "to": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge__method:16kjevr:handleactivenodechange__action_68_handleactivenodechange_await_68_1__await",
          "from": "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge",
          "to": "method:16kjevr:handleactivenodechange__action_68_handleactivenodechange_await_68_1__await",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:16kjevr:handleactivenodechange__action_68_handleactivenodechange_await_68_1__await__call_method:16kjevr:handleactivenodechange__call_68_setActiveNode",
          "from": "method:16kjevr:handleactivenodechange__action_68_handleactivenodechange_await_68_1__await",
          "to": "method:16kjevr:handleactivenodechange__call_68_setActiveNode",
          "kind": "call",
          "label": "nodeId",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:16kjevr:handleactivenodechange__call_68_setActiveNode__implicit_return",
          "from": "method:16kjevr:handleactivenodechange__call_68_setActiveNode",
          "to": "method:16kjevr:handleactivenodechange__implicit_return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:16kjevr:handleactivenodechange__call_68_setActiveNode__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_setActiveNode",
          "fromNodeId": "method:16kjevr:handleactivenodechange__call_68_setActiveNode",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "setActiveNode",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target setActiveNode in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:16kjevr:handleactivenodechange__action_67_guard_clause_67__merge",
        "method:16kjevr:handleactivenodechange__action_67_handleactivenodechange_guard_clause_67_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.9799999999999998,
      "lineSpan": {
        "start": 65,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 65,
          "summary": "Control-flow fragment extracted for method HandleActiveNodeChange.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xjbcak:handleloadingchange__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1xjbcak:handleloadingchange",
      "ownerSymbolName": "HandleLoadingChange",
      "entryNodeId": "method:1xjbcak:handleloadingchange__entry",
      "exitNodeIds": [
        "method:1xjbcak:handleloadingchange__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1xjbcak:handleloadingchange__entry",
          "kind": "entry",
          "label": "HandleLoadingChange entry",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Trigger a UI re-render when the graph loading state changes."
        },
        {
          "id": "method:1xjbcak:handleloadingchange__action_73_handleloadingchange_await_73_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1xjbcak:handleloadingchange__action_73_ui_refresh_73__linear",
          "kind": "statement",
          "label": "Trigger StateHasChanged",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "await InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1xjbcak:handleloadingchange__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1xjbcak:handleloadingchange__entry__method:1xjbcak:handleloadingchange__action_73_handleloadingchange_await_73_0__await",
          "from": "method:1xjbcak:handleloadingchange__entry",
          "to": "method:1xjbcak:handleloadingchange__action_73_handleloadingchange_await_73_0__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1xjbcak:handleloadingchange__action_73_handleloadingchange_await_73_0__await__method:1xjbcak:handleloadingchange__action_73_ui_refresh_73__linear",
          "from": "method:1xjbcak:handleloadingchange__action_73_handleloadingchange_await_73_0__await",
          "to": "method:1xjbcak:handleloadingchange__action_73_ui_refresh_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1xjbcak:handleloadingchange__action_73_ui_refresh_73__linear__implicit_return",
          "from": "method:1xjbcak:handleloadingchange__action_73_ui_refresh_73__linear",
          "to": "method:1xjbcak:handleloadingchange__implicit_return",
          "kind": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 71,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 71,
          "summary": "Control-flow fragment extracted for method HandleLoadingChange.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1cayj92:onafterrenderasync__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1cayj92:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:1cayj92:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:1cayj92:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1cayj92:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "On first render, initialize the JS graph module and, if data already exists, perform an initial graph update."
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition",
          "kind": "condition",
          "label": "firstRender == true",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "if (firstRender) { ... }"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__true",
          "kind": "branch-true",
          "label": "init",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "kind": "statement",
          "label": "merge",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_80_onafterrenderasync_await_80_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await InitializeGraphAsync();"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync",
          "kind": "call",
          "label": "InitializeGraphAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition",
          "kind": "condition",
          "label": "GraphService.CurrentGraphData != null",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (GraphService.CurrentGraphData != null)"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData",
          "kind": "call",
          "label": "CurrentGraphData",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "read current graph DTO"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_84_onafterrenderasync_await_84_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await HandleGraphUpdate();"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate",
          "kind": "call",
          "label": "HandleGraphUpdate",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1cayj92:onafterrenderasync__entry__method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition",
          "from": "method:1cayj92:onafterrenderasync__entry",
          "to": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition__method:1cayj92:onafterrenderasync__action_78_guard_clause_78__true",
          "from": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition",
          "to": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__true",
          "kind": "condition-true",
          "label": "init",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition__method:1cayj92:onafterrenderasync__action_78_guard_clause_78__false",
          "from": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__condition",
          "to": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__true__method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "from": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__true",
          "to": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__false__method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "from": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__false",
          "to": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge__method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition",
          "from": "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
          "to": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition__method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true",
          "from": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition",
          "to": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition__method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false",
          "from": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__condition",
          "to": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true__method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "from": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__true",
          "to": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false__method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "from": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__false",
          "to": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge__method:1cayj92:onafterrenderasync__action_80_onafterrenderasync_await_80_1__await",
          "from": "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
          "to": "method:1cayj92:onafterrenderasync__action_80_onafterrenderasync_await_80_1__await",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_80_onafterrenderasync_await_80_1__await__call_method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync",
          "from": "method:1cayj92:onafterrenderasync__action_80_onafterrenderasync_await_80_1__await",
          "to": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync",
          "kind": "call",
          "label": "no args",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync__method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition",
          "from": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync",
          "to": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition__method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true",
          "from": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition",
          "to": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition__method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false",
          "from": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__condition",
          "to": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true__method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "from": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__true",
          "to": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false__method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "from": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__false",
          "to": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge__call_method:1cayj92:onafterrenderasync__call_82_CurrentGraphData",
          "from": "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge",
          "to": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData",
          "kind": "call",
          "label": "read current graph DTO",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData__method:1cayj92:onafterrenderasync__action_84_onafterrenderasync_await_84_3__await",
          "from": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData",
          "to": "method:1cayj92:onafterrenderasync__action_84_onafterrenderasync_await_84_3__await",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1cayj92:onafterrenderasync__action_84_onafterrenderasync_await_84_3__await__call_method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate",
          "from": "method:1cayj92:onafterrenderasync__action_84_onafterrenderasync_await_84_3__await",
          "to": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate",
          "kind": "call",
          "label": "no args",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate__implicit_return",
          "from": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate",
          "to": "method:1cayj92:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync__jump_NexusReader_UI_Shared_Components_Organisms_KnowledgeGraph_razor_InitializeGraphAsync",
          "fromNodeId": "method:1cayj92:onafterrenderasync__call_80_InitializeGraphAsync",
          "kind": "call-target",
          "targetNodeId": "method:1to2smv:initializegraphasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "targetHint": "InitializeGraphAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target InitializeGraphAsync resolved to NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor.",
          "status": "resolved"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_CurrentGraphData",
          "fromNodeId": "method:1cayj92:onafterrenderasync__call_82_CurrentGraphData",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "CurrentGraphData",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate__jump_NexusReader_UI_Shared_Components_Organisms_KnowledgeGraph_razor_HandleGraphUpdate",
          "fromNodeId": "method:1cayj92:onafterrenderasync__call_84_HandleGraphUpdate",
          "kind": "call-target",
          "targetNodeId": "method:14hlcms:handlegraphupdate",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "targetHint": "HandleGraphUpdate",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target HandleGraphUpdate resolved to NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1cayj92:onafterrenderasync__action_78_guard_clause_78__merge",
        "method:1cayj92:onafterrenderasync__action_78_onafterrenderasync_branch_78_0__merge",
        "method:1cayj92:onafterrenderasync__action_82_onafterrenderasync_branch_82_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 76,
        "end": 87
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 76,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1to2smv:initializegraphasync__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1to2smv:initializegraphasync",
      "ownerSymbolName": "InitializeGraphAsync",
      "entryNodeId": "method:1to2smv:initializegraphasync__entry",
      "exitNodeIds": [
        "method:1to2smv:initializegraphasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1to2smv:initializegraphasync__entry",
          "kind": "entry",
          "label": "InitializeGraphAsync entry",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Import the client JS module, create a DotNet helper reference and mount the graph with initial data."
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_91_initializegraphasync_await_91_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "_module = await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/knowledgeGraph.js\");"
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_91_external_load_91__linear",
          "kind": "statement",
          "label": "Import JS module",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/knowledgeGraph.js\")"
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_92_interop_setup_92__linear",
          "kind": "statement",
          "label": "Create DotNetObjectReference",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "DotNetObjectReference.Create(this)"
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_93_initializegraphasync_await_93_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"mount\", ContainerId, GraphService.CurrentGraphData, _dotNetHelper);"
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_93_interop_call_93__linear",
          "kind": "statement",
          "label": "Mount graph",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module.InvokeVoidAsync(\"mount\", ContainerId, GraphService.CurrentGraphData, _dotNetHelper)"
        },
        {
          "id": "method:1to2smv:initializegraphasync__call_93_mount",
          "kind": "call",
          "label": "mount",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "ContainerId, GraphService.CurrentGraphData, dotNet helper"
        },
        {
          "id": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData",
          "kind": "call",
          "label": "CurrentGraphData",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "pass current graph DTO into mount"
        },
        {
          "id": "method:1to2smv:initializegraphasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1to2smv:initializegraphasync__entry__method:1to2smv:initializegraphasync__action_91_initializegraphasync_await_91_0__await",
          "from": "method:1to2smv:initializegraphasync__entry",
          "to": "method:1to2smv:initializegraphasync__action_91_initializegraphasync_await_91_0__await",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_91_initializegraphasync_await_91_0__await__method:1to2smv:initializegraphasync__action_91_external_load_91__linear",
          "from": "method:1to2smv:initializegraphasync__action_91_initializegraphasync_await_91_0__await",
          "to": "method:1to2smv:initializegraphasync__action_91_external_load_91__linear",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_91_external_load_91__linear__method:1to2smv:initializegraphasync__action_92_interop_setup_92__linear",
          "from": "method:1to2smv:initializegraphasync__action_91_external_load_91__linear",
          "to": "method:1to2smv:initializegraphasync__action_92_interop_setup_92__linear",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_92_interop_setup_92__linear__method:1to2smv:initializegraphasync__action_93_initializegraphasync_await_93_1__await",
          "from": "method:1to2smv:initializegraphasync__action_92_interop_setup_92__linear",
          "to": "method:1to2smv:initializegraphasync__action_93_initializegraphasync_await_93_1__await",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_93_initializegraphasync_await_93_1__await__method:1to2smv:initializegraphasync__action_93_interop_call_93__linear",
          "from": "method:1to2smv:initializegraphasync__action_93_initializegraphasync_await_93_1__await",
          "to": "method:1to2smv:initializegraphasync__action_93_interop_call_93__linear",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1to2smv:initializegraphasync__action_93_interop_call_93__linear__call_method:1to2smv:initializegraphasync__call_93_mount",
          "from": "method:1to2smv:initializegraphasync__action_93_interop_call_93__linear",
          "to": "method:1to2smv:initializegraphasync__call_93_mount",
          "kind": "call",
          "label": "ContainerId, GraphService.CurrentGraphData, dotNet helper",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1to2smv:initializegraphasync__call_93_mount__call_method:1to2smv:initializegraphasync__call_93_CurrentGraphData",
          "from": "method:1to2smv:initializegraphasync__call_93_mount",
          "to": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData",
          "kind": "call",
          "label": "pass current graph DTO into mount",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData__implicit_return",
          "from": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData",
          "to": "method:1to2smv:initializegraphasync__implicit_return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1to2smv:initializegraphasync__call_93_mount__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_mount",
          "fromNodeId": "method:1to2smv:initializegraphasync__call_93_mount",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "mount",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target mount in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_CurrentGraphData",
          "fromNodeId": "method:1to2smv:initializegraphasync__call_93_CurrentGraphData",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "CurrentGraphData",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target CurrentGraphData in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.84,
      "lineSpan": {
        "start": 89,
        "end": 94
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 89,
          "summary": "Control-flow fragment extracted for method InitializeGraphAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1muyu85:zoomin__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1muyu85:zoomin",
      "ownerSymbolName": "ZoomIn",
      "entryNodeId": "method:1muyu85:zoomin__entry",
      "exitNodeIds": [
        "method:1muyu85:zoomin__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1muyu85:zoomin__entry",
          "kind": "entry",
          "label": "ZoomIn entry",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Request the JS graph module to zoom in."
        },
        {
          "id": "method:1muyu85:zoomin__action_96_interop_call_96__linear",
          "kind": "statement",
          "label": "zoomIn",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module?.InvokeVoidAsync(\"zoomIn\")"
        },
        {
          "id": "method:1muyu85:zoomin__action_96_zoomin_await_96_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "private async Task ZoomIn() => await (_module?.InvokeVoidAsync(\"zoomIn\") ?? ValueTask.CompletedTask);"
        },
        {
          "id": "method:1muyu85:zoomin__call_96_zoomIn",
          "kind": "call",
          "label": "zoomIn",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1muyu85:zoomin__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1muyu85:zoomin__entry__method:1muyu85:zoomin__action_96_interop_call_96__linear",
          "from": "method:1muyu85:zoomin__entry",
          "to": "method:1muyu85:zoomin__action_96_interop_call_96__linear",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1muyu85:zoomin__action_96_interop_call_96__linear__method:1muyu85:zoomin__action_96_zoomin_await_96_0__await",
          "from": "method:1muyu85:zoomin__action_96_interop_call_96__linear",
          "to": "method:1muyu85:zoomin__action_96_zoomin_await_96_0__await",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1muyu85:zoomin__action_96_zoomin_await_96_0__await__call_method:1muyu85:zoomin__call_96_zoomIn",
          "from": "method:1muyu85:zoomin__action_96_zoomin_await_96_0__await",
          "to": "method:1muyu85:zoomin__call_96_zoomIn",
          "kind": "call",
          "label": "no args",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1muyu85:zoomin__call_96_zoomIn__implicit_return",
          "from": "method:1muyu85:zoomin__call_96_zoomIn",
          "to": "method:1muyu85:zoomin__implicit_return",
          "kind": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1muyu85:zoomin__call_96_zoomIn__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_zoomIn",
          "fromNodeId": "method:1muyu85:zoomin__call_96_zoomIn",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "zoomIn",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target zoomIn in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 96,
        "end": 96
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 96,
          "summary": "Control-flow fragment extracted for method ZoomIn.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1l8ubet:zoomout__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:1l8ubet:zoomout",
      "ownerSymbolName": "ZoomOut",
      "entryNodeId": "method:1l8ubet:zoomout__entry",
      "exitNodeIds": [
        "method:1l8ubet:zoomout__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1l8ubet:zoomout__entry",
          "kind": "entry",
          "label": "ZoomOut entry",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Request the JS graph module to zoom out."
        },
        {
          "id": "method:1l8ubet:zoomout__action_97_interop_call_97__linear",
          "kind": "statement",
          "label": "zoomOut",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module?.InvokeVoidAsync(\"zoomOut\")"
        },
        {
          "id": "method:1l8ubet:zoomout__action_97_zoomout_await_97_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "private async Task ZoomOut() => await (_module?.InvokeVoidAsync(\"zoomOut\") ?? ValueTask.CompletedTask);"
        },
        {
          "id": "method:1l8ubet:zoomout__call_97_zoomOut",
          "kind": "call",
          "label": "zoomOut",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:1l8ubet:zoomout__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1l8ubet:zoomout__entry__method:1l8ubet:zoomout__action_97_interop_call_97__linear",
          "from": "method:1l8ubet:zoomout__entry",
          "to": "method:1l8ubet:zoomout__action_97_interop_call_97__linear",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1l8ubet:zoomout__action_97_interop_call_97__linear__method:1l8ubet:zoomout__action_97_zoomout_await_97_0__await",
          "from": "method:1l8ubet:zoomout__action_97_interop_call_97__linear",
          "to": "method:1l8ubet:zoomout__action_97_zoomout_await_97_0__await",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1l8ubet:zoomout__action_97_zoomout_await_97_0__await__call_method:1l8ubet:zoomout__call_97_zoomOut",
          "from": "method:1l8ubet:zoomout__action_97_zoomout_await_97_0__await",
          "to": "method:1l8ubet:zoomout__call_97_zoomOut",
          "kind": "call",
          "label": "no args",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1l8ubet:zoomout__call_97_zoomOut__implicit_return",
          "from": "method:1l8ubet:zoomout__call_97_zoomOut",
          "to": "method:1l8ubet:zoomout__implicit_return",
          "kind": "return",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1l8ubet:zoomout__call_97_zoomOut__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_zoomOut",
          "fromNodeId": "method:1l8ubet:zoomout__call_97_zoomOut",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "zoomOut",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target zoomOut in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 97,
        "end": 97
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 97,
          "summary": "Control-flow fragment extracted for method ZoomOut.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:129w46l:zoomreset__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:129w46l:zoomreset",
      "ownerSymbolName": "ZoomReset",
      "entryNodeId": "method:129w46l:zoomreset__entry",
      "exitNodeIds": [
        "method:129w46l:zoomreset__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:129w46l:zoomreset__entry",
          "kind": "entry",
          "label": "ZoomReset entry",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Request the JS graph module to reset zoom/transform."
        },
        {
          "id": "method:129w46l:zoomreset__action_98_interop_call_98__linear",
          "kind": "statement",
          "label": "zoomReset",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module?.InvokeVoidAsync(\"zoomReset\")"
        },
        {
          "id": "method:129w46l:zoomreset__action_98_zoomreset_await_98_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "private async Task ZoomReset() => await (_module?.InvokeVoidAsync(\"zoomReset\") ?? ValueTask.CompletedTask);"
        },
        {
          "id": "method:129w46l:zoomreset__call_98_zoomReset",
          "kind": "call",
          "label": "zoomReset",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:129w46l:zoomreset__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:129w46l:zoomreset__entry__method:129w46l:zoomreset__action_98_interop_call_98__linear",
          "from": "method:129w46l:zoomreset__entry",
          "to": "method:129w46l:zoomreset__action_98_interop_call_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:129w46l:zoomreset__action_98_interop_call_98__linear__method:129w46l:zoomreset__action_98_zoomreset_await_98_0__await",
          "from": "method:129w46l:zoomreset__action_98_interop_call_98__linear",
          "to": "method:129w46l:zoomreset__action_98_zoomreset_await_98_0__await",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:129w46l:zoomreset__action_98_zoomreset_await_98_0__await__call_method:129w46l:zoomreset__call_98_zoomReset",
          "from": "method:129w46l:zoomreset__action_98_zoomreset_await_98_0__await",
          "to": "method:129w46l:zoomreset__call_98_zoomReset",
          "kind": "call",
          "label": "no args",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:129w46l:zoomreset__call_98_zoomReset__implicit_return",
          "from": "method:129w46l:zoomreset__call_98_zoomReset",
          "to": "method:129w46l:zoomreset__implicit_return",
          "kind": "return",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:129w46l:zoomreset__call_98_zoomReset__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_zoomReset",
          "fromNodeId": "method:129w46l:zoomreset__call_98_zoomReset",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "zoomReset",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target zoomReset in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 98,
        "end": 98
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 98,
          "summary": "Control-flow fragment extracted for method ZoomReset.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:66cucs:onnodeclicked__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:66cucs:onnodeclicked",
      "ownerSymbolName": "OnNodeClicked",
      "entryNodeId": "method:66cucs:onnodeclicked__entry",
      "exitNodeIds": [
        "method:66cucs:onnodeclicked__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:66cucs:onnodeclicked__entry",
          "kind": "entry",
          "label": "OnNodeClicked entry",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Called from JS when a node is clicked: notify the interaction service and forward the event to any parent via EventCallback."
        },
        {
          "id": "method:66cucs:onnodeclicked__action_100_js_invokable_100__linear",
          "kind": "statement",
          "label": "Exposed to JS",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "[JSInvokable] public async Task OnNodeClicked(string nodeId)"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_onnodeclicked_await_103_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await InteractionService.NotifyNodeSelected(nodeId);"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_onnodeclicked_notification_103_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.83,
          "detail": "await InteractionService.NotifyNodeSelected(nodeId);"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_external_notification_103__linear",
          "kind": "statement",
          "label": "Notify InteractionService",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "InteractionService.NotifyNodeSelected(nodeId)"
        },
        {
          "id": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected",
          "kind": "call",
          "label": "NotifyNodeSelected",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "nodeId"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition",
          "kind": "condition",
          "label": "OnNodeSelected.HasDelegate",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "await OnNodeSelected.InvokeAsync(nodeId)"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "kind": "statement",
          "label": "merge",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition",
          "kind": "condition",
          "label": "OnNodeSelected.HasDelegate",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (OnNodeSelected.HasDelegate)"
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_107_onnodeclicked_await_107_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await OnNodeSelected.InvokeAsync(nodeId);"
        },
        {
          "id": "method:66cucs:onnodeclicked__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:66cucs:onnodeclicked__entry__method:66cucs:onnodeclicked__action_100_js_invokable_100__linear",
          "from": "method:66cucs:onnodeclicked__entry",
          "to": "method:66cucs:onnodeclicked__action_100_js_invokable_100__linear",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_100_js_invokable_100__linear__method:66cucs:onnodeclicked__action_103_onnodeclicked_await_103_1__await",
          "from": "method:66cucs:onnodeclicked__action_100_js_invokable_100__linear",
          "to": "method:66cucs:onnodeclicked__action_103_onnodeclicked_await_103_1__await",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_onnodeclicked_await_103_1__await__method:66cucs:onnodeclicked__action_103_onnodeclicked_notification_103_0__linear",
          "from": "method:66cucs:onnodeclicked__action_103_onnodeclicked_await_103_1__await",
          "to": "method:66cucs:onnodeclicked__action_103_onnodeclicked_notification_103_0__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.83
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_onnodeclicked_notification_103_0__linear__method:66cucs:onnodeclicked__action_103_external_notification_103__linear",
          "from": "method:66cucs:onnodeclicked__action_103_onnodeclicked_notification_103_0__linear",
          "to": "method:66cucs:onnodeclicked__action_103_external_notification_103__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_103_external_notification_103__linear__call_method:66cucs:onnodeclicked__call_103_NotifyNodeSelected",
          "from": "method:66cucs:onnodeclicked__action_103_external_notification_103__linear",
          "to": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected",
          "kind": "call",
          "label": "nodeId",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected__method:66cucs:onnodeclicked__action_105_guard_clause_105__condition",
          "from": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected",
          "to": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition__method:66cucs:onnodeclicked__action_105_guard_clause_105__true",
          "from": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition",
          "to": "method:66cucs:onnodeclicked__action_105_guard_clause_105__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition__method:66cucs:onnodeclicked__action_105_guard_clause_105__false",
          "from": "method:66cucs:onnodeclicked__action_105_guard_clause_105__condition",
          "to": "method:66cucs:onnodeclicked__action_105_guard_clause_105__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__true__method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "from": "method:66cucs:onnodeclicked__action_105_guard_clause_105__true",
          "to": "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__false__method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "from": "method:66cucs:onnodeclicked__action_105_guard_clause_105__false",
          "to": "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge__method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition",
          "from": "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
          "to": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition__method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__true",
          "from": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition",
          "to": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition__method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__false",
          "from": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__condition",
          "to": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__true__method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "from": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__true",
          "to": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__false__method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "from": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__false",
          "to": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge__method:66cucs:onnodeclicked__action_107_onnodeclicked_await_107_3__await",
          "from": "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge",
          "to": "method:66cucs:onnodeclicked__action_107_onnodeclicked_await_107_3__await",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:66cucs:onnodeclicked__action_107_onnodeclicked_await_107_3__await__implicit_return",
          "from": "method:66cucs:onnodeclicked__action_107_onnodeclicked_await_107_3__await",
          "to": "method:66cucs:onnodeclicked__implicit_return",
          "kind": "return",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected__jump_NexusReader_UI_Shared_Services_IReaderInteractionService_NotifyNodeSelected",
          "fromNodeId": "method:66cucs:onnodeclicked__call_103_NotifyNodeSelected",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderInteractionService",
          "targetHint": "NotifyNodeSelected",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target NotifyNodeSelected in NexusReader.UI.Shared/Services/IReaderInteractionService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:66cucs:onnodeclicked__action_105_guard_clause_105__merge",
        "method:66cucs:onnodeclicked__action_105_onnodeclicked_branch_105_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 101,
        "end": 109
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 101,
          "summary": "Control-flow fragment extracted for method OnNodeClicked.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:qjg1lv:handlefocussimulation__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:qjg1lv:handlefocussimulation",
      "ownerSymbolName": "HandleFocusSimulation",
      "entryNodeId": "method:qjg1lv:handlefocussimulation__entry",
      "exitNodeIds": [
        "method:qjg1lv:handlefocussimulation__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:qjg1lv:handlefocussimulation__entry",
          "kind": "entry",
          "label": "HandleFocusSimulation entry",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Respond to focus-mode toggles by pausing or resuming the client JS graph simulation."
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__true",
          "kind": "branch-true",
          "label": "return",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition",
          "kind": "condition",
          "label": "_module == null",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9,
          "detail": "if (_module == null) return;"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_115_handlefocussimulation_try_115_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition",
          "kind": "condition",
          "label": "FocusMode.IsFocusModeActive",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "await _module.InvokeVoidAsync(\"pause\") or \"resume\""
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__true",
          "kind": "branch-true",
          "label": "pause",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__false",
          "kind": "branch-false",
          "label": "resume",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "kind": "statement",
          "label": "merge",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition",
          "kind": "condition",
          "label": "FocusMode.IsFocusModeActive",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (FocusMode.IsFocusModeActive)"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive",
          "kind": "call",
          "label": "IsFocusModeActive",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "read boolean"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_118_handlefocussimulation_await_118_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"pause\");"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_118_pause",
          "kind": "call",
          "label": "pause",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_120_handlefocussimulation_await_120_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"resume\");"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_120_resume",
          "kind": "call",
          "label": "resume",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "no args"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_122_error_handling_122__linear",
          "kind": "statement",
          "label": "Swallow exceptions from JS interop",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "try { ... } catch { }"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.86,
          "detail": "catch { }"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:qjg1lv:handlefocussimulation__entry__method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition",
          "from": "method:qjg1lv:handlefocussimulation__entry",
          "to": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition__method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__true",
          "from": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__true",
          "kind": "condition-true",
          "label": "return",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition__method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__false",
          "from": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__true__method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__true",
          "to": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__false__method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__false",
          "to": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge__method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition",
          "from": "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
          "to": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition__method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true",
          "from": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition__method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false",
          "from": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true__method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__true",
          "to": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false__method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__false",
          "to": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.9
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge__method:qjg1lv:handlefocussimulation__action_115_handlefocussimulation_try_115_1__try",
          "from": "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
          "to": "method:qjg1lv:handlefocussimulation__action_115_handlefocussimulation_try_115_1__try",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_115_handlefocussimulation_try_115_1__try__method:qjg1lv:handlefocussimulation__action_117_branch_117__condition",
          "from": "method:qjg1lv:handlefocussimulation__action_115_handlefocussimulation_try_115_1__try",
          "to": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition__method:qjg1lv:handlefocussimulation__action_117_branch_117__true",
          "from": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_117_branch_117__true",
          "kind": "condition-true",
          "label": "pause",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition__method:qjg1lv:handlefocussimulation__action_117_branch_117__false",
          "from": "method:qjg1lv:handlefocussimulation__action_117_branch_117__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_117_branch_117__false",
          "kind": "condition-false",
          "label": "resume",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__true__method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_117_branch_117__true",
          "to": "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__false__method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_117_branch_117__false",
          "to": "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge__method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition",
          "from": "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
          "to": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition__method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true",
          "from": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition__method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false",
          "from": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true__method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__true",
          "to": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false__method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__false",
          "to": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge__call_method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive",
          "from": "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
          "to": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive",
          "kind": "call",
          "label": "read boolean",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive__method:qjg1lv:handlefocussimulation__action_118_handlefocussimulation_await_118_3__await",
          "from": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive",
          "to": "method:qjg1lv:handlefocussimulation__action_118_handlefocussimulation_await_118_3__await",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_118_handlefocussimulation_await_118_3__await__call_method:qjg1lv:handlefocussimulation__call_118_pause",
          "from": "method:qjg1lv:handlefocussimulation__action_118_handlefocussimulation_await_118_3__await",
          "to": "method:qjg1lv:handlefocussimulation__call_118_pause",
          "kind": "call",
          "label": "no args",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_118_pause__method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition",
          "from": "method:qjg1lv:handlefocussimulation__call_118_pause",
          "to": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition",
          "kind": "fallback",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition__method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true",
          "from": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition__method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false",
          "from": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__condition",
          "to": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true__method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__true",
          "to": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false__method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "from": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__false",
          "to": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge__method:qjg1lv:handlefocussimulation__action_120_handlefocussimulation_await_120_5__await",
          "from": "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge",
          "to": "method:qjg1lv:handlefocussimulation__action_120_handlefocussimulation_await_120_5__await",
          "kind": "next",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_120_handlefocussimulation_await_120_5__await__call_method:qjg1lv:handlefocussimulation__call_120_resume",
          "from": "method:qjg1lv:handlefocussimulation__action_120_handlefocussimulation_await_120_5__await",
          "to": "method:qjg1lv:handlefocussimulation__call_120_resume",
          "kind": "call",
          "label": "no args",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_120_resume__method:qjg1lv:handlefocussimulation__action_122_error_handling_122__linear",
          "from": "method:qjg1lv:handlefocussimulation__call_120_resume",
          "to": "method:qjg1lv:handlefocussimulation__action_122_error_handling_122__linear",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_122_error_handling_122__linear__method:qjg1lv:handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch",
          "from": "method:qjg1lv:handlefocussimulation__action_122_error_handling_122__linear",
          "to": "method:qjg1lv:handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch",
          "kind": "exception",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.86
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch__implicit_return",
          "from": "method:qjg1lv:handlefocussimulation__action_122_handlefocussimulation_catch_122_6__catch",
          "to": "method:qjg1lv:handlefocussimulation__implicit_return",
          "kind": "return",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive__jump_NexusReader_UI_Shared_Services_IFocusModeService_IsFocusModeActive",
          "fromNodeId": "method:qjg1lv:handlefocussimulation__call_117_IsFocusModeActive",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
          "targetHint": "IsFocusModeActive",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target IsFocusModeActive in NexusReader.UI.Shared/Services/IFocusModeService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_118_pause__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_pause",
          "fromNodeId": "method:qjg1lv:handlefocussimulation__call_118_pause",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "pause",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target pause in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:qjg1lv:handlefocussimulation__call_120_resume__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_resume",
          "fromNodeId": "method:qjg1lv:handlefocussimulation__call_120_resume",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "resume",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target resume in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:qjg1lv:handlefocussimulation__action_114_guard_clause_114__merge",
        "method:qjg1lv:handlefocussimulation__action_114_handlefocussimulation_guard_clause_114_0__merge",
        "method:qjg1lv:handlefocussimulation__action_117_branch_117__merge",
        "method:qjg1lv:handlefocussimulation__action_117_handlefocussimulation_branch_117_2__merge",
        "method:qjg1lv:handlefocussimulation__action_119_handlefocussimulation_fallback_119_4__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 112,
        "end": 123
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 112,
          "summary": "Control-flow fragment extracted for method HandleFocusSimulation.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:lvsss7:disposeasync__fragment",
      "ownerFileId": "file:jo64ly:knowledgegraph-razor",
      "ownerSymbolId": "method:lvsss7:disposeasync",
      "ownerSymbolName": "DisposeAsync",
      "entryNodeId": "method:lvsss7:disposeasync__entry",
      "exitNodeIds": [
        "method:lvsss7:disposeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:lvsss7:disposeasync__entry",
          "kind": "entry",
          "label": "DisposeAsync entry",
          "line": 125,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.99,
          "detail": "Unsubscribe event handlers, unmount and dispose the JS module and DotNet helper when the component is disposed."
        },
        {
          "id": "method:lvsss7:disposeasync__action_127_event_unsubscribe_127__linear",
          "kind": "statement",
          "label": "Unsubscribe FocusMode change",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged -= HandleFocusSimulation"
        },
        {
          "id": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged",
          "kind": "call",
          "label": "OnFocusModeChanged",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "unsubscribe HandleFocusSimulation"
        },
        {
          "id": "method:lvsss7:disposeasync__action_128_event_unsubscribe_128__linear",
          "kind": "statement",
          "label": "Unsubscribe graph events",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "GraphService.OnGraphUpdated -= HandleGraphUpdate; GraphService.OnActiveNodeChanged -= HandleActiveNodeChange; GraphService.OnLoadingChanged -= HandleLoadingChange"
        },
        {
          "id": "method:lvsss7:disposeasync__call_128_OnGraphUpdated",
          "kind": "call",
          "label": "OnGraphUpdated",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "unsubscribe HandleGraphUpdate"
        },
        {
          "id": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged",
          "kind": "call",
          "label": "OnActiveNodeChanged",
          "line": 129,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "unsubscribe HandleActiveNodeChange"
        },
        {
          "id": "method:lvsss7:disposeasync__call_130_OnLoadingChanged",
          "kind": "call",
          "label": "OnLoadingChanged",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "unsubscribe HandleLoadingChange"
        },
        {
          "id": "method:lvsss7:disposeasync__action_132_error_handling_132__linear",
          "kind": "statement",
          "label": "Swallow exceptions during dispose",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "try { ... } catch { }"
        },
        {
          "id": "method:lvsss7:disposeasync__action_132_disposeasync_try_132_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition",
          "kind": "condition",
          "label": "_module is not null",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78,
          "detail": "if (_module is not null)"
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_136_disposeasync_await_136_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.InvokeVoidAsync(\"unmount\", ContainerId);"
        },
        {
          "id": "method:lvsss7:disposeasync__action_136_interop_call_136__linear",
          "kind": "statement",
          "label": "Unmount JS module",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module.InvokeVoidAsync(\"unmount\", ContainerId)"
        },
        {
          "id": "method:lvsss7:disposeasync__call_136_unmount",
          "kind": "call",
          "label": "unmount",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88,
          "detail": "ContainerId"
        },
        {
          "id": "method:lvsss7:disposeasync__action_137_disposeasync_await_137_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81,
          "detail": "await _module.DisposeAsync();"
        },
        {
          "id": "method:lvsss7:disposeasync__action_137_dispose_137__linear",
          "kind": "statement",
          "label": "Dispose JS module and DotNet helper",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7,
          "detail": "_module.DisposeAsync(); _dotNetHelper?.Dispose()"
        },
        {
          "id": "method:lvsss7:disposeasync__action_140_disposeasync_catch_140_4__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.86,
          "detail": "catch { }"
        },
        {
          "id": "method:lvsss7:disposeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:lvsss7:disposeasync__entry__method:lvsss7:disposeasync__action_127_event_unsubscribe_127__linear",
          "from": "method:lvsss7:disposeasync__entry",
          "to": "method:lvsss7:disposeasync__action_127_event_unsubscribe_127__linear",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lvsss7:disposeasync__action_127_event_unsubscribe_127__linear__call_method:lvsss7:disposeasync__call_127_OnFocusModeChanged",
          "from": "method:lvsss7:disposeasync__action_127_event_unsubscribe_127__linear",
          "to": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged",
          "kind": "call",
          "label": "unsubscribe HandleFocusSimulation",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged__method:lvsss7:disposeasync__action_128_event_unsubscribe_128__linear",
          "from": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged",
          "to": "method:lvsss7:disposeasync__action_128_event_unsubscribe_128__linear",
          "kind": "next",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lvsss7:disposeasync__action_128_event_unsubscribe_128__linear__call_method:lvsss7:disposeasync__call_128_OnGraphUpdated",
          "from": "method:lvsss7:disposeasync__action_128_event_unsubscribe_128__linear",
          "to": "method:lvsss7:disposeasync__call_128_OnGraphUpdated",
          "kind": "call",
          "label": "unsubscribe HandleGraphUpdate",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lvsss7:disposeasync__call_128_OnGraphUpdated__call_method:lvsss7:disposeasync__call_129_OnActiveNodeChanged",
          "from": "method:lvsss7:disposeasync__call_128_OnGraphUpdated",
          "to": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged",
          "kind": "call",
          "label": "unsubscribe HandleActiveNodeChange",
          "line": 129,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged__call_method:lvsss7:disposeasync__call_130_OnLoadingChanged",
          "from": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged",
          "to": "method:lvsss7:disposeasync__call_130_OnLoadingChanged",
          "kind": "call",
          "label": "unsubscribe HandleLoadingChange",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lvsss7:disposeasync__call_130_OnLoadingChanged__method:lvsss7:disposeasync__action_132_error_handling_132__linear",
          "from": "method:lvsss7:disposeasync__call_130_OnLoadingChanged",
          "to": "method:lvsss7:disposeasync__action_132_error_handling_132__linear",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lvsss7:disposeasync__action_132_error_handling_132__linear__method:lvsss7:disposeasync__action_132_disposeasync_try_132_0__try",
          "from": "method:lvsss7:disposeasync__action_132_error_handling_132__linear",
          "to": "method:lvsss7:disposeasync__action_132_disposeasync_try_132_0__try",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.84
        },
        {
          "id": "method:lvsss7:disposeasync__action_132_disposeasync_try_132_0__try__method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition",
          "from": "method:lvsss7:disposeasync__action_132_disposeasync_try_132_0__try",
          "to": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition__method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__true",
          "from": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition",
          "to": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition__method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__false",
          "from": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__condition",
          "to": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__true__method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "from": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__true",
          "to": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__false__method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "from": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__false",
          "to": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge__method:lvsss7:disposeasync__action_136_disposeasync_await_136_2__await",
          "from": "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge",
          "to": "method:lvsss7:disposeasync__action_136_disposeasync_await_136_2__await",
          "kind": "next",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:lvsss7:disposeasync__action_136_disposeasync_await_136_2__await__method:lvsss7:disposeasync__action_136_interop_call_136__linear",
          "from": "method:lvsss7:disposeasync__action_136_disposeasync_await_136_2__await",
          "to": "method:lvsss7:disposeasync__action_136_interop_call_136__linear",
          "kind": "next",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lvsss7:disposeasync__action_136_interop_call_136__linear__call_method:lvsss7:disposeasync__call_136_unmount",
          "from": "method:lvsss7:disposeasync__action_136_interop_call_136__linear",
          "to": "method:lvsss7:disposeasync__call_136_unmount",
          "kind": "call",
          "label": "ContainerId",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lvsss7:disposeasync__call_136_unmount__method:lvsss7:disposeasync__action_137_disposeasync_await_137_3__await",
          "from": "method:lvsss7:disposeasync__call_136_unmount",
          "to": "method:lvsss7:disposeasync__action_137_disposeasync_await_137_3__await",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.81
        },
        {
          "id": "method:lvsss7:disposeasync__action_137_disposeasync_await_137_3__await__method:lvsss7:disposeasync__action_137_dispose_137__linear",
          "from": "method:lvsss7:disposeasync__action_137_disposeasync_await_137_3__await",
          "to": "method:lvsss7:disposeasync__action_137_dispose_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lvsss7:disposeasync__action_137_dispose_137__linear__method:lvsss7:disposeasync__action_140_disposeasync_catch_140_4__catch",
          "from": "method:lvsss7:disposeasync__action_137_dispose_137__linear",
          "to": "method:lvsss7:disposeasync__action_140_disposeasync_catch_140_4__catch",
          "kind": "exception",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.86
        },
        {
          "id": "method:lvsss7:disposeasync__action_140_disposeasync_catch_140_4__catch__implicit_return",
          "from": "method:lvsss7:disposeasync__action_140_disposeasync_catch_140_4__catch",
          "to": "method:lvsss7:disposeasync__implicit_return",
          "kind": "return",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged__jump_NexusReader_UI_Shared_Services_IFocusModeService_OnFocusModeChanged",
          "fromNodeId": "method:lvsss7:disposeasync__call_127_OnFocusModeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService",
          "targetHint": "OnFocusModeChanged",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnFocusModeChanged in NexusReader.UI.Shared/Services/IFocusModeService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:lvsss7:disposeasync__call_128_OnGraphUpdated__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnGraphUpdated",
          "fromNodeId": "method:lvsss7:disposeasync__call_128_OnGraphUpdated",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnGraphUpdated",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnGraphUpdated in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnActiveNodeChanged",
          "fromNodeId": "method:lvsss7:disposeasync__call_129_OnActiveNodeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnActiveNodeChanged",
          "line": 129,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnActiveNodeChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:lvsss7:disposeasync__call_130_OnLoadingChanged__jump_NexusReader_UI_Shared_Services_IKnowledgeGraphService_OnLoadingChanged",
          "fromNodeId": "method:lvsss7:disposeasync__call_130_OnLoadingChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService",
          "targetHint": "OnLoadingChanged",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target OnLoadingChanged in NexusReader.UI.Shared/Services/IKnowledgeGraphService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:lvsss7:disposeasync__call_136_unmount__jump___content_NexusReader_UI_Shared_js_knowledgeGraph_js_unmount",
          "fromNodeId": "method:lvsss7:disposeasync__call_136_unmount",
          "kind": "call-target",
          "targetPath": "./_content/NexusReader.UI.Shared/js/knowledgeGraph.js",
          "targetHint": "unmount",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "reason": "Call target unmount in ./_content/NexusReader.UI.Shared/js/knowledgeGraph.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:lvsss7:disposeasync__action_134_disposeasync_branch_134_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 125,
        "end": 143
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor",
          "line": 125,
          "summary": "Control-flow fragment extracted for method DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pp2oro:oninitializedasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1pp2oro:oninitializedasync",
      "ownerSymbolName": "OnInitializedAsync",
      "entryNodeId": "method:1pp2oro:oninitializedasync__entry",
      "exitNodeIds": [
        "method:1pp2oro:oninitializedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pp2oro:oninitializedasync__entry",
          "kind": "entry",
          "label": "OnInitializedAsync entry",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Component initialization: clears coordinator and subscribes to theme, navigation, interaction and sync events."
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_73_oninitializedasync_await_73_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await Coordinator.ClearAsync();"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__call_73_ClearAsync",
          "kind": "call",
          "label": "ClearAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_74_subscribe_event_74__linear",
          "kind": "statement",
          "label": "Subscribe theme change",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "ThemeService.OnThemeChanged += HandleUpdate"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_75_subscribe_event_75__linear",
          "kind": "statement",
          "label": "Subscribe navigation change",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "NavigationService.OnNavigationChanged += OnNavigationChanged"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_77_subscribe_event_77__linear",
          "kind": "statement",
          "label": "Subscribe interaction events",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "InteractionService.OnScrollToBlockRequested/OnHighlightBlockRequested/OnTextSelected += handlers"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_80_subscribe_event_80__linear",
          "kind": "statement",
          "label": "Subscribe sync progress",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "SyncService.OnProgressReceived += HandleSyncProgressReceived"
        },
        {
          "id": "method:1pp2oro:oninitializedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pp2oro:oninitializedasync__entry__method:1pp2oro:oninitializedasync__action_73_oninitializedasync_await_73_0__await",
          "from": "method:1pp2oro:oninitializedasync__entry",
          "to": "method:1pp2oro:oninitializedasync__action_73_oninitializedasync_await_73_0__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_73_oninitializedasync_await_73_0__await__call_method:1pp2oro:oninitializedasync__call_73_ClearAsync",
          "from": "method:1pp2oro:oninitializedasync__action_73_oninitializedasync_await_73_0__await",
          "to": "method:1pp2oro:oninitializedasync__call_73_ClearAsync",
          "kind": "call",
          "label": "none",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1pp2oro:oninitializedasync__call_73_ClearAsync__method:1pp2oro:oninitializedasync__action_74_subscribe_event_74__linear",
          "from": "method:1pp2oro:oninitializedasync__call_73_ClearAsync",
          "to": "method:1pp2oro:oninitializedasync__action_74_subscribe_event_74__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_74_subscribe_event_74__linear__method:1pp2oro:oninitializedasync__action_75_subscribe_event_75__linear",
          "from": "method:1pp2oro:oninitializedasync__action_74_subscribe_event_74__linear",
          "to": "method:1pp2oro:oninitializedasync__action_75_subscribe_event_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_75_subscribe_event_75__linear__method:1pp2oro:oninitializedasync__action_77_subscribe_event_77__linear",
          "from": "method:1pp2oro:oninitializedasync__action_75_subscribe_event_75__linear",
          "to": "method:1pp2oro:oninitializedasync__action_77_subscribe_event_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_77_subscribe_event_77__linear__method:1pp2oro:oninitializedasync__action_80_subscribe_event_80__linear",
          "from": "method:1pp2oro:oninitializedasync__action_77_subscribe_event_77__linear",
          "to": "method:1pp2oro:oninitializedasync__action_80_subscribe_event_80__linear",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1pp2oro:oninitializedasync__action_80_subscribe_event_80__linear__implicit_return",
          "from": "method:1pp2oro:oninitializedasync__action_80_subscribe_event_80__linear",
          "to": "method:1pp2oro:oninitializedasync__implicit_return",
          "kind": "return",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1pp2oro:oninitializedasync__call_73_ClearAsync__jump_unknown_ClearAsync",
          "fromNodeId": "method:1pp2oro:oninitializedasync__call_73_ClearAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ClearAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target ClearAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8599999999999999,
      "lineSpan": {
        "start": 71,
        "end": 81
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 71,
          "summary": "Control-flow fragment extracted for method OnInitializedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:etczkb:onparameterssetasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:etczkb:onparameterssetasync",
      "ownerSymbolName": "OnParametersSetAsync",
      "entryNodeId": "method:etczkb:onparameterssetasync__entry",
      "exitNodeIds": [
        "method:etczkb:onparameterssetasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:etczkb:onparameterssetasync__entry",
          "kind": "entry",
          "label": "OnParametersSetAsync entry",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Triggered when component parameters are set; loads the chapter for the current navigation index."
        },
        {
          "id": "method:etczkb:onparameterssetasync__action_85_onparameterssetasync_await_85_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await LoadChapterAsync(NavigationService.CurrentChapterIndex);"
        },
        {
          "id": "method:etczkb:onparameterssetasync__action_85_orchestration_85__linear",
          "kind": "statement",
          "label": "Kick off chapter load",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Delegates to LoadChapterAsync with current index"
        },
        {
          "id": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync",
          "kind": "call",
          "label": "LoadChapterAsync",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "NavigationService.CurrentChapterIndex"
        },
        {
          "id": "method:etczkb:onparameterssetasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:etczkb:onparameterssetasync__entry__method:etczkb:onparameterssetasync__action_85_onparameterssetasync_await_85_0__await",
          "from": "method:etczkb:onparameterssetasync__entry",
          "to": "method:etczkb:onparameterssetasync__action_85_onparameterssetasync_await_85_0__await",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:etczkb:onparameterssetasync__action_85_onparameterssetasync_await_85_0__await__method:etczkb:onparameterssetasync__action_85_orchestration_85__linear",
          "from": "method:etczkb:onparameterssetasync__action_85_onparameterssetasync_await_85_0__await",
          "to": "method:etczkb:onparameterssetasync__action_85_orchestration_85__linear",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:etczkb:onparameterssetasync__action_85_orchestration_85__linear__call_method:etczkb:onparameterssetasync__call_85_LoadChapterAsync",
          "from": "method:etczkb:onparameterssetasync__action_85_orchestration_85__linear",
          "to": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync",
          "kind": "call",
          "label": "NavigationService.CurrentChapterIndex",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync__implicit_return",
          "from": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync",
          "to": "method:etczkb:onparameterssetasync__implicit_return",
          "kind": "return",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_LoadChapterAsync",
          "fromNodeId": "method:etczkb:onparameterssetasync__call_85_LoadChapterAsync",
          "kind": "call-target",
          "targetNodeId": "method:ero6bp:loadchapterasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "LoadChapterAsync",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target LoadChapterAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.82,
      "lineSpan": {
        "start": 83,
        "end": 86
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 83,
          "summary": "Control-flow fragment extracted for method OnParametersSetAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1k0kfjg:onnavigationchanged__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1k0kfjg:onnavigationchanged",
      "ownerSymbolName": "OnNavigationChanged",
      "entryNodeId": "method:1k0kfjg:onnavigationchanged__entry",
      "exitNodeIds": [
        "method:1k0kfjg:onnavigationchanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1k0kfjg:onnavigationchanged__entry",
          "kind": "entry",
          "label": "OnNavigationChanged entry",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Handles navigation changes by resetting selection/JS state and reloading the chapter."
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_90_state_reset_90__linear",
          "kind": "statement",
          "label": "Reset JS init and selection state",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_isJsInitialized=false; _selectedText=''; _selectionCoords=null"
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_93_onnavigationchanged_await_93_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await LoadChapterAsync(NavigationService.CurrentChapterIndex);"
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync",
          "kind": "call",
          "label": "LoadChapterAsync",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "NavigationService.CurrentChapterIndex"
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_94_ui_refresh_94__linear",
          "kind": "statement",
          "label": "Request UI update",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "StateHasChanged()"
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1k0kfjg:onnavigationchanged__entry__method:1k0kfjg:onnavigationchanged__action_90_state_reset_90__linear",
          "from": "method:1k0kfjg:onnavigationchanged__entry",
          "to": "method:1k0kfjg:onnavigationchanged__action_90_state_reset_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_90_state_reset_90__linear__method:1k0kfjg:onnavigationchanged__action_93_onnavigationchanged_await_93_0__await",
          "from": "method:1k0kfjg:onnavigationchanged__action_90_state_reset_90__linear",
          "to": "method:1k0kfjg:onnavigationchanged__action_93_onnavigationchanged_await_93_0__await",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_93_onnavigationchanged_await_93_0__await__call_method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync",
          "from": "method:1k0kfjg:onnavigationchanged__action_93_onnavigationchanged_await_93_0__await",
          "to": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync",
          "kind": "call",
          "label": "NavigationService.CurrentChapterIndex",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync__method:1k0kfjg:onnavigationchanged__action_94_ui_refresh_94__linear",
          "from": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync",
          "to": "method:1k0kfjg:onnavigationchanged__action_94_ui_refresh_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1k0kfjg:onnavigationchanged__action_94_ui_refresh_94__linear__implicit_return",
          "from": "method:1k0kfjg:onnavigationchanged__action_94_ui_refresh_94__linear",
          "to": "method:1k0kfjg:onnavigationchanged__implicit_return",
          "kind": "return",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_LoadChapterAsync",
          "fromNodeId": "method:1k0kfjg:onnavigationchanged__call_93_LoadChapterAsync",
          "kind": "call-target",
          "targetNodeId": "method:ero6bp:loadchapterasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "LoadChapterAsync",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target LoadChapterAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 88,
        "end": 95
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 88,
          "summary": "Control-flow fragment extracted for method OnNavigationChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:qspmus:onafterrenderasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:qspmus:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:qspmus:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:qspmus:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:qspmus:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "After render hook: initializes sync, processes full page with coordinator on first render, and initializes JS observers/listeners when needed."
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition",
          "kind": "condition",
          "label": "firstRender == true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__true",
          "kind": "branch-true",
          "label": "init sync",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__false",
          "kind": "branch-false",
          "label": "process page",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_101_onafterrenderasync_await_101_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await SyncService.InitializeAsync();"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_101_InitializeAsync",
          "kind": "call",
          "label": "InitializeAsync",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "none (SyncService.InitializeAsync)"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_102_state_change_102__linear",
          "kind": "statement",
          "label": "Enable interactivity",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_isInteractive = true"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition",
          "kind": "condition",
          "label": "ViewModel != null",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (ViewModel != null)"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_105_onafterrenderasync_await_105_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await Coordinator.ProcessFullPageAsync(GetFullPageContent());"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync",
          "kind": "call",
          "label": "ProcessFullPageAsync",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "GetFullPageContent()"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition",
          "kind": "condition",
          "label": "ViewModel != null && !_isJsInitialized",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__true",
          "kind": "branch-true",
          "label": "init JS observer/listener",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "kind": "statement",
          "label": "merge",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition",
          "kind": "condition",
          "label": "ViewModel != null && !_isJsInitialized",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (ViewModel != null && !_isJsInitialized)"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_112_onafterrenderasync_await_112_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InitializeObserverAsync();"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync",
          "kind": "call",
          "label": "InitializeObserverAsync",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_113_onafterrenderasync_await_113_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InitializeSelectionListenerAsync();"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync",
          "kind": "call",
          "label": "InitializeSelectionListenerAsync",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:qspmus:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:qspmus:onafterrenderasync__entry__method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition",
          "from": "method:qspmus:onafterrenderasync__entry",
          "to": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition__method:qspmus:onafterrenderasync__action_99_guard_clause_99__true",
          "from": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition",
          "to": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__true",
          "kind": "condition-true",
          "label": "init sync",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition__method:qspmus:onafterrenderasync__action_99_guard_clause_99__false",
          "from": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__condition",
          "to": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__false",
          "kind": "condition-false",
          "label": "process page",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__true__method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "from": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__true",
          "to": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__false__method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "from": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__false",
          "to": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge__method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition",
          "from": "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
          "to": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition__method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__true",
          "from": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition",
          "to": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition__method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__false",
          "from": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__condition",
          "to": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__true__method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "from": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__true",
          "to": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__false__method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "from": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__false",
          "to": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge__method:qspmus:onafterrenderasync__action_101_onafterrenderasync_await_101_1__await",
          "from": "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
          "to": "method:qspmus:onafterrenderasync__action_101_onafterrenderasync_await_101_1__await",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_101_onafterrenderasync_await_101_1__await__call_method:qspmus:onafterrenderasync__call_101_InitializeAsync",
          "from": "method:qspmus:onafterrenderasync__action_101_onafterrenderasync_await_101_1__await",
          "to": "method:qspmus:onafterrenderasync__call_101_InitializeAsync",
          "kind": "call",
          "label": "none (SyncService.InitializeAsync)",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_101_InitializeAsync__method:qspmus:onafterrenderasync__action_102_state_change_102__linear",
          "from": "method:qspmus:onafterrenderasync__call_101_InitializeAsync",
          "to": "method:qspmus:onafterrenderasync__action_102_state_change_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_102_state_change_102__linear__method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition",
          "from": "method:qspmus:onafterrenderasync__action_102_state_change_102__linear",
          "to": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition__method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__true",
          "from": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition",
          "to": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition__method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__false",
          "from": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__condition",
          "to": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__true__method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "from": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__true",
          "to": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__false__method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "from": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__false",
          "to": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge__method:qspmus:onafterrenderasync__action_105_onafterrenderasync_await_105_3__await",
          "from": "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
          "to": "method:qspmus:onafterrenderasync__action_105_onafterrenderasync_await_105_3__await",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_105_onafterrenderasync_await_105_3__await__call_method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync",
          "from": "method:qspmus:onafterrenderasync__action_105_onafterrenderasync_await_105_3__await",
          "to": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync",
          "kind": "call",
          "label": "GetFullPageContent()",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync__method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition",
          "from": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync",
          "to": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition__method:qspmus:onafterrenderasync__action_109_guard_clause_109__true",
          "from": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition",
          "to": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__true",
          "kind": "condition-true",
          "label": "init JS observer/listener",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition__method:qspmus:onafterrenderasync__action_109_guard_clause_109__false",
          "from": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__condition",
          "to": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__true__method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "from": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__true",
          "to": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__false__method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "from": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__false",
          "to": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge__method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition",
          "from": "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
          "to": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition__method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__true",
          "from": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition",
          "to": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition__method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__false",
          "from": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__condition",
          "to": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__true__method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "from": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__true",
          "to": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__false__method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "from": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__false",
          "to": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge__method:qspmus:onafterrenderasync__action_112_onafterrenderasync_await_112_5__await",
          "from": "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge",
          "to": "method:qspmus:onafterrenderasync__action_112_onafterrenderasync_await_112_5__await",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_112_onafterrenderasync_await_112_5__await__call_method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync",
          "from": "method:qspmus:onafterrenderasync__action_112_onafterrenderasync_await_112_5__await",
          "to": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync",
          "kind": "call",
          "label": "none",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync__method:qspmus:onafterrenderasync__action_113_onafterrenderasync_await_113_6__await",
          "from": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync",
          "to": "method:qspmus:onafterrenderasync__action_113_onafterrenderasync_await_113_6__await",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:qspmus:onafterrenderasync__action_113_onafterrenderasync_await_113_6__await__call_method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync",
          "from": "method:qspmus:onafterrenderasync__action_113_onafterrenderasync_await_113_6__await",
          "to": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync",
          "kind": "call",
          "label": "none",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync__implicit_return",
          "from": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync",
          "to": "method:qspmus:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:qspmus:onafterrenderasync__call_101_InitializeAsync__jump_unknown_InitializeAsync",
          "fromNodeId": "method:qspmus:onafterrenderasync__call_101_InitializeAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InitializeAsync",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InitializeAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync__jump_unknown_ProcessFullPageAsync",
          "fromNodeId": "method:qspmus:onafterrenderasync__call_105_ProcessFullPageAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ProcessFullPageAsync",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target ProcessFullPageAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_InitializeObserverAsync",
          "fromNodeId": "method:qspmus:onafterrenderasync__call_112_InitializeObserverAsync",
          "kind": "call-target",
          "targetNodeId": "method:1l7jj8x:initializeobserverasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "InitializeObserverAsync",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InitializeObserverAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        },
        {
          "id": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_InitializeSelectionListenerAsync",
          "fromNodeId": "method:qspmus:onafterrenderasync__call_113_InitializeSelectionListenerAsync",
          "kind": "call-target",
          "targetNodeId": "method:w4053o:initializeselectionlistenerasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "InitializeSelectionListenerAsync",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InitializeSelectionListenerAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:qspmus:onafterrenderasync__action_99_guard_clause_99__merge",
        "method:qspmus:onafterrenderasync__action_99_onafterrenderasync_branch_99_0__merge",
        "method:qspmus:onafterrenderasync__action_103_onafterrenderasync_branch_103_2__merge",
        "method:qspmus:onafterrenderasync__action_109_guard_clause_109__merge",
        "method:qspmus:onafterrenderasync__action_109_onafterrenderasync_branch_109_4__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 97,
        "end": 115
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 97,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:w4053o:initializeselectionlistenerasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:w4053o:initializeselectionlistenerasync",
      "ownerSymbolName": "InitializeSelectionListenerAsync",
      "entryNodeId": "method:w4053o:initializeselectionlistenerasync__entry",
      "exitNodeIds": [
        "method:w4053o:initializeselectionlistenerasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:w4053o:initializeselectionlistenerasync__entry",
          "kind": "entry",
          "label": "InitializeSelectionListenerAsync entry",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Loads a JS module and registers a DOM selection listener via JS interop; logs warning on failure."
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_119_try_catch_119__linear",
          "kind": "statement",
          "label": "Fallback on JS init error",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "catch exception -> Logger.LogWarning(...)"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_119_initializeselectionlistenerasync_try_119_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_121_initializeselectionlistenerasync_await_121_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "var module = await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/selectionHandler.js\");"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_121_external_call_121__linear",
          "kind": "http-call",
          "label": "Import JS selection module",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "JS.InvokeAsync('import', './_content/.../selectionHandler.js')"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync",
          "kind": "call",
          "label": "InvokeAsync",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "\"import' './_content/.../selectionHandler.js'\" and returns module"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_122_initializeselectionlistenerasync_await_122_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await module.InvokeVoidAsync(\"initSelectionListener\", DotNetObjectReference.Create(this), _containerRef);"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync",
          "kind": "call",
          "label": "InvokeVoidAsync",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "\"initSelectionListener\", DotNetObjectReference.Create(this), _containerRef"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_124_initializeselectionlistenerasync_catch_124_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_126_initializeselectionlistenerasync_log_126_4__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogWarning(ex, \"Failed to initialize JS selection listener. Text selection will be unavailable.\");"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:w4053o:initializeselectionlistenerasync__entry__method:w4053o:initializeselectionlistenerasync__action_119_try_catch_119__linear",
          "from": "method:w4053o:initializeselectionlistenerasync__entry",
          "to": "method:w4053o:initializeselectionlistenerasync__action_119_try_catch_119__linear",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_119_try_catch_119__linear__method:w4053o:initializeselectionlistenerasync__action_119_initializeselectionlistenerasync_try_119_0__try",
          "from": "method:w4053o:initializeselectionlistenerasync__action_119_try_catch_119__linear",
          "to": "method:w4053o:initializeselectionlistenerasync__action_119_initializeselectionlistenerasync_try_119_0__try",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_119_initializeselectionlistenerasync_try_119_0__try__method:w4053o:initializeselectionlistenerasync__action_121_initializeselectionlistenerasync_await_121_1__await",
          "from": "method:w4053o:initializeselectionlistenerasync__action_119_initializeselectionlistenerasync_try_119_0__try",
          "to": "method:w4053o:initializeselectionlistenerasync__action_121_initializeselectionlistenerasync_await_121_1__await",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_121_initializeselectionlistenerasync_await_121_1__await__method:w4053o:initializeselectionlistenerasync__action_121_external_call_121__linear",
          "from": "method:w4053o:initializeselectionlistenerasync__action_121_initializeselectionlistenerasync_await_121_1__await",
          "to": "method:w4053o:initializeselectionlistenerasync__action_121_external_call_121__linear",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_121_external_call_121__linear__call_method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync",
          "from": "method:w4053o:initializeselectionlistenerasync__action_121_external_call_121__linear",
          "to": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync",
          "kind": "call",
          "label": "\"import' './_content/.../selectionHandler.js'\" and returns module",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync__method:w4053o:initializeselectionlistenerasync__action_122_initializeselectionlistenerasync_await_122_2__await",
          "from": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync",
          "to": "method:w4053o:initializeselectionlistenerasync__action_122_initializeselectionlistenerasync_await_122_2__await",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_122_initializeselectionlistenerasync_await_122_2__await__call_method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync",
          "from": "method:w4053o:initializeselectionlistenerasync__action_122_initializeselectionlistenerasync_await_122_2__await",
          "to": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync",
          "kind": "call",
          "label": "\"initSelectionListener\", DotNetObjectReference.Create(this), _containerRef",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync__method:w4053o:initializeselectionlistenerasync__action_124_initializeselectionlistenerasync_catch_124_3__catch",
          "from": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync",
          "to": "method:w4053o:initializeselectionlistenerasync__action_124_initializeselectionlistenerasync_catch_124_3__catch",
          "kind": "exception",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_124_initializeselectionlistenerasync_catch_124_3__catch__method:w4053o:initializeselectionlistenerasync__action_126_initializeselectionlistenerasync_log_126_4__linear",
          "from": "method:w4053o:initializeselectionlistenerasync__action_124_initializeselectionlistenerasync_catch_124_3__catch",
          "to": "method:w4053o:initializeselectionlistenerasync__action_126_initializeselectionlistenerasync_log_126_4__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__action_126_initializeselectionlistenerasync_log_126_4__linear__implicit_return",
          "from": "method:w4053o:initializeselectionlistenerasync__action_126_initializeselectionlistenerasync_log_126_4__linear",
          "to": "method:w4053o:initializeselectionlistenerasync__implicit_return",
          "kind": "return",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync__jump_unknown_InvokeAsync",
          "fromNodeId": "method:w4053o:initializeselectionlistenerasync__call_121_InvokeAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InvokeAsync",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InvokeAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync__jump_unknown_InvokeVoidAsync",
          "fromNodeId": "method:w4053o:initializeselectionlistenerasync__call_122_InvokeVoidAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InvokeVoidAsync",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InvokeVoidAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.9,
      "lineSpan": {
        "start": 117,
        "end": 128
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 117,
          "summary": "Control-flow fragment extracted for method InitializeSelectionListenerAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1l7jj8x:initializeobserverasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1l7jj8x:initializeobserverasync",
      "ownerSymbolName": "InitializeObserverAsync",
      "entryNodeId": "method:1l7jj8x:initializeobserverasync__entry",
      "exitNodeIds": [
        "method:1l7jj8x:initializeobserverasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1l7jj8x:initializeobserverasync__entry",
          "kind": "entry",
          "label": "InitializeObserverAsync entry",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Loads JS observer module and initializes scroll/visibility observer; logs warning on failure."
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_132_try_catch_132__linear",
          "kind": "statement",
          "label": "Fallback on observer init error",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "catch exception -> Logger.LogWarning(...)"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_132_initializeobserverasync_try_132_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_134_initializeobserverasync_await_134_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "var module = await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/readerObserver.js\");"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_134_external_call_134__linear",
          "kind": "http-call",
          "label": "Import JS observer module",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "JS.InvokeAsync('import', './_content/.../readerObserver.js')"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync",
          "kind": "call",
          "label": "InvokeAsync",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "\"import' './_content/.../readerObserver.js'\" and returns module"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_135_initializeobserverasync_await_135_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await module.InvokeVoidAsync(\"initObserver\", DotNetObjectReference.Create(this), \".reader-flow-container\", \".block-wrapper\");"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync",
          "kind": "call",
          "label": "InvokeVoidAsync",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "\"initObserver\", DotNetObjectReference.Create(this), \".reader-flow-container\", \".block-wrapper\""
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_137_initializeobserverasync_catch_137_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_139_initializeobserverasync_log_139_4__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogWarning(ex, \"Failed to initialize JS scroll observer. Reading progress sync will be unavailable.\");"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1l7jj8x:initializeobserverasync__entry__method:1l7jj8x:initializeobserverasync__action_132_try_catch_132__linear",
          "from": "method:1l7jj8x:initializeobserverasync__entry",
          "to": "method:1l7jj8x:initializeobserverasync__action_132_try_catch_132__linear",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_132_try_catch_132__linear__method:1l7jj8x:initializeobserverasync__action_132_initializeobserverasync_try_132_0__try",
          "from": "method:1l7jj8x:initializeobserverasync__action_132_try_catch_132__linear",
          "to": "method:1l7jj8x:initializeobserverasync__action_132_initializeobserverasync_try_132_0__try",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_132_initializeobserverasync_try_132_0__try__method:1l7jj8x:initializeobserverasync__action_134_initializeobserverasync_await_134_1__await",
          "from": "method:1l7jj8x:initializeobserverasync__action_132_initializeobserverasync_try_132_0__try",
          "to": "method:1l7jj8x:initializeobserverasync__action_134_initializeobserverasync_await_134_1__await",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_134_initializeobserverasync_await_134_1__await__method:1l7jj8x:initializeobserverasync__action_134_external_call_134__linear",
          "from": "method:1l7jj8x:initializeobserverasync__action_134_initializeobserverasync_await_134_1__await",
          "to": "method:1l7jj8x:initializeobserverasync__action_134_external_call_134__linear",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_134_external_call_134__linear__call_method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync",
          "from": "method:1l7jj8x:initializeobserverasync__action_134_external_call_134__linear",
          "to": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync",
          "kind": "call",
          "label": "\"import' './_content/.../readerObserver.js'\" and returns module",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync__method:1l7jj8x:initializeobserverasync__action_135_initializeobserverasync_await_135_2__await",
          "from": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync",
          "to": "method:1l7jj8x:initializeobserverasync__action_135_initializeobserverasync_await_135_2__await",
          "kind": "next",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_135_initializeobserverasync_await_135_2__await__call_method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync",
          "from": "method:1l7jj8x:initializeobserverasync__action_135_initializeobserverasync_await_135_2__await",
          "to": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync",
          "kind": "call",
          "label": "\"initObserver\", DotNetObjectReference.Create(this), \".reader-flow-container\", \".block-wrapper\"",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync__method:1l7jj8x:initializeobserverasync__action_137_initializeobserverasync_catch_137_3__catch",
          "from": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync",
          "to": "method:1l7jj8x:initializeobserverasync__action_137_initializeobserverasync_catch_137_3__catch",
          "kind": "exception",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_137_initializeobserverasync_catch_137_3__catch__method:1l7jj8x:initializeobserverasync__action_139_initializeobserverasync_log_139_4__linear",
          "from": "method:1l7jj8x:initializeobserverasync__action_137_initializeobserverasync_catch_137_3__catch",
          "to": "method:1l7jj8x:initializeobserverasync__action_139_initializeobserverasync_log_139_4__linear",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__action_139_initializeobserverasync_log_139_4__linear__implicit_return",
          "from": "method:1l7jj8x:initializeobserverasync__action_139_initializeobserverasync_log_139_4__linear",
          "to": "method:1l7jj8x:initializeobserverasync__implicit_return",
          "kind": "return",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync__jump_unknown_InvokeAsync",
          "fromNodeId": "method:1l7jj8x:initializeobserverasync__call_134_InvokeAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InvokeAsync",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InvokeAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync__jump_unknown_InvokeVoidAsync",
          "fromNodeId": "method:1l7jj8x:initializeobserverasync__call_135_InvokeVoidAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InvokeVoidAsync",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InvokeVoidAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.9,
      "lineSpan": {
        "start": 130,
        "end": 141
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 130,
          "summary": "Control-flow fragment extracted for method InitializeObserverAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1p3f1im:handleblockreached__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1p3f1im:handleblockreached",
      "ownerSymbolName": "HandleBlockReached",
      "entryNodeId": "method:1p3f1im:handleblockreached__entry",
      "exitNodeIds": [
        "method:1p3f1im:handleblockreached__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1p3f1im:handleblockreached__entry",
          "kind": "entry",
          "label": "HandleBlockReached entry",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Invoked from JS when a block becomes visible; notifies coordinator and updates sync progress if ViewModel present."
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_146_handleblockreached_await_146_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await Coordinator.OnBlockReachedAsync(blockId, content);"
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_146_external_invocation_146__linear",
          "kind": "statement",
          "label": "Notify coordinator of block reached",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Coordinator.OnBlockReachedAsync(blockId, content)"
        },
        {
          "id": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync",
          "kind": "call",
          "label": "OnBlockReachedAsync",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "blockId, content (Coordinator)"
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition",
          "kind": "condition",
          "label": "ViewModel != null",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__true",
          "kind": "branch-true",
          "label": "compute progress",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__false",
          "kind": "branch-false",
          "label": "call UpdateProgressAsync",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "kind": "statement",
          "label": "merge",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition",
          "kind": "condition",
          "label": "ViewModel != null",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (ViewModel != null)"
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_150_computation_150__linear",
          "kind": "statement",
          "label": "Compute progress percent",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "progress = ((CurrentChapterIndex +1)/TotalChapters)*100"
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_152_handleblockreached_await_152_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await SyncService.UpdateProgressAsync("
        },
        {
          "id": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync",
          "kind": "call",
          "label": "UpdateProgressAsync",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "blockId, ViewModel.EbookId, progress, ViewModel.ChapterTitle, ViewModel.CurrentChapterIndex (SyncService)"
        },
        {
          "id": "method:1p3f1im:handleblockreached__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1p3f1im:handleblockreached__entry__method:1p3f1im:handleblockreached__action_146_handleblockreached_await_146_0__await",
          "from": "method:1p3f1im:handleblockreached__entry",
          "to": "method:1p3f1im:handleblockreached__action_146_handleblockreached_await_146_0__await",
          "kind": "next",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_146_handleblockreached_await_146_0__await__method:1p3f1im:handleblockreached__action_146_external_invocation_146__linear",
          "from": "method:1p3f1im:handleblockreached__action_146_handleblockreached_await_146_0__await",
          "to": "method:1p3f1im:handleblockreached__action_146_external_invocation_146__linear",
          "kind": "next",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_146_external_invocation_146__linear__call_method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync",
          "from": "method:1p3f1im:handleblockreached__action_146_external_invocation_146__linear",
          "to": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync",
          "kind": "call",
          "label": "blockId, content (Coordinator)",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync__method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition",
          "from": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync",
          "to": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition__method:1p3f1im:handleblockreached__action_148_guard_clause_148__true",
          "from": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition",
          "to": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__true",
          "kind": "condition-true",
          "label": "compute progress",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition__method:1p3f1im:handleblockreached__action_148_guard_clause_148__false",
          "from": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__condition",
          "to": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__false",
          "kind": "condition-false",
          "label": "call UpdateProgressAsync",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__true__method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "from": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__true",
          "to": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__false__method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "from": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__false",
          "to": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge__method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition",
          "from": "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
          "to": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition__method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__true",
          "from": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition",
          "to": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition__method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__false",
          "from": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__condition",
          "to": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__true__method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "from": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__true",
          "to": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__false__method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "from": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__false",
          "to": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge__method:1p3f1im:handleblockreached__action_150_computation_150__linear",
          "from": "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge",
          "to": "method:1p3f1im:handleblockreached__action_150_computation_150__linear",
          "kind": "next",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_150_computation_150__linear__method:1p3f1im:handleblockreached__action_152_handleblockreached_await_152_2__await",
          "from": "method:1p3f1im:handleblockreached__action_150_computation_150__linear",
          "to": "method:1p3f1im:handleblockreached__action_152_handleblockreached_await_152_2__await",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1p3f1im:handleblockreached__action_152_handleblockreached_await_152_2__await__call_method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync",
          "from": "method:1p3f1im:handleblockreached__action_152_handleblockreached_await_152_2__await",
          "to": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync",
          "kind": "call",
          "label": "blockId, ViewModel.EbookId, progress, ViewModel.ChapterTitle, ViewModel.CurrentChapterIndex (SyncService)",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync__implicit_return",
          "from": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync",
          "to": "method:1p3f1im:handleblockreached__implicit_return",
          "kind": "return",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync__jump_unknown_OnBlockReachedAsync",
          "fromNodeId": "method:1p3f1im:handleblockreached__call_146_OnBlockReachedAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnBlockReachedAsync",
          "line": 146,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target OnBlockReachedAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync__jump_unknown_UpdateProgressAsync",
          "fromNodeId": "method:1p3f1im:handleblockreached__call_152_UpdateProgressAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UpdateProgressAsync",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target UpdateProgressAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1p3f1im:handleblockreached__action_148_guard_clause_148__merge",
        "method:1p3f1im:handleblockreached__action_148_handleblockreached_branch_148_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 143,
        "end": 159
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 143,
          "summary": "Control-flow fragment extracted for method HandleBlockReached.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:o7fqko:handlesyncprogressreceived__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:o7fqko:handlesyncprogressreceived",
      "ownerSymbolName": "HandleSyncProgressReceived",
      "entryNodeId": "method:o7fqko:handlesyncprogressreceived__entry",
      "exitNodeIds": [
        "method:o7fqko:handlesyncprogressreceived__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:o7fqko:handlesyncprogressreceived__entry",
          "kind": "entry",
          "label": "HandleSyncProgressReceived entry",
          "line": 161,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Receives progress from other devices, logs it, scrolls to the corresponding node and requests UI update."
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_163_handlesyncprogressreceived_log_163_0__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogInformation(\"[Sync] Received progress from another device: block {BlockId} at {Timestamp}\", blockId, timestamp);"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_163_log_163__linear",
          "kind": "statement",
          "label": "Log incoming sync progress",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Logger.LogInformation with blockId and timestamp"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_165_handlesyncprogressreceived_await_165_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await ScrollToNodeAsync(blockId);"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_165_ui_action_165__linear",
          "kind": "statement",
          "label": "Scroll to block",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "ScrollToNodeAsync(blockId) then StateHasChanged()"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync",
          "kind": "call",
          "label": "ScrollToNodeAsync",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "blockId"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_166_handlesyncprogressreceived_await_166_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:o7fqko:handlesyncprogressreceived__entry__method:o7fqko:handlesyncprogressreceived__action_163_handlesyncprogressreceived_log_163_0__linear",
          "from": "method:o7fqko:handlesyncprogressreceived__entry",
          "to": "method:o7fqko:handlesyncprogressreceived__action_163_handlesyncprogressreceived_log_163_0__linear",
          "kind": "next",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_163_handlesyncprogressreceived_log_163_0__linear__method:o7fqko:handlesyncprogressreceived__action_163_log_163__linear",
          "from": "method:o7fqko:handlesyncprogressreceived__action_163_handlesyncprogressreceived_log_163_0__linear",
          "to": "method:o7fqko:handlesyncprogressreceived__action_163_log_163__linear",
          "kind": "next",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_163_log_163__linear__method:o7fqko:handlesyncprogressreceived__action_165_handlesyncprogressreceived_await_165_1__await",
          "from": "method:o7fqko:handlesyncprogressreceived__action_163_log_163__linear",
          "to": "method:o7fqko:handlesyncprogressreceived__action_165_handlesyncprogressreceived_await_165_1__await",
          "kind": "next",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_165_handlesyncprogressreceived_await_165_1__await__method:o7fqko:handlesyncprogressreceived__action_165_ui_action_165__linear",
          "from": "method:o7fqko:handlesyncprogressreceived__action_165_handlesyncprogressreceived_await_165_1__await",
          "to": "method:o7fqko:handlesyncprogressreceived__action_165_ui_action_165__linear",
          "kind": "next",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_165_ui_action_165__linear__call_method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync",
          "from": "method:o7fqko:handlesyncprogressreceived__action_165_ui_action_165__linear",
          "to": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync",
          "kind": "call",
          "label": "blockId",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync__method:o7fqko:handlesyncprogressreceived__action_166_handlesyncprogressreceived_await_166_2__await",
          "from": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync",
          "to": "method:o7fqko:handlesyncprogressreceived__action_166_handlesyncprogressreceived_await_166_2__await",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:o7fqko:handlesyncprogressreceived__action_166_handlesyncprogressreceived_await_166_2__await__implicit_return",
          "from": "method:o7fqko:handlesyncprogressreceived__action_166_handlesyncprogressreceived_await_166_2__await",
          "to": "method:o7fqko:handlesyncprogressreceived__implicit_return",
          "kind": "return",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_ScrollToNodeAsync",
          "fromNodeId": "method:o7fqko:handlesyncprogressreceived__call_165_ScrollToNodeAsync",
          "kind": "call-target",
          "targetNodeId": "method:105vz8s:scrolltonodeasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "ScrollToNodeAsync",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target ScrollToNodeAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.9099999999999999,
      "lineSpan": {
        "start": 161,
        "end": 167
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 161,
          "summary": "Control-flow fragment extracted for method HandleSyncProgressReceived.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16xot65:handletextselected__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:16xot65:handletextselected",
      "ownerSymbolName": "HandleTextSelected",
      "entryNodeId": "method:16xot65:handletextselected__entry",
      "exitNodeIds": [
        "method:16xot65:handletextselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:16xot65:handletextselected__entry",
          "kind": "entry",
          "label": "HandleTextSelected entry",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "JS-invokable handler that records selected text, block id and coordinates and triggers UI update."
        },
        {
          "id": "method:16xot65:handletextselected__action_172_handletextselected_log_172_0__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 172,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogDebug(\"[ReaderCanvas] Text selected in block {BlockId}\", blockId);"
        },
        {
          "id": "method:16xot65:handletextselected__action_172_log_172__linear",
          "kind": "statement",
          "label": "Debug log selection",
          "line": 172,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Logger.LogDebug with blockId"
        },
        {
          "id": "method:16xot65:handletextselected__action_173_state_change_173__linear",
          "kind": "statement",
          "label": "Store selection",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_selectedText, _selectedBlockId, _selectionCoords set"
        },
        {
          "id": "method:16xot65:handletextselected__action_176_handletextselected_await_176_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:16xot65:handletextselected__action_176_ui_refresh_176__linear",
          "kind": "statement",
          "label": "Request UI update",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:16xot65:handletextselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 177,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:16xot65:handletextselected__entry__method:16xot65:handletextselected__action_172_handletextselected_log_172_0__linear",
          "from": "method:16xot65:handletextselected__entry",
          "to": "method:16xot65:handletextselected__action_172_handletextselected_log_172_0__linear",
          "kind": "next",
          "line": 172,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:16xot65:handletextselected__action_172_handletextselected_log_172_0__linear__method:16xot65:handletextselected__action_172_log_172__linear",
          "from": "method:16xot65:handletextselected__action_172_handletextselected_log_172_0__linear",
          "to": "method:16xot65:handletextselected__action_172_log_172__linear",
          "kind": "next",
          "line": 172,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16xot65:handletextselected__action_172_log_172__linear__method:16xot65:handletextselected__action_173_state_change_173__linear",
          "from": "method:16xot65:handletextselected__action_172_log_172__linear",
          "to": "method:16xot65:handletextselected__action_173_state_change_173__linear",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16xot65:handletextselected__action_173_state_change_173__linear__method:16xot65:handletextselected__action_176_handletextselected_await_176_1__await",
          "from": "method:16xot65:handletextselected__action_173_state_change_173__linear",
          "to": "method:16xot65:handletextselected__action_176_handletextselected_await_176_1__await",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:16xot65:handletextselected__action_176_handletextselected_await_176_1__await__method:16xot65:handletextselected__action_176_ui_refresh_176__linear",
          "from": "method:16xot65:handletextselected__action_176_handletextselected_await_176_1__await",
          "to": "method:16xot65:handletextselected__action_176_ui_refresh_176__linear",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:16xot65:handletextselected__action_176_ui_refresh_176__linear__implicit_return",
          "from": "method:16xot65:handletextselected__action_176_ui_refresh_176__linear",
          "to": "method:16xot65:handletextselected__implicit_return",
          "kind": "return",
          "line": 177,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 169,
        "end": 177
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 169,
          "summary": "Control-flow fragment extracted for method HandleTextSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1rioxzo:handleselectioncleared__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1rioxzo:handleselectioncleared",
      "ownerSymbolName": "HandleSelectionCleared",
      "entryNodeId": "method:1rioxzo:handleselectioncleared__entry",
      "exitNodeIds": [
        "method:1rioxzo:handleselectioncleared__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1rioxzo:handleselectioncleared__entry",
          "kind": "entry",
          "label": "HandleSelectionCleared entry",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Clears current text selection state and requests UI update."
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_182_state_change_182__linear",
          "kind": "statement",
          "label": "Clear selection state",
          "line": 182,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_selectedText = string.Empty; _selectionCoords = null"
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_184_handleselectioncleared_await_184_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 184,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_184_ui_refresh_184__linear",
          "kind": "statement",
          "label": "Update UI",
          "line": 184,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1rioxzo:handleselectioncleared__entry__method:1rioxzo:handleselectioncleared__action_182_state_change_182__linear",
          "from": "method:1rioxzo:handleselectioncleared__entry",
          "to": "method:1rioxzo:handleselectioncleared__action_182_state_change_182__linear",
          "kind": "next",
          "line": 182,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_182_state_change_182__linear__method:1rioxzo:handleselectioncleared__action_184_handleselectioncleared_await_184_0__await",
          "from": "method:1rioxzo:handleselectioncleared__action_182_state_change_182__linear",
          "to": "method:1rioxzo:handleselectioncleared__action_184_handleselectioncleared_await_184_0__await",
          "kind": "next",
          "line": 184,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_184_handleselectioncleared_await_184_0__await__method:1rioxzo:handleselectioncleared__action_184_ui_refresh_184__linear",
          "from": "method:1rioxzo:handleselectioncleared__action_184_handleselectioncleared_await_184_0__await",
          "to": "method:1rioxzo:handleselectioncleared__action_184_ui_refresh_184__linear",
          "kind": "next",
          "line": 184,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1rioxzo:handleselectioncleared__action_184_ui_refresh_184__linear__implicit_return",
          "from": "method:1rioxzo:handleselectioncleared__action_184_ui_refresh_184__linear",
          "to": "method:1rioxzo:handleselectioncleared__implicit_return",
          "kind": "return",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.82,
      "lineSpan": {
        "start": 179,
        "end": 185
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 179,
          "summary": "Control-flow fragment extracted for method HandleSelectionCleared.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ejbaxq:handlescrollrequested__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1ejbaxq:handlescrollrequested",
      "ownerSymbolName": "HandleScrollRequested",
      "entryNodeId": "method:1ejbaxq:handlescrollrequested__entry",
      "exitNodeIds": [
        "method:1ejbaxq:handlescrollrequested__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ejbaxq:handlescrollrequested__entry",
          "kind": "entry",
          "label": "HandleScrollRequested entry",
          "line": 187,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Handler that triggers a scroll to a specific block node."
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__action_189_handlescrollrequested_await_189_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await ScrollToNodeAsync(blockId);"
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__action_189_orchestration_189__linear",
          "kind": "statement",
          "label": "Delegate scroll",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Calls ScrollToNodeAsync"
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync",
          "kind": "call",
          "label": "ScrollToNodeAsync",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "blockId"
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 190,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ejbaxq:handlescrollrequested__entry__method:1ejbaxq:handlescrollrequested__action_189_handlescrollrequested_await_189_0__await",
          "from": "method:1ejbaxq:handlescrollrequested__entry",
          "to": "method:1ejbaxq:handlescrollrequested__action_189_handlescrollrequested_await_189_0__await",
          "kind": "next",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__action_189_handlescrollrequested_await_189_0__await__method:1ejbaxq:handlescrollrequested__action_189_orchestration_189__linear",
          "from": "method:1ejbaxq:handlescrollrequested__action_189_handlescrollrequested_await_189_0__await",
          "to": "method:1ejbaxq:handlescrollrequested__action_189_orchestration_189__linear",
          "kind": "next",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__action_189_orchestration_189__linear__call_method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync",
          "from": "method:1ejbaxq:handlescrollrequested__action_189_orchestration_189__linear",
          "to": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync",
          "kind": "call",
          "label": "blockId",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync__implicit_return",
          "from": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync",
          "to": "method:1ejbaxq:handlescrollrequested__implicit_return",
          "kind": "return",
          "line": 190,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync__jump_NexusReader_UI_Shared_Components_Organisms_ReaderCanvas_razor_ScrollToNodeAsync",
          "fromNodeId": "method:1ejbaxq:handlescrollrequested__call_189_ScrollToNodeAsync",
          "kind": "call-target",
          "targetNodeId": "method:105vz8s:scrolltonodeasync",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "targetHint": "ScrollToNodeAsync",
          "line": 189,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target ScrollToNodeAsync resolved to NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.82,
      "lineSpan": {
        "start": 187,
        "end": 190
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 187,
          "summary": "Control-flow fragment extracted for method HandleScrollRequested.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1nqcmix:handlehighlightrequested__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1nqcmix:handlehighlightrequested",
      "ownerSymbolName": "HandleHighlightRequested",
      "entryNodeId": "method:1nqcmix:handlehighlightrequested__entry",
      "exitNodeIds": [
        "method:1nqcmix:handlehighlightrequested__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1nqcmix:handlehighlightrequested__entry",
          "kind": "entry",
          "label": "HandleHighlightRequested entry",
          "line": 192,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Highlights a block temporarily by setting a highlighted id, triggers UI updates and clears it after a delay."
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_194_state_change_194__linear",
          "kind": "statement",
          "label": "Set highlighted block",
          "line": 194,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_highlightedBlockId = blockId; InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_195_handlehighlightrequested_await_195_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 195,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_196_handlehighlightrequested_await_196_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await Task.Delay(3000);"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_196_timed_fallback_196__linear",
          "kind": "statement",
          "label": "Clear highlight after timeout",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "await Task.Delay(3000); if (_highlightedBlockId == blockId) clear and update UI"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__call_196_Delay",
          "kind": "call",
          "label": "Delay",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "3000ms (Task.Delay)"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition",
          "kind": "condition",
          "label": "_highlightedBlockId == blockId",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (_highlightedBlockId == blockId)"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_200_handlehighlightrequested_await_200_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 202,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1nqcmix:handlehighlightrequested__entry__method:1nqcmix:handlehighlightrequested__action_194_state_change_194__linear",
          "from": "method:1nqcmix:handlehighlightrequested__entry",
          "to": "method:1nqcmix:handlehighlightrequested__action_194_state_change_194__linear",
          "kind": "next",
          "line": 194,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_194_state_change_194__linear__method:1nqcmix:handlehighlightrequested__action_195_handlehighlightrequested_await_195_0__await",
          "from": "method:1nqcmix:handlehighlightrequested__action_194_state_change_194__linear",
          "to": "method:1nqcmix:handlehighlightrequested__action_195_handlehighlightrequested_await_195_0__await",
          "kind": "next",
          "line": 195,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_195_handlehighlightrequested_await_195_0__await__method:1nqcmix:handlehighlightrequested__action_196_handlehighlightrequested_await_196_1__await",
          "from": "method:1nqcmix:handlehighlightrequested__action_195_handlehighlightrequested_await_195_0__await",
          "to": "method:1nqcmix:handlehighlightrequested__action_196_handlehighlightrequested_await_196_1__await",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_196_handlehighlightrequested_await_196_1__await__method:1nqcmix:handlehighlightrequested__action_196_timed_fallback_196__linear",
          "from": "method:1nqcmix:handlehighlightrequested__action_196_handlehighlightrequested_await_196_1__await",
          "to": "method:1nqcmix:handlehighlightrequested__action_196_timed_fallback_196__linear",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_196_timed_fallback_196__linear__call_method:1nqcmix:handlehighlightrequested__call_196_Delay",
          "from": "method:1nqcmix:handlehighlightrequested__action_196_timed_fallback_196__linear",
          "to": "method:1nqcmix:handlehighlightrequested__call_196_Delay",
          "kind": "call",
          "label": "3000ms (Task.Delay)",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__call_196_Delay__method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition",
          "from": "method:1nqcmix:handlehighlightrequested__call_196_Delay",
          "to": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition",
          "kind": "next",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition__method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__true",
          "from": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition",
          "to": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition__method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__false",
          "from": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__condition",
          "to": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__true__method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "from": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__true",
          "to": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "kind": "next",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__false__method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "from": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__false",
          "to": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "kind": "next",
          "line": 197,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge__method:1nqcmix:handlehighlightrequested__action_200_handlehighlightrequested_await_200_3__await",
          "from": "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge",
          "to": "method:1nqcmix:handlehighlightrequested__action_200_handlehighlightrequested_await_200_3__await",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1nqcmix:handlehighlightrequested__action_200_handlehighlightrequested_await_200_3__await__implicit_return",
          "from": "method:1nqcmix:handlehighlightrequested__action_200_handlehighlightrequested_await_200_3__await",
          "to": "method:1nqcmix:handlehighlightrequested__implicit_return",
          "kind": "return",
          "line": 202,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1nqcmix:handlehighlightrequested__call_196_Delay__jump_unknown_Delay",
          "fromNodeId": "method:1nqcmix:handlehighlightrequested__call_196_Delay",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Delay",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target Delay in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1nqcmix:handlehighlightrequested__action_197_handlehighlightrequested_branch_197_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.9799999999999998,
      "lineSpan": {
        "start": 192,
        "end": 202
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 192,
          "summary": "Control-flow fragment extracted for method HandleHighlightRequested.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1i9kqly:getfullpagecontent__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1i9kqly:getfullpagecontent",
      "ownerSymbolName": "GetFullPageContent",
      "entryNodeId": "method:1i9kqly:getfullpagecontent__entry",
      "exitNodeIds": [
        "method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return",
        "method:1i9kqly:getfullpagecontent__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1i9kqly:getfullpagecontent__entry",
          "kind": "entry",
          "label": "GetFullPageContent entry",
          "line": 204,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Builds a plain-text representation of all text blocks (IDs + content) for coordinator processing or full-page use."
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition",
          "kind": "condition",
          "label": "ViewModel == null",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__true",
          "kind": "branch-true",
          "label": "return ''",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__false",
          "kind": "branch-false",
          "label": "build content",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "kind": "statement",
          "label": "merge",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition",
          "kind": "condition",
          "label": "ViewModel == null",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9,
          "detail": "if (ViewModel == null) return string.Empty;"
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 207,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "return string.Join(\"\\n\\n\", ViewModel.Blocks"
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_207_mapping_207__linear",
          "kind": "statement",
          "label": "Concatenate text blocks",
          "line": 207,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Joins TextSegmentBlock contents with IDs into single string"
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_209_getfullpagecontent_mapping_209_2__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.74,
          "detail": ".Select(b => $\"[ID: {b.Id}]\\n{b.Content}\"));"
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 210,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1i9kqly:getfullpagecontent__entry__method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition",
          "from": "method:1i9kqly:getfullpagecontent__entry",
          "to": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition__method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__true",
          "from": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition",
          "to": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__true",
          "kind": "condition-true",
          "label": "return ''",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition__method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__false",
          "from": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__condition",
          "to": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__false",
          "kind": "condition-false",
          "label": "build content",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__true__method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "from": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__true",
          "to": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__false__method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "from": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__false",
          "to": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge__method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition",
          "from": "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
          "to": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition__method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__true",
          "from": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition",
          "to": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition__method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__false",
          "from": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__condition",
          "to": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__true__method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "from": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__true",
          "to": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__false__method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "from": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__false",
          "to": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge__method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return",
          "from": "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge",
          "to": "method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return",
          "kind": "return",
          "line": 207,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return__method:1i9kqly:getfullpagecontent__action_207_mapping_207__linear",
          "from": "method:1i9kqly:getfullpagecontent__action_207_getfullpagecontent_return_207_1__return",
          "to": "method:1i9kqly:getfullpagecontent__action_207_mapping_207__linear",
          "kind": "next",
          "line": 207,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_207_mapping_207__linear__method:1i9kqly:getfullpagecontent__action_209_getfullpagecontent_mapping_209_2__linear",
          "from": "method:1i9kqly:getfullpagecontent__action_207_mapping_207__linear",
          "to": "method:1i9kqly:getfullpagecontent__action_209_getfullpagecontent_mapping_209_2__linear",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.74
        },
        {
          "id": "method:1i9kqly:getfullpagecontent__action_209_getfullpagecontent_mapping_209_2__linear__implicit_return",
          "from": "method:1i9kqly:getfullpagecontent__action_209_getfullpagecontent_mapping_209_2__linear",
          "to": "method:1i9kqly:getfullpagecontent__implicit_return",
          "kind": "return",
          "line": 210,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1i9kqly:getfullpagecontent__action_206_guard_clause_206__merge",
        "method:1i9kqly:getfullpagecontent__action_206_getfullpagecontent_guard_clause_206_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 204,
        "end": 210
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 204,
          "summary": "Control-flow fragment extracted for method GetFullPageContent.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ero6bp:loadchapterasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:ero6bp:loadchapterasync",
      "ownerSymbolName": "LoadChapterAsync",
      "entryNodeId": "method:ero6bp:loadchapterasync__entry",
      "exitNodeIds": [
        "method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return",
        "method:ero6bp:loadchapterasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ero6bp:loadchapterasync__entry",
          "kind": "entry",
          "label": "LoadChapterAsync entry",
          "line": 212,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Loads a reader page (chapter) via Mediator, updates view model and navigation metadata, handles errors and UI loading state, and triggers coordinator/process sync when interactive."
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_214_state_change_214__linear",
          "kind": "statement",
          "label": "Enter loading state",
          "line": 214,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_isLoadingChapter=true; StatusMessage='Wczytywanie treści...'; StateHasChanged()"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_218_loadchapterasync_await_218_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "var authState = await AuthStateProvider.GetAuthenticationStateAsync();"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync",
          "kind": "call",
          "label": "GetAuthenticationStateAsync",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "none (AuthStateProvider)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_219_loadchapterasync_repository_read_219_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86,
          "detail": "var userId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_221_persistence_guard_221__linear",
          "kind": "statement",
          "label": "Guard for no ebook selected",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition",
          "kind": "condition",
          "label": "ebookId == Guid.Empty",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (ebookId == Guid.Empty)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "return;"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_230_loadchapterasync_await_230_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "var result = await Mediator.Send(new GetReaderPageQuery(ebookId, index, userId));"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_230_external_query_230__linear",
          "kind": "statement",
          "label": "Query reader page via mediator",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Mediator.Send(GetReaderPageQuery)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_230_Send",
          "kind": "call",
          "label": "Send",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "GetReaderPageQuery(ebookId, index, userId) via Mediator"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__condition",
          "kind": "condition",
          "label": "Handle result success/failure",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "If result.IsSuccess -> set ViewModel and update metadata; else set error StatusMessage and log"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__true",
          "kind": "branch-true",
          "label": "true",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__false",
          "kind": "branch-false",
          "label": "false",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "kind": "statement",
          "label": "merge",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_234_loadchapterasync_await_234_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await NavigationService.UpdateMetadataAsync(ViewModel.CurrentChapterIndex, ViewModel.TotalChapters, ViewModel.ChapterTitle);"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync",
          "kind": "call",
          "label": "UpdateMetadataAsync",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "ViewModel.CurrentChapterIndex, ViewModel.TotalChapters, ViewModel.ChapterTitle (NavigationService)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_conditional_orchestration_236__linear",
          "kind": "statement",
          "label": "Process full page when interactive",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "Coordinator.ProcessFullPageAsync(GetFullPageContent())"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition",
          "kind": "condition",
          "label": "_isInteractive",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78,
          "detail": "if (_isInteractive)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_238_loadchapterasync_await_238_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await Coordinator.ProcessFullPageAsync(GetFullPageContent());"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync",
          "kind": "call",
          "label": "ProcessFullPageAsync",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "GetFullPageContent() (Coordinator)"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_244_loadchapterasync_repository_read_244_10__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 244,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86,
          "detail": "StatusMessage = $\"Błąd: {result.Errors.FirstOrDefault()?.Message ?? \"Nie udało się wczytać treści\"}\";"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_mapping_245_12__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 245,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.74,
          "detail": "Logger.LogError(\"Failed to load chapter {Index} for ebook {EbookId}: {Errors}\", index, ebookId, string.Join(\", \", result.Errors.Select(e => e.Message)));"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_log_245_11__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 245,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogError(\"Failed to load chapter {Index} for ebook {EbookId}: {Errors}\", index, ebookId, string.Join(\", \", result.Errors.Select(e => e.Message)));"
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_248_state_change_248__linear",
          "kind": "statement",
          "label": "Exit loading state",
          "line": 248,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "_isLoadingChapter = false; StateHasChanged()"
        },
        {
          "id": "method:ero6bp:loadchapterasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ero6bp:loadchapterasync__entry__method:ero6bp:loadchapterasync__action_214_state_change_214__linear",
          "from": "method:ero6bp:loadchapterasync__entry",
          "to": "method:ero6bp:loadchapterasync__action_214_state_change_214__linear",
          "kind": "next",
          "line": 214,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_214_state_change_214__linear__method:ero6bp:loadchapterasync__action_218_loadchapterasync_await_218_0__await",
          "from": "method:ero6bp:loadchapterasync__action_214_state_change_214__linear",
          "to": "method:ero6bp:loadchapterasync__action_218_loadchapterasync_await_218_0__await",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_218_loadchapterasync_await_218_0__await__call_method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync",
          "from": "method:ero6bp:loadchapterasync__action_218_loadchapterasync_await_218_0__await",
          "to": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync",
          "kind": "call",
          "label": "none (AuthStateProvider)",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync__method:ero6bp:loadchapterasync__action_219_loadchapterasync_repository_read_219_1__linear",
          "from": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync",
          "to": "method:ero6bp:loadchapterasync__action_219_loadchapterasync_repository_read_219_1__linear",
          "kind": "next",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_219_loadchapterasync_repository_read_219_1__linear__method:ero6bp:loadchapterasync__action_221_persistence_guard_221__linear",
          "from": "method:ero6bp:loadchapterasync__action_219_loadchapterasync_repository_read_219_1__linear",
          "to": "method:ero6bp:loadchapterasync__action_221_persistence_guard_221__linear",
          "kind": "next",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_221_persistence_guard_221__linear__method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition",
          "from": "method:ero6bp:loadchapterasync__action_221_persistence_guard_221__linear",
          "to": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition",
          "kind": "next",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition__method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__true",
          "from": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition",
          "to": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition__method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__false",
          "from": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__condition",
          "to": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__true__method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "from": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__true",
          "to": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "kind": "next",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__false__method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "from": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__false",
          "to": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "kind": "next",
          "line": 222,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge__method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return",
          "from": "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
          "to": "method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return",
          "kind": "return",
          "line": 227,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return__method:ero6bp:loadchapterasync__action_230_loadchapterasync_await_230_4__await",
          "from": "method:ero6bp:loadchapterasync__action_227_loadchapterasync_return_227_3__return",
          "to": "method:ero6bp:loadchapterasync__action_230_loadchapterasync_await_230_4__await",
          "kind": "next",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_230_loadchapterasync_await_230_4__await__method:ero6bp:loadchapterasync__action_230_external_query_230__linear",
          "from": "method:ero6bp:loadchapterasync__action_230_loadchapterasync_await_230_4__await",
          "to": "method:ero6bp:loadchapterasync__action_230_external_query_230__linear",
          "kind": "next",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_230_external_query_230__linear__call_method:ero6bp:loadchapterasync__call_230_Send",
          "from": "method:ero6bp:loadchapterasync__action_230_external_query_230__linear",
          "to": "method:ero6bp:loadchapterasync__call_230_Send",
          "kind": "call",
          "label": "GetReaderPageQuery(ebookId, index, userId) via Mediator",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_230_Send__method:ero6bp:loadchapterasync__action_231_branch_231__condition",
          "from": "method:ero6bp:loadchapterasync__call_230_Send",
          "to": "method:ero6bp:loadchapterasync__action_231_branch_231__condition",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__condition__method:ero6bp:loadchapterasync__action_231_branch_231__true",
          "from": "method:ero6bp:loadchapterasync__action_231_branch_231__condition",
          "to": "method:ero6bp:loadchapterasync__action_231_branch_231__true",
          "kind": "condition-true",
          "label": "true",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__condition__method:ero6bp:loadchapterasync__action_231_branch_231__false",
          "from": "method:ero6bp:loadchapterasync__action_231_branch_231__condition",
          "to": "method:ero6bp:loadchapterasync__action_231_branch_231__false",
          "kind": "condition-false",
          "label": "false",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__true__method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "from": "method:ero6bp:loadchapterasync__action_231_branch_231__true",
          "to": "method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__false__method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "from": "method:ero6bp:loadchapterasync__action_231_branch_231__false",
          "to": "method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_branch_231__merge__method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition",
          "from": "method:ero6bp:loadchapterasync__action_231_branch_231__merge",
          "to": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition__method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__true",
          "from": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition",
          "to": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition__method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__false",
          "from": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__condition",
          "to": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__true__method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "from": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__true",
          "to": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__false__method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "from": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__false",
          "to": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "kind": "next",
          "line": 231,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge__method:ero6bp:loadchapterasync__action_234_loadchapterasync_await_234_6__await",
          "from": "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
          "to": "method:ero6bp:loadchapterasync__action_234_loadchapterasync_await_234_6__await",
          "kind": "next",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_234_loadchapterasync_await_234_6__await__call_method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync",
          "from": "method:ero6bp:loadchapterasync__action_234_loadchapterasync_await_234_6__await",
          "to": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync",
          "kind": "call",
          "label": "ViewModel.CurrentChapterIndex, ViewModel.TotalChapters, ViewModel.ChapterTitle (NavigationService)",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync__method:ero6bp:loadchapterasync__action_236_conditional_orchestration_236__linear",
          "from": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync",
          "to": "method:ero6bp:loadchapterasync__action_236_conditional_orchestration_236__linear",
          "kind": "next",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_conditional_orchestration_236__linear__method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition",
          "from": "method:ero6bp:loadchapterasync__action_236_conditional_orchestration_236__linear",
          "to": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition",
          "kind": "next",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition__method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__true",
          "from": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition",
          "to": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition__method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__false",
          "from": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__condition",
          "to": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__true__method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "from": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__true",
          "to": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "kind": "next",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__false__method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "from": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__false",
          "to": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "kind": "next",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.78
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge__method:ero6bp:loadchapterasync__action_238_loadchapterasync_await_238_8__await",
          "from": "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
          "to": "method:ero6bp:loadchapterasync__action_238_loadchapterasync_await_238_8__await",
          "kind": "next",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_238_loadchapterasync_await_238_8__await__call_method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync",
          "from": "method:ero6bp:loadchapterasync__action_238_loadchapterasync_await_238_8__await",
          "to": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync",
          "kind": "call",
          "label": "GetFullPageContent() (Coordinator)",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync__method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition",
          "from": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync",
          "to": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition",
          "kind": "fallback",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition__method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__true",
          "from": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition",
          "to": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition__method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__false",
          "from": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__condition",
          "to": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__true__method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "from": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__true",
          "to": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "kind": "next",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__false__method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "from": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__false",
          "to": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "kind": "next",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge__method:ero6bp:loadchapterasync__action_244_loadchapterasync_repository_read_244_10__linear",
          "from": "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge",
          "to": "method:ero6bp:loadchapterasync__action_244_loadchapterasync_repository_read_244_10__linear",
          "kind": "next",
          "line": 244,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_244_loadchapterasync_repository_read_244_10__linear__method:ero6bp:loadchapterasync__action_245_loadchapterasync_mapping_245_12__linear",
          "from": "method:ero6bp:loadchapterasync__action_244_loadchapterasync_repository_read_244_10__linear",
          "to": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_mapping_245_12__linear",
          "kind": "next",
          "line": 245,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.74
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_mapping_245_12__linear__method:ero6bp:loadchapterasync__action_245_loadchapterasync_log_245_11__linear",
          "from": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_mapping_245_12__linear",
          "to": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_log_245_11__linear",
          "kind": "next",
          "line": 245,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_log_245_11__linear__method:ero6bp:loadchapterasync__action_248_state_change_248__linear",
          "from": "method:ero6bp:loadchapterasync__action_245_loadchapterasync_log_245_11__linear",
          "to": "method:ero6bp:loadchapterasync__action_248_state_change_248__linear",
          "kind": "next",
          "line": 248,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ero6bp:loadchapterasync__action_248_state_change_248__linear__implicit_return",
          "from": "method:ero6bp:loadchapterasync__action_248_state_change_248__linear",
          "to": "method:ero6bp:loadchapterasync__implicit_return",
          "kind": "return",
          "line": 250,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync__jump_unknown_GetAuthenticationStateAsync",
          "fromNodeId": "method:ero6bp:loadchapterasync__call_218_GetAuthenticationStateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetAuthenticationStateAsync",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target GetAuthenticationStateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_230_Send__jump_unknown_Send",
          "fromNodeId": "method:ero6bp:loadchapterasync__call_230_Send",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Send",
          "line": 230,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target Send in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync__jump_unknown_UpdateMetadataAsync",
          "fromNodeId": "method:ero6bp:loadchapterasync__call_234_UpdateMetadataAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UpdateMetadataAsync",
          "line": 234,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target UpdateMetadataAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync__jump_unknown_ProcessFullPageAsync",
          "fromNodeId": "method:ero6bp:loadchapterasync__call_238_ProcessFullPageAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "ProcessFullPageAsync",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target ProcessFullPageAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:ero6bp:loadchapterasync__action_222_loadchapterasync_branch_222_2__merge",
        "method:ero6bp:loadchapterasync__action_231_branch_231__merge",
        "method:ero6bp:loadchapterasync__action_231_loadchapterasync_branch_231_5__merge",
        "method:ero6bp:loadchapterasync__action_236_loadchapterasync_branch_236_7__merge",
        "method:ero6bp:loadchapterasync__action_241_loadchapterasync_fallback_241_9__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 212,
        "end": 250
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 212,
          "summary": "Control-flow fragment extracted for method LoadChapterAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:105vz8s:scrolltonodeasync__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:105vz8s:scrolltonodeasync",
      "ownerSymbolName": "ScrollToNodeAsync",
      "entryNodeId": "method:105vz8s:scrolltonodeasync__entry",
      "exitNodeIds": [
        "method:105vz8s:scrolltonodeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:105vz8s:scrolltonodeasync__entry",
          "kind": "entry",
          "label": "ScrollToNodeAsync entry",
          "line": 252,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Uses JS interop to scroll a DOM element into view by id with smooth behavior and logs warnings on failure."
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_254_scrolltonodeasync_try_254_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 254,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_256_scrolltonodeasync_await_256_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81,
          "detail": "await JS.InvokeVoidAsync(\"eval\", $\"document.getElementById('{id}')?.scrollIntoView({{ behavior: 'smooth', block: 'center' }});\");"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_256_external_call_256__linear",
          "kind": "http-call",
          "label": "Scroll DOM node via JS eval",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "JS.InvokeVoidAsync('eval', script)"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync",
          "kind": "call",
          "label": "InvokeVoidAsync",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88,
          "detail": "eval script: document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'center' }) (IJSRuntime)"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_258_try_catch_258__linear",
          "kind": "statement",
          "label": "Log on scroll failure",
          "line": 258,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "catch -> Logger.LogWarning(...)"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_258_scrolltonodeasync_catch_258_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 258,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_260_scrolltonodeasync_log_260_3__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 260,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92,
          "detail": "Logger.LogWarning(ex, \"Failed to scroll to node {NodeId}.\", id);"
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 262,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:105vz8s:scrolltonodeasync__entry__method:105vz8s:scrolltonodeasync__action_254_scrolltonodeasync_try_254_0__try",
          "from": "method:105vz8s:scrolltonodeasync__entry",
          "to": "method:105vz8s:scrolltonodeasync__action_254_scrolltonodeasync_try_254_0__try",
          "kind": "next",
          "line": 254,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.84
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_254_scrolltonodeasync_try_254_0__try__method:105vz8s:scrolltonodeasync__action_256_scrolltonodeasync_await_256_1__await",
          "from": "method:105vz8s:scrolltonodeasync__action_254_scrolltonodeasync_try_254_0__try",
          "to": "method:105vz8s:scrolltonodeasync__action_256_scrolltonodeasync_await_256_1__await",
          "kind": "next",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.81
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_256_scrolltonodeasync_await_256_1__await__method:105vz8s:scrolltonodeasync__action_256_external_call_256__linear",
          "from": "method:105vz8s:scrolltonodeasync__action_256_scrolltonodeasync_await_256_1__await",
          "to": "method:105vz8s:scrolltonodeasync__action_256_external_call_256__linear",
          "kind": "next",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_256_external_call_256__linear__call_method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync",
          "from": "method:105vz8s:scrolltonodeasync__action_256_external_call_256__linear",
          "to": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync",
          "kind": "call",
          "label": "eval script: document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'center' }) (IJSRuntime)",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.88
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync__method:105vz8s:scrolltonodeasync__action_258_try_catch_258__linear",
          "from": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync",
          "to": "method:105vz8s:scrolltonodeasync__action_258_try_catch_258__linear",
          "kind": "next",
          "line": 258,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_258_try_catch_258__linear__method:105vz8s:scrolltonodeasync__action_258_scrolltonodeasync_catch_258_2__catch",
          "from": "method:105vz8s:scrolltonodeasync__action_258_try_catch_258__linear",
          "to": "method:105vz8s:scrolltonodeasync__action_258_scrolltonodeasync_catch_258_2__catch",
          "kind": "exception",
          "line": 258,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.86
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_258_scrolltonodeasync_catch_258_2__catch__method:105vz8s:scrolltonodeasync__action_260_scrolltonodeasync_log_260_3__linear",
          "from": "method:105vz8s:scrolltonodeasync__action_258_scrolltonodeasync_catch_258_2__catch",
          "to": "method:105vz8s:scrolltonodeasync__action_260_scrolltonodeasync_log_260_3__linear",
          "kind": "next",
          "line": 260,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.92
        },
        {
          "id": "method:105vz8s:scrolltonodeasync__action_260_scrolltonodeasync_log_260_3__linear__implicit_return",
          "from": "method:105vz8s:scrolltonodeasync__action_260_scrolltonodeasync_log_260_3__linear",
          "to": "method:105vz8s:scrolltonodeasync__implicit_return",
          "kind": "return",
          "line": 262,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync__jump_unknown_InvokeVoidAsync",
          "fromNodeId": "method:105vz8s:scrolltonodeasync__call_256_InvokeVoidAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "InvokeVoidAsync",
          "line": 256,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "reason": "Call target InvokeVoidAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8899999999999999,
      "lineSpan": {
        "start": 252,
        "end": 262
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 252,
          "summary": "Control-flow fragment extracted for method ScrollToNodeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1qikoos:handleupdate__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1qikoos:handleupdate",
      "ownerSymbolName": "HandleUpdate",
      "entryNodeId": "method:1qikoos:handleupdate__entry",
      "exitNodeIds": [
        "method:1qikoos:handleupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1qikoos:handleupdate__entry",
          "kind": "entry",
          "label": "HandleUpdate entry",
          "line": 264,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Lightweight helper that requests a StateHasChanged invocation asynchronously."
        },
        {
          "id": "method:1qikoos:handleupdate__action_264_ui_refresh_264__linear",
          "kind": "statement",
          "label": "Invoke StateHasChanged",
          "line": 264,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1qikoos:handleupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 264,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1qikoos:handleupdate__entry__method:1qikoos:handleupdate__action_264_ui_refresh_264__linear",
          "from": "method:1qikoos:handleupdate__entry",
          "to": "method:1qikoos:handleupdate__action_264_ui_refresh_264__linear",
          "kind": "next",
          "line": 264,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1qikoos:handleupdate__action_264_ui_refresh_264__linear__implicit_return",
          "from": "method:1qikoos:handleupdate__action_264_ui_refresh_264__linear",
          "to": "method:1qikoos:handleupdate__implicit_return",
          "kind": "return",
          "line": 264,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 264,
        "end": 264
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 264,
          "summary": "Control-flow fragment extracted for method HandleUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1h2dsti:dispose__fragment",
      "ownerFileId": "file:3sb16d:readercanvas-razor",
      "ownerSymbolId": "method:1h2dsti:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:1h2dsti:dispose__entry",
      "exitNodeIds": [
        "method:1h2dsti:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1h2dsti:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 266,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.99,
          "detail": "Unsubscribes all previously registered event handlers to avoid leaks when component is disposed."
        },
        {
          "id": "method:1h2dsti:dispose__action_268_unsubscribe_event_268__linear",
          "kind": "statement",
          "label": "Unsubscribe theme change",
          "line": 268,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "ThemeService.OnThemeChanged -= HandleUpdate"
        },
        {
          "id": "method:1h2dsti:dispose__action_269_unsubscribe_event_269__linear",
          "kind": "statement",
          "label": "Unsubscribe navigation change",
          "line": 269,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "NavigationService.OnNavigationChanged -= OnNavigationChanged"
        },
        {
          "id": "method:1h2dsti:dispose__action_271_unsubscribe_event_271__linear",
          "kind": "statement",
          "label": "Unsubscribe interaction events",
          "line": 271,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "InteractionService.OnScrollToBlockRequested/OnHighlightBlockRequested/OnTextSelected -= handlers"
        },
        {
          "id": "method:1h2dsti:dispose__action_274_unsubscribe_event_274__linear",
          "kind": "statement",
          "label": "Unsubscribe sync progress",
          "line": 274,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7,
          "detail": "SyncService.OnProgressReceived -= HandleSyncProgressReceived"
        },
        {
          "id": "method:1h2dsti:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 275,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1h2dsti:dispose__entry__method:1h2dsti:dispose__action_268_unsubscribe_event_268__linear",
          "from": "method:1h2dsti:dispose__entry",
          "to": "method:1h2dsti:dispose__action_268_unsubscribe_event_268__linear",
          "kind": "next",
          "line": 268,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1h2dsti:dispose__action_268_unsubscribe_event_268__linear__method:1h2dsti:dispose__action_269_unsubscribe_event_269__linear",
          "from": "method:1h2dsti:dispose__action_268_unsubscribe_event_268__linear",
          "to": "method:1h2dsti:dispose__action_269_unsubscribe_event_269__linear",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1h2dsti:dispose__action_269_unsubscribe_event_269__linear__method:1h2dsti:dispose__action_271_unsubscribe_event_271__linear",
          "from": "method:1h2dsti:dispose__action_269_unsubscribe_event_269__linear",
          "to": "method:1h2dsti:dispose__action_271_unsubscribe_event_271__linear",
          "kind": "next",
          "line": 271,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1h2dsti:dispose__action_271_unsubscribe_event_271__linear__method:1h2dsti:dispose__action_274_unsubscribe_event_274__linear",
          "from": "method:1h2dsti:dispose__action_271_unsubscribe_event_271__linear",
          "to": "method:1h2dsti:dispose__action_274_unsubscribe_event_274__linear",
          "kind": "next",
          "line": 274,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1h2dsti:dispose__action_274_unsubscribe_event_274__linear__implicit_return",
          "from": "method:1h2dsti:dispose__action_274_unsubscribe_event_274__linear",
          "to": "method:1h2dsti:dispose__implicit_return",
          "kind": "return",
          "line": 275,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 266,
        "end": 275
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor",
          "line": 266,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:tmysty:render-razor-markup__fragment",
      "ownerFileId": "file:1foudu6:readerfooter-razor",
      "ownerSymbolId": "method:tmysty:render-razor-markup",
      "ownerSymbolName": "Render (Razor markup)",
      "entryNodeId": "method:tmysty:render-razor-markup__entry",
      "exitNodeIds": [
        "method:tmysty:render-razor-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:tmysty:render-razor-markup__entry",
          "kind": "entry",
          "label": "Render (Razor markup) entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.99,
          "detail": "Renders footer HTML: navigation buttons, chapter info, progress bar and meta info; wires button onclicks to navigation service methods and displays computed progress/time/battery."
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition",
          "kind": "condition",
          "label": "NavigationService.CurrentChapterIndex == 0",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "button disabled attribute bound to current index == 0"
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__true",
          "kind": "branch-true",
          "label": "disabled",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__false",
          "kind": "branch-false",
          "label": "enabled",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter",
          "kind": "call",
          "label": "GoToPreviousChapter",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "none (event handler)"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "CurrentChapterIndex (property)",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "integer index used for button disable and display"
        },
        {
          "id": "method:tmysty:render-razor-markup__action_13_ui_binding_13__linear",
          "kind": "statement",
          "label": "Displays chapter title and counts",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "Binds to NavigationService.ChapterTitle and computes (index+1)/TotalChapters"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property_",
          "kind": "call",
          "label": "ChapterTitle (property)",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "string title read for display"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "CurrentChapterIndex (property)",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "integer index used for display"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_TotalChapters_property_",
          "kind": "call",
          "label": "TotalChapters (property)",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "total chapters used for display"
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition",
          "kind": "condition",
          "label": "NavigationService.CurrentChapterIndex >= NavigationService.TotalChapters - 1",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "button disabled attribute bound to last-chapter condition"
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__true",
          "kind": "branch-true",
          "label": "disabled",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__false",
          "kind": "branch-false",
          "label": "enabled",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__call_17_GoToNextChapter",
          "kind": "call",
          "label": "GoToNextChapter",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "none (event handler)"
        },
        {
          "id": "method:tmysty:render-razor-markup__action_23_render_call_23__linear",
          "kind": "statement",
          "label": "Requests progress percent",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "Inline call to CalculateProgress() to set progress-bar width"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_23_CalculateProgress",
          "kind": "call",
          "label": "CalculateProgress",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "no params; returns width percentage"
        },
        {
          "id": "method:tmysty:render-razor-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:tmysty:render-razor-markup__entry__method:tmysty:render-razor-markup__action_8_guard_clause_8__condition",
          "from": "method:tmysty:render-razor-markup__entry",
          "to": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition__method:tmysty:render-razor-markup__action_8_guard_clause_8__true",
          "from": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition",
          "to": "method:tmysty:render-razor-markup__action_8_guard_clause_8__true",
          "kind": "condition-true",
          "label": "disabled",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition__method:tmysty:render-razor-markup__action_8_guard_clause_8__false",
          "from": "method:tmysty:render-razor-markup__action_8_guard_clause_8__condition",
          "to": "method:tmysty:render-razor-markup__action_8_guard_clause_8__false",
          "kind": "condition-false",
          "label": "enabled",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__true__method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "from": "method:tmysty:render-razor-markup__action_8_guard_clause_8__true",
          "to": "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__false__method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "from": "method:tmysty:render-razor-markup__action_8_guard_clause_8__false",
          "to": "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge__call_method:tmysty:render-razor-markup__call_8_GoToPreviousChapter",
          "from": "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
          "to": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter",
          "kind": "call",
          "label": "none (event handler)",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter__call_method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property_",
          "from": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter",
          "to": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "integer index used for button disable and display",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property___method:tmysty:render-razor-markup__action_13_ui_binding_13__linear",
          "from": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property_",
          "to": "method:tmysty:render-razor-markup__action_13_ui_binding_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_13_ui_binding_13__linear__call_method:tmysty:render-razor-markup__call_13_ChapterTitle_property_",
          "from": "method:tmysty:render-razor-markup__action_13_ui_binding_13__linear",
          "to": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property_",
          "kind": "call",
          "label": "string title read for display",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property___call_method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property_",
          "from": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property_",
          "to": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "integer index used for display",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property___call_method:tmysty:render-razor-markup__call_14_TotalChapters_property_",
          "from": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property_",
          "to": "method:tmysty:render-razor-markup__call_14_TotalChapters_property_",
          "kind": "call",
          "label": "total chapters used for display",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_TotalChapters_property___method:tmysty:render-razor-markup__action_17_guard_clause_17__condition",
          "from": "method:tmysty:render-razor-markup__call_14_TotalChapters_property_",
          "to": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition__method:tmysty:render-razor-markup__action_17_guard_clause_17__true",
          "from": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition",
          "to": "method:tmysty:render-razor-markup__action_17_guard_clause_17__true",
          "kind": "condition-true",
          "label": "disabled",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition__method:tmysty:render-razor-markup__action_17_guard_clause_17__false",
          "from": "method:tmysty:render-razor-markup__action_17_guard_clause_17__condition",
          "to": "method:tmysty:render-razor-markup__action_17_guard_clause_17__false",
          "kind": "condition-false",
          "label": "enabled",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__true__method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "from": "method:tmysty:render-razor-markup__action_17_guard_clause_17__true",
          "to": "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__false__method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "from": "method:tmysty:render-razor-markup__action_17_guard_clause_17__false",
          "to": "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge__call_method:tmysty:render-razor-markup__call_17_GoToNextChapter",
          "from": "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge",
          "to": "method:tmysty:render-razor-markup__call_17_GoToNextChapter",
          "kind": "call",
          "label": "none (event handler)",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_17_GoToNextChapter__method:tmysty:render-razor-markup__action_23_render_call_23__linear",
          "from": "method:tmysty:render-razor-markup__call_17_GoToNextChapter",
          "to": "method:tmysty:render-razor-markup__action_23_render_call_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:tmysty:render-razor-markup__action_23_render_call_23__linear__call_method:tmysty:render-razor-markup__call_23_CalculateProgress",
          "from": "method:tmysty:render-razor-markup__action_23_render_call_23__linear",
          "to": "method:tmysty:render-razor-markup__call_23_CalculateProgress",
          "kind": "call",
          "label": "no params; returns width percentage",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:tmysty:render-razor-markup__call_23_CalculateProgress__implicit_return",
          "from": "method:tmysty:render-razor-markup__call_23_CalculateProgress",
          "to": "method:tmysty:render-razor-markup__implicit_return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter__jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_GoToPreviousChapter",
          "fromNodeId": "method:tmysty:render-razor-markup__call_8_GoToPreviousChapter",
          "kind": "call-target",
          "targetNodeId": "method:12odud7:gotopreviouschapter",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "GoToPreviousChapter",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target GoToPreviousChapter resolved to NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_CurrentChapterIndex_property_",
          "fromNodeId": "method:tmysty:render-razor-markup__call_8_CurrentChapterIndex_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "CurrentChapterIndex (property)",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target CurrentChapterIndex (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_ChapterTitle_property_",
          "fromNodeId": "method:tmysty:render-razor-markup__call_13_ChapterTitle_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "ChapterTitle (property)",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target ChapterTitle (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_CurrentChapterIndex_property_",
          "fromNodeId": "method:tmysty:render-razor-markup__call_14_CurrentChapterIndex_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "CurrentChapterIndex (property)",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target CurrentChapterIndex (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_14_TotalChapters_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_TotalChapters_property_",
          "fromNodeId": "method:tmysty:render-razor-markup__call_14_TotalChapters_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "TotalChapters (property)",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target TotalChapters (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_17_GoToNextChapter__jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_GoToNextChapter",
          "fromNodeId": "method:tmysty:render-razor-markup__call_17_GoToNextChapter",
          "kind": "call-target",
          "targetNodeId": "method:1dvbk1u:gotonextchapter",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "GoToNextChapter",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target GoToNextChapter resolved to NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:tmysty:render-razor-markup__call_23_CalculateProgress__jump_NexusReader_UI_Shared_Components_Organisms_ReaderFooter_razor_CalculateProgress",
          "fromNodeId": "method:tmysty:render-razor-markup__call_23_CalculateProgress",
          "kind": "call-target",
          "targetNodeId": "method:1ak3em3:calculateprogress",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "targetHint": "CalculateProgress",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target CalculateProgress resolved to NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:tmysty:render-razor-markup__action_8_guard_clause_8__merge",
        "method:tmysty:render-razor-markup__action_17_guard_clause_17__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 5,
        "end": 31
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 5,
          "summary": "Control-flow fragment extracted for method Render (Razor markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1se6qsi:oninitialized__fragment",
      "ownerFileId": "file:1foudu6:readerfooter-razor",
      "ownerSymbolId": "method:1se6qsi:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:1se6qsi:oninitialized__entry",
      "exitNodeIds": [
        "method:1se6qsi:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1se6qsi:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.99,
          "detail": "Component lifecycle init: subscribes to navigation change events to refresh UI."
        },
        {
          "id": "method:1se6qsi:oninitialized__action_36_event_subscribe_36__linear",
          "kind": "statement",
          "label": "Subscribe to navigation changes",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "NavigationService.OnNavigationChanged += HandleNavigationChanged"
        },
        {
          "id": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event_",
          "kind": "call",
          "label": "OnNavigationChanged (event)",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "adds HandleNavigationChanged delegate"
        },
        {
          "id": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged",
          "kind": "call",
          "label": "HandleNavigationChanged",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "delegate reference assigned to event"
        },
        {
          "id": "method:1se6qsi:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1se6qsi:oninitialized__entry__method:1se6qsi:oninitialized__action_36_event_subscribe_36__linear",
          "from": "method:1se6qsi:oninitialized__entry",
          "to": "method:1se6qsi:oninitialized__action_36_event_subscribe_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1se6qsi:oninitialized__action_36_event_subscribe_36__linear__call_method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event_",
          "from": "method:1se6qsi:oninitialized__action_36_event_subscribe_36__linear",
          "to": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event_",
          "kind": "call",
          "label": "adds HandleNavigationChanged delegate",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event___call_method:1se6qsi:oninitialized__call_36_HandleNavigationChanged",
          "from": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event_",
          "to": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged",
          "kind": "call",
          "label": "delegate reference assigned to event",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged__implicit_return",
          "from": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged",
          "to": "method:1se6qsi:oninitialized__implicit_return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_OnNavigationChanged_event_",
          "fromNodeId": "method:1se6qsi:oninitialized__call_36_OnNavigationChanged_event_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "OnNavigationChanged (event)",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target OnNavigationChanged (event) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged__jump_NexusReader_UI_Shared_Components_Organisms_ReaderFooter_razor_HandleNavigationChanged",
          "fromNodeId": "method:1se6qsi:oninitialized__call_36_HandleNavigationChanged",
          "kind": "call-target",
          "targetNodeId": "method:1ac31ry:handlenavigationchanged",
          "targetPath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "targetHint": "HandleNavigationChanged",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target HandleNavigationChanged resolved to NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 34,
        "end": 37
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 34,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ac31ry:handlenavigationchanged__fragment",
      "ownerFileId": "file:1foudu6:readerfooter-razor",
      "ownerSymbolId": "method:1ac31ry:handlenavigationchanged",
      "ownerSymbolName": "HandleNavigationChanged",
      "entryNodeId": "method:1ac31ry:handlenavigationchanged__entry",
      "exitNodeIds": [
        "method:1ac31ry:handlenavigationchanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ac31ry:handlenavigationchanged__entry",
          "kind": "entry",
          "label": "HandleNavigationChanged entry",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.99,
          "detail": "Async event handler invoked on navigation changes; requests a UI re-render on the component thread."
        },
        {
          "id": "method:1ac31ry:handlenavigationchanged__action_41_handlenavigationchanged_await_41_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1ac31ry:handlenavigationchanged__action_41_ui_update_41__linear",
          "kind": "statement",
          "label": "Trigger component re-render",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "await InvokeAsync(StateHasChanged) to update UI in Blazor synchronization context"
        },
        {
          "id": "method:1ac31ry:handlenavigationchanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ac31ry:handlenavigationchanged__entry__method:1ac31ry:handlenavigationchanged__action_41_handlenavigationchanged_await_41_0__await",
          "from": "method:1ac31ry:handlenavigationchanged__entry",
          "to": "method:1ac31ry:handlenavigationchanged__action_41_handlenavigationchanged_await_41_0__await",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ac31ry:handlenavigationchanged__action_41_handlenavigationchanged_await_41_0__await__method:1ac31ry:handlenavigationchanged__action_41_ui_update_41__linear",
          "from": "method:1ac31ry:handlenavigationchanged__action_41_handlenavigationchanged_await_41_0__await",
          "to": "method:1ac31ry:handlenavigationchanged__action_41_ui_update_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ac31ry:handlenavigationchanged__action_41_ui_update_41__linear__implicit_return",
          "from": "method:1ac31ry:handlenavigationchanged__action_41_ui_update_41__linear",
          "to": "method:1ac31ry:handlenavigationchanged__implicit_return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 39,
        "end": 42
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 39,
          "summary": "Control-flow fragment extracted for method HandleNavigationChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ak3em3:calculateprogress__fragment",
      "ownerFileId": "file:1foudu6:readerfooter-razor",
      "ownerSymbolId": "method:1ak3em3:calculateprogress",
      "ownerSymbolName": "CalculateProgress",
      "entryNodeId": "method:1ak3em3:calculateprogress__entry",
      "exitNodeIds": [
        "method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return",
        "method:1ak3em3:calculateprogress__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ak3em3:calculateprogress__entry",
          "kind": "entry",
          "label": "CalculateProgress entry",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.99,
          "detail": "Computes and returns the reader progress percentage based on current chapter index and total chapters."
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition",
          "kind": "condition",
          "label": "NavigationService.TotalChapters <= 1",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "Returns 0% when there is one or no chapter to avoid division by zero and meaningless progress"
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__true",
          "kind": "branch-true",
          "label": "return 0",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "kind": "statement",
          "label": "merge",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition",
          "kind": "condition",
          "label": "NavigationService.TotalChapters <= 1",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9,
          "detail": "if (NavigationService.TotalChapters <= 1) return 0;"
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property_",
          "kind": "call",
          "label": "TotalChapters (property)",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "reads total chapter count"
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "return (int)((NavigationService.CurrentChapterIndex / (float)(NavigationService.TotalChapters - 1)) * 100);"
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_47_calculation_47__linear",
          "kind": "statement",
          "label": "Compute percentage",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "Uses CurrentChapterIndex / (TotalChapters - 1) * 100 and casts to int"
        },
        {
          "id": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "CurrentChapterIndex (property)",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "reads current chapter index used in calculation"
        },
        {
          "id": "method:1ak3em3:calculateprogress__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ak3em3:calculateprogress__entry__method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition",
          "from": "method:1ak3em3:calculateprogress__entry",
          "to": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition__method:1ak3em3:calculateprogress__action_46_guard_clause_46__true",
          "from": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition",
          "to": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__true",
          "kind": "condition-true",
          "label": "return 0",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition__method:1ak3em3:calculateprogress__action_46_guard_clause_46__false",
          "from": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__condition",
          "to": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__true__method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "from": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__true",
          "to": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__false__method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "from": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__false",
          "to": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge__method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition",
          "from": "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
          "to": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition__method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__true",
          "from": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition",
          "to": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition__method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__false",
          "from": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__condition",
          "to": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__true__method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "from": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__true",
          "to": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__false__method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "from": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__false",
          "to": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.9
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge__call_method:1ak3em3:calculateprogress__call_46_TotalChapters_property_",
          "from": "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge",
          "to": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property_",
          "kind": "call",
          "label": "reads total chapter count",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property___method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return",
          "from": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property_",
          "to": "method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return__method:1ak3em3:calculateprogress__action_47_calculation_47__linear",
          "from": "method:1ak3em3:calculateprogress__action_47_calculateprogress_return_47_1__return",
          "to": "method:1ak3em3:calculateprogress__action_47_calculation_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ak3em3:calculateprogress__action_47_calculation_47__linear__call_method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property_",
          "from": "method:1ak3em3:calculateprogress__action_47_calculation_47__linear",
          "to": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property_",
          "kind": "call",
          "label": "reads current chapter index used in calculation",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property___implicit_return",
          "from": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property_",
          "to": "method:1ak3em3:calculateprogress__implicit_return",
          "kind": "return",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_TotalChapters_property_",
          "fromNodeId": "method:1ak3em3:calculateprogress__call_46_TotalChapters_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "TotalChapters (property)",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target TotalChapters (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_CurrentChapterIndex_property_",
          "fromNodeId": "method:1ak3em3:calculateprogress__call_47_CurrentChapterIndex_property_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "CurrentChapterIndex (property)",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target CurrentChapterIndex (property) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ak3em3:calculateprogress__action_46_guard_clause_46__merge",
        "method:1ak3em3:calculateprogress__action_46_calculateprogress_guard_clause_46_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 44,
        "end": 48
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 44,
          "summary": "Control-flow fragment extracted for method CalculateProgress.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:150wzsg:dispose__fragment",
      "ownerFileId": "file:1foudu6:readerfooter-razor",
      "ownerSymbolId": "method:150wzsg:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:150wzsg:dispose__entry",
      "exitNodeIds": [
        "method:150wzsg:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:150wzsg:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.99,
          "detail": "Lifecycle cleanup: unsubscribes event handlers to avoid memory leaks."
        },
        {
          "id": "method:150wzsg:dispose__action_52_event_unsubscribe_52__linear",
          "kind": "statement",
          "label": "Unsubscribe navigation change handler",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7,
          "detail": "NavigationService.OnNavigationChanged -= HandleNavigationChanged"
        },
        {
          "id": "method:150wzsg:dispose__call_52_OnNavigationChanged_event_",
          "kind": "call",
          "label": "OnNavigationChanged (event)",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88,
          "detail": "removes HandleNavigationChanged delegate"
        },
        {
          "id": "method:150wzsg:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:150wzsg:dispose__entry__method:150wzsg:dispose__action_52_event_unsubscribe_52__linear",
          "from": "method:150wzsg:dispose__entry",
          "to": "method:150wzsg:dispose__action_52_event_unsubscribe_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.7
        },
        {
          "id": "method:150wzsg:dispose__action_52_event_unsubscribe_52__linear__call_method:150wzsg:dispose__call_52_OnNavigationChanged_event_",
          "from": "method:150wzsg:dispose__action_52_event_unsubscribe_52__linear",
          "to": "method:150wzsg:dispose__call_52_OnNavigationChanged_event_",
          "kind": "call",
          "label": "removes HandleNavigationChanged delegate",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.88
        },
        {
          "id": "method:150wzsg:dispose__call_52_OnNavigationChanged_event___implicit_return",
          "from": "method:150wzsg:dispose__call_52_OnNavigationChanged_event_",
          "to": "method:150wzsg:dispose__implicit_return",
          "kind": "return",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:150wzsg:dispose__call_52_OnNavigationChanged_event___jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_OnNavigationChanged_event_",
          "fromNodeId": "method:150wzsg:dispose__call_52_OnNavigationChanged_event_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "OnNavigationChanged (event)",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "reason": "Call target OnNavigationChanged (event) in NexusReader.UI.Shared/Services/IReaderNavigationService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 50,
        "end": 53
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor",
          "line": 50,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:upe53r:oninitialized__fragment",
      "ownerFileId": "file:82rsqa:redirecttologin-razor",
      "ownerSymbolId": "method:upe53r:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:upe53r:oninitialized__entry",
      "exitNodeIds": [
        "method:upe53r:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:upe53r:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 4,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.99,
          "detail": "Component lifecycle method that computes a relative returnUrl and redirects the browser to the login page, appending returnUrl if present."
        },
        {
          "id": "method:upe53r:oninitialized__action_6_external_call_6__linear",
          "kind": "http-call",
          "label": "Read current URI and compute base-relative path",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7,
          "detail": "var returnUrl = NavigationManager.ToBaseRelativePath(NavigationManager.Uri) — reads NavigationManager.Uri and calls ToBaseRelativePath"
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78,
          "detail": "if (string.IsNullOrWhiteSpace(returnUrl))"
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7,
          "detail": "If returnUrl is empty -> NavigateTo('/account/login'); else -> NavigateTo('/account/login?returnUrl={escaped}')"
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__true",
          "kind": "branch-true",
          "label": "navigate to /account/login (no returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__false",
          "kind": "branch-false",
          "label": "navigate to /account/login?returnUrl=... (with escaped returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_9_external_call_9__linear",
          "kind": "http-call",
          "label": "Navigate to login without returnUrl",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/account/login\")"
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_13_external_call_13__linear",
          "kind": "http-call",
          "label": "Navigate to login with encoded returnUrl",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo($\"/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}\") — uses Uri.EscapeDataString to encode the return URL"
        },
        {
          "id": "method:upe53r:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:upe53r:oninitialized__entry__method:upe53r:oninitialized__action_6_external_call_6__linear",
          "from": "method:upe53r:oninitialized__entry",
          "to": "method:upe53r:oninitialized__action_6_external_call_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_6_external_call_6__linear__method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition",
          "from": "method:upe53r:oninitialized__action_6_external_call_6__linear",
          "to": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition__method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__true",
          "from": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition",
          "to": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition__method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__false",
          "from": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__condition",
          "to": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__true__method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "from": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__true",
          "to": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__false__method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "from": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__false",
          "to": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.78
        },
        {
          "id": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge__method:upe53r:oninitialized__action_7_guard_clause_7__condition",
          "from": "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
          "to": "method:upe53r:oninitialized__action_7_guard_clause_7__condition",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__condition__method:upe53r:oninitialized__action_7_guard_clause_7__true",
          "from": "method:upe53r:oninitialized__action_7_guard_clause_7__condition",
          "to": "method:upe53r:oninitialized__action_7_guard_clause_7__true",
          "kind": "condition-true",
          "label": "navigate to /account/login (no returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__condition__method:upe53r:oninitialized__action_7_guard_clause_7__false",
          "from": "method:upe53r:oninitialized__action_7_guard_clause_7__condition",
          "to": "method:upe53r:oninitialized__action_7_guard_clause_7__false",
          "kind": "condition-false",
          "label": "navigate to /account/login?returnUrl=... (with escaped returnUrl)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__true__method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "from": "method:upe53r:oninitialized__action_7_guard_clause_7__true",
          "to": "method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__false__method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "from": "method:upe53r:oninitialized__action_7_guard_clause_7__false",
          "to": "method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_7_guard_clause_7__merge__method:upe53r:oninitialized__action_9_external_call_9__linear",
          "from": "method:upe53r:oninitialized__action_7_guard_clause_7__merge",
          "to": "method:upe53r:oninitialized__action_9_external_call_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_9_external_call_9__linear__method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition",
          "from": "method:upe53r:oninitialized__action_9_external_call_9__linear",
          "to": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition",
          "kind": "fallback",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition__method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__true",
          "from": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition",
          "to": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition__method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__false",
          "from": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__condition",
          "to": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__true__method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "from": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__true",
          "to": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__false__method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "from": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__false",
          "to": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.84
        },
        {
          "id": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge__method:upe53r:oninitialized__action_13_external_call_13__linear",
          "from": "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge",
          "to": "method:upe53r:oninitialized__action_13_external_call_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.7
        },
        {
          "id": "method:upe53r:oninitialized__action_13_external_call_13__linear__implicit_return",
          "from": "method:upe53r:oninitialized__action_13_external_call_13__linear",
          "to": "method:upe53r:oninitialized__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:upe53r:oninitialized__action_7_oninitialized_branch_7_0__merge",
        "method:upe53r:oninitialized__action_7_guard_clause_7__merge",
        "method:upe53r:oninitialized__action_11_oninitialized_fallback_11_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 4,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor",
          "line": 4,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:p4hxqo:oninitializedasync__fragment",
      "ownerFileId": "file:1ain1yo:mainhublayout-razor",
      "ownerSymbolId": "method:p4hxqo:oninitializedasync",
      "ownerSymbolName": "OnInitializedAsync",
      "entryNodeId": "method:p4hxqo:oninitializedasync__entry",
      "exitNodeIds": [
        "method:p4hxqo:oninitializedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:p4hxqo:oninitializedasync__entry",
          "kind": "entry",
          "label": "OnInitializedAsync entry",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.99,
          "detail": "Component initialization: avoids duplicate syncs, checks authentication state, and attempts to sync profile from server if the user is not authenticated."
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition",
          "kind": "condition",
          "label": "_isSyncing",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "if (_isSyncing) return;"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__true",
          "kind": "branch-true",
          "label": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "kind": "statement",
          "label": "merge",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition",
          "kind": "condition",
          "label": "_isSyncing",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9,
          "detail": "if (_isSyncing) return;"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_98_oninitializedasync_await_98_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81,
          "detail": "var authState = await AuthStateProvider.GetAuthenticationStateAsync();"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_98_external_call_98__linear",
          "kind": "http-call",
          "label": "Read authentication state",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "await AuthStateProvider.GetAuthenticationStateAsync() (framework call)"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition",
          "kind": "condition",
          "label": "!authState.User.Identity?.IsAuthenticated ?? true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "Sets _isSyncing and attempts a server-side profile sync to reconcile cookie/session state."
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__true",
          "kind": "branch-true",
          "label": "set _isSyncing true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__false",
          "kind": "branch-false",
          "label": "call IdentityService.GetProfileAsync",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition",
          "kind": "condition",
          "label": "!authState.User.Identity?.IsAuthenticated ?? true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78,
          "detail": "if (!authState.User.Identity?.IsAuthenticated ?? true)"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_101_state_change_101__linear",
          "kind": "statement",
          "label": "Mark sync in progress",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "_isSyncing = true"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_103_oninitializedasync_await_103_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81,
          "detail": "await IdentityService.GetProfileAsync();"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_103_external_call_103__linear",
          "kind": "http-call",
          "label": "Attempt to fetch profile from server",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.GetProfileAsync(); (project service)"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:p4hxqo:oninitializedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:p4hxqo:oninitializedasync__entry__method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition",
          "from": "method:p4hxqo:oninitializedasync__entry",
          "to": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition__method:p4hxqo:oninitializedasync__action_96_guard_clause_96__true",
          "from": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition",
          "to": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__true",
          "kind": "condition-true",
          "label": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition__method:p4hxqo:oninitializedasync__action_96_guard_clause_96__false",
          "from": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__condition",
          "to": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__true__method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "from": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__true",
          "to": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__false__method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "from": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__false",
          "to": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge__method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition",
          "from": "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
          "to": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition__method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__true",
          "from": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition",
          "to": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition__method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__false",
          "from": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__condition",
          "to": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__true__method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "from": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__true",
          "to": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__false__method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "from": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__false",
          "to": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.9
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge__method:p4hxqo:oninitializedasync__action_98_oninitializedasync_await_98_1__await",
          "from": "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
          "to": "method:p4hxqo:oninitializedasync__action_98_oninitializedasync_await_98_1__await",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_98_oninitializedasync_await_98_1__await__method:p4hxqo:oninitializedasync__action_98_external_call_98__linear",
          "from": "method:p4hxqo:oninitializedasync__action_98_oninitializedasync_await_98_1__await",
          "to": "method:p4hxqo:oninitializedasync__action_98_external_call_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_98_external_call_98__linear__method:p4hxqo:oninitializedasync__action_99_branch_99__condition",
          "from": "method:p4hxqo:oninitializedasync__action_98_external_call_98__linear",
          "to": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition__method:p4hxqo:oninitializedasync__action_99_branch_99__true",
          "from": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition",
          "to": "method:p4hxqo:oninitializedasync__action_99_branch_99__true",
          "kind": "condition-true",
          "label": "set _isSyncing true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition__method:p4hxqo:oninitializedasync__action_99_branch_99__false",
          "from": "method:p4hxqo:oninitializedasync__action_99_branch_99__condition",
          "to": "method:p4hxqo:oninitializedasync__action_99_branch_99__false",
          "kind": "condition-false",
          "label": "call IdentityService.GetProfileAsync",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__true__method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "from": "method:p4hxqo:oninitializedasync__action_99_branch_99__true",
          "to": "method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__false__method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "from": "method:p4hxqo:oninitializedasync__action_99_branch_99__false",
          "to": "method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_branch_99__merge__method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition",
          "from": "method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
          "to": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition__method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__true",
          "from": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition",
          "to": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition__method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__false",
          "from": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__condition",
          "to": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__true__method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "from": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__true",
          "to": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__false__method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "from": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__false",
          "to": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge__method:p4hxqo:oninitializedasync__action_101_state_change_101__linear",
          "from": "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge",
          "to": "method:p4hxqo:oninitializedasync__action_101_state_change_101__linear",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_101_state_change_101__linear__method:p4hxqo:oninitializedasync__action_103_oninitializedasync_await_103_3__await",
          "from": "method:p4hxqo:oninitializedasync__action_101_state_change_101__linear",
          "to": "method:p4hxqo:oninitializedasync__action_103_oninitializedasync_await_103_3__await",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_103_oninitializedasync_await_103_3__await__method:p4hxqo:oninitializedasync__action_103_external_call_103__linear",
          "from": "method:p4hxqo:oninitializedasync__action_103_oninitializedasync_await_103_3__await",
          "to": "method:p4hxqo:oninitializedasync__action_103_external_call_103__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p4hxqo:oninitializedasync__action_103_external_call_103__linear__call_method:p4hxqo:oninitializedasync__call_103_GetProfileAsync",
          "from": "method:p4hxqo:oninitializedasync__action_103_external_call_103__linear",
          "to": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync",
          "kind": "call",
          "label": "none",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync__implicit_return",
          "from": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync",
          "to": "method:p4hxqo:oninitializedasync__implicit_return",
          "kind": "return",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync__jump_NexusReader_Application_Abstractions_Services_IIdentityService_cs_GetProfileAsync",
          "fromNodeId": "method:p4hxqo:oninitializedasync__call_103_GetProfileAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/IIdentityService.cs",
          "targetHint": "GetProfileAsync",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "reason": "Call target GetProfileAsync in NexusReader.Application.Abstractions.Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:p4hxqo:oninitializedasync__action_96_guard_clause_96__merge",
        "method:p4hxqo:oninitializedasync__action_96_oninitializedasync_guard_clause_96_0__merge",
        "method:p4hxqo:oninitializedasync__action_99_branch_99__merge",
        "method:p4hxqo:oninitializedasync__action_99_oninitializedasync_branch_99_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 94,
        "end": 105
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 94,
          "summary": "Control-flow fragment extracted for method OnInitializedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:64smty:handlelogout__fragment",
      "ownerFileId": "file:1ain1yo:mainhublayout-razor",
      "ownerSymbolId": "method:64smty:handlelogout",
      "ownerSymbolName": "HandleLogout",
      "entryNodeId": "method:64smty:handlelogout__entry",
      "exitNodeIds": [
        "method:64smty:handlelogout__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:64smty:handlelogout__entry",
          "kind": "entry",
          "label": "HandleLogout entry",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.99,
          "detail": "Performs logout via the identity service and redirects the browser to a logout form route."
        },
        {
          "id": "method:64smty:handlelogout__action_109_handlelogout_await_109_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81,
          "detail": "await IdentityService.LogoutAsync();"
        },
        {
          "id": "method:64smty:handlelogout__action_109_external_call_109__linear",
          "kind": "http-call",
          "label": "Invoke logout on identity service",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.LogoutAsync(); (project service)"
        },
        {
          "id": "method:64smty:handlelogout__call_109_LogoutAsync",
          "kind": "call",
          "label": "LogoutAsync",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:64smty:handlelogout__action_110_external_call_110__linear",
          "kind": "http-call",
          "label": "Navigate to logout page",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/account/logout-form\", true) (framework navigation)"
        },
        {
          "id": "method:64smty:handlelogout__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:64smty:handlelogout__entry__method:64smty:handlelogout__action_109_handlelogout_await_109_0__await",
          "from": "method:64smty:handlelogout__entry",
          "to": "method:64smty:handlelogout__action_109_handlelogout_await_109_0__await",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.81
        },
        {
          "id": "method:64smty:handlelogout__action_109_handlelogout_await_109_0__await__method:64smty:handlelogout__action_109_external_call_109__linear",
          "from": "method:64smty:handlelogout__action_109_handlelogout_await_109_0__await",
          "to": "method:64smty:handlelogout__action_109_external_call_109__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:64smty:handlelogout__action_109_external_call_109__linear__call_method:64smty:handlelogout__call_109_LogoutAsync",
          "from": "method:64smty:handlelogout__action_109_external_call_109__linear",
          "to": "method:64smty:handlelogout__call_109_LogoutAsync",
          "kind": "call",
          "label": "none",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:64smty:handlelogout__call_109_LogoutAsync__method:64smty:handlelogout__action_110_external_call_110__linear",
          "from": "method:64smty:handlelogout__call_109_LogoutAsync",
          "to": "method:64smty:handlelogout__action_110_external_call_110__linear",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:64smty:handlelogout__action_110_external_call_110__linear__implicit_return",
          "from": "method:64smty:handlelogout__action_110_external_call_110__linear",
          "to": "method:64smty:handlelogout__implicit_return",
          "kind": "return",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:64smty:handlelogout__call_109_LogoutAsync__jump_NexusReader_Application_Abstractions_Services_IIdentityService_cs_LogoutAsync",
          "fromNodeId": "method:64smty:handlelogout__call_109_LogoutAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/IIdentityService.cs",
          "targetHint": "LogoutAsync",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "reason": "Call target LogoutAsync in NexusReader.Application.Abstractions.Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 107,
        "end": 111
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor",
          "line": 107,
          "summary": "Control-flow fragment extracted for method HandleLogout.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:11o3hgs:oninitialized__fragment",
      "ownerFileId": "file:mm1vnb:readerlayout-razor",
      "ownerSymbolId": "method:11o3hgs:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:11o3hgs:oninitialized__entry",
      "exitNodeIds": [
        "method:11o3hgs:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:11o3hgs:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.99,
          "detail": "Component initialization: subscribes to FocusMode and Quiz update events and determines device type to set platform CSS class."
        },
        {
          "id": "method:11o3hgs:oninitialized__action_75_event_subscribe_75__linear",
          "kind": "statement",
          "label": "Subscribe to focus mode changes",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged += HandleUpdate"
        },
        {
          "id": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "kind": "call",
          "label": "FocusMode.OnFocusModeChanged += HandleUpdate (event subscribe)",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88,
          "detail": "delegate HandleUpdate"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_76_event_subscribe_76__linear",
          "kind": "statement",
          "label": "Subscribe to quiz updates",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "QuizService.OnQuizUpdated += HandleUpdate"
        },
        {
          "id": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "kind": "call",
          "label": "QuizService.OnQuizUpdated += HandleUpdate (event subscribe)",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88,
          "detail": "delegate HandleUpdate"
        },
        {
          "id": "method:11o3hgs:oninitialized__call_78_GetDeviceContext",
          "kind": "call",
          "label": "GetDeviceContext",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88,
          "detail": "no params; returns context with IsSuccess and Value.DeviceType"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_repository_read_79_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86,
          "detail": "if (context.IsSuccess)"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition",
          "kind": "condition",
          "label": "context.IsSuccess",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78,
          "detail": "if (context.IsSuccess)"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition",
          "kind": "condition",
          "label": "context.IsSuccess",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "if (context.IsSuccess) { map DeviceType to _isMobile and set _platformClass }"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__true",
          "kind": "branch-true",
          "label": "apply device type mapping",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_oninitialized_repository_read_81_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86,
          "detail": "_isMobile = context.Value.DeviceType switch"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__condition",
          "kind": "condition",
          "label": "Device type mapping",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "switch on context.Value.DeviceType: Phone/Tablet => _isMobile true; otherwise false"
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__true",
          "kind": "branch-true",
          "label": "true",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__false",
          "kind": "branch-false",
          "label": "false",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "kind": "statement",
          "label": "merge",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_87_state_mutation_87__linear",
          "kind": "statement",
          "label": "Set platform CSS class",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "_platformClass = _isMobile ? \"platform-mobile\" : \"platform-desktop\""
        },
        {
          "id": "method:11o3hgs:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:11o3hgs:oninitialized__entry__method:11o3hgs:oninitialized__action_75_event_subscribe_75__linear",
          "from": "method:11o3hgs:oninitialized__entry",
          "to": "method:11o3hgs:oninitialized__action_75_event_subscribe_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_75_event_subscribe_75__linear__call_method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "from": "method:11o3hgs:oninitialized__action_75_event_subscribe_75__linear",
          "to": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "kind": "call",
          "label": "delegate HandleUpdate",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe___method:11o3hgs:oninitialized__action_76_event_subscribe_76__linear",
          "from": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "to": "method:11o3hgs:oninitialized__action_76_event_subscribe_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_76_event_subscribe_76__linear__call_method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "from": "method:11o3hgs:oninitialized__action_76_event_subscribe_76__linear",
          "to": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "kind": "call",
          "label": "delegate HandleUpdate",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe___call_method:11o3hgs:oninitialized__call_78_GetDeviceContext",
          "from": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "to": "method:11o3hgs:oninitialized__call_78_GetDeviceContext",
          "kind": "call",
          "label": "no params; returns context with IsSuccess and Value.DeviceType",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:11o3hgs:oninitialized__call_78_GetDeviceContext__method:11o3hgs:oninitialized__action_79_oninitialized_repository_read_79_1__linear",
          "from": "method:11o3hgs:oninitialized__call_78_GetDeviceContext",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_repository_read_79_1__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_repository_read_79_1__linear__method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_repository_read_79_1__linear",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition__method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__true",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition__method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__false",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__condition",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__true__method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__true",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__false__method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__false",
          "to": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge__method:11o3hgs:oninitialized__action_79_guard_clause_79__condition",
          "from": "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
          "to": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition__method:11o3hgs:oninitialized__action_79_guard_clause_79__true",
          "from": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition",
          "to": "method:11o3hgs:oninitialized__action_79_guard_clause_79__true",
          "kind": "condition-true",
          "label": "apply device type mapping",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition__method:11o3hgs:oninitialized__action_79_guard_clause_79__false",
          "from": "method:11o3hgs:oninitialized__action_79_guard_clause_79__condition",
          "to": "method:11o3hgs:oninitialized__action_79_guard_clause_79__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__true__method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "from": "method:11o3hgs:oninitialized__action_79_guard_clause_79__true",
          "to": "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__false__method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "from": "method:11o3hgs:oninitialized__action_79_guard_clause_79__false",
          "to": "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge__method:11o3hgs:oninitialized__action_81_oninitialized_repository_read_81_2__linear",
          "from": "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
          "to": "method:11o3hgs:oninitialized__action_81_oninitialized_repository_read_81_2__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_oninitialized_repository_read_81_2__linear__method:11o3hgs:oninitialized__action_81_branch_81__condition",
          "from": "method:11o3hgs:oninitialized__action_81_oninitialized_repository_read_81_2__linear",
          "to": "method:11o3hgs:oninitialized__action_81_branch_81__condition",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__condition__method:11o3hgs:oninitialized__action_81_branch_81__true",
          "from": "method:11o3hgs:oninitialized__action_81_branch_81__condition",
          "to": "method:11o3hgs:oninitialized__action_81_branch_81__true",
          "kind": "condition-true",
          "label": "true",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__condition__method:11o3hgs:oninitialized__action_81_branch_81__false",
          "from": "method:11o3hgs:oninitialized__action_81_branch_81__condition",
          "to": "method:11o3hgs:oninitialized__action_81_branch_81__false",
          "kind": "condition-false",
          "label": "false",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__true__method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "from": "method:11o3hgs:oninitialized__action_81_branch_81__true",
          "to": "method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__false__method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "from": "method:11o3hgs:oninitialized__action_81_branch_81__false",
          "to": "method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_81_branch_81__merge__method:11o3hgs:oninitialized__action_87_state_mutation_87__linear",
          "from": "method:11o3hgs:oninitialized__action_81_branch_81__merge",
          "to": "method:11o3hgs:oninitialized__action_87_state_mutation_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:11o3hgs:oninitialized__action_87_state_mutation_87__linear__implicit_return",
          "from": "method:11o3hgs:oninitialized__action_87_state_mutation_87__linear",
          "to": "method:11o3hgs:oninitialized__implicit_return",
          "kind": "return",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe___jump_unknown_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "fromNodeId": "method:11o3hgs:oninitialized__call_75_FocusMode_OnFocusModeChanged_HandleUpdate_event_subscribe_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "FocusMode.OnFocusModeChanged += HandleUpdate (event subscribe)",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "reason": "Call target FocusMode.OnFocusModeChanged += HandleUpdate (event subscribe) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe___jump_unknown_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "fromNodeId": "method:11o3hgs:oninitialized__call_76_QuizService_OnQuizUpdated_HandleUpdate_event_subscribe_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QuizService.OnQuizUpdated += HandleUpdate (event subscribe)",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "reason": "Call target QuizService.OnQuizUpdated += HandleUpdate (event subscribe) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:11o3hgs:oninitialized__call_78_GetDeviceContext__jump_NexusReader_Application_Abstractions_Services_unknown_path__GetDeviceContext",
          "fromNodeId": "method:11o3hgs:oninitialized__call_78_GetDeviceContext",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services (unknown path)",
          "targetHint": "GetDeviceContext",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "reason": "Call target GetDeviceContext in NexusReader.Application.Abstractions.Services (unknown path) could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:11o3hgs:oninitialized__action_79_oninitialized_branch_79_0__merge",
        "method:11o3hgs:oninitialized__action_79_guard_clause_79__merge",
        "method:11o3hgs:oninitialized__action_81_branch_81__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 73,
        "end": 89
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 73,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1r68c5i:onafterrenderasync__fragment",
      "ownerFileId": "file:mm1vnb:readerlayout-razor",
      "ownerSymbolId": "method:1r68c5i:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:1r68c5i:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:1r68c5i:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1r68c5i:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.99,
          "detail": "After-render lifecycle: on first render, attempts to import a JS module and initialize a resizer; logs on failure."
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition",
          "kind": "condition",
          "label": "firstRender == true",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "if (firstRender) { ... }"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__true",
          "kind": "branch-true",
          "label": "initialize JS resizer",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "kind": "statement",
          "label": "merge",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_97_try_catch_97__linear",
          "kind": "statement",
          "label": "JS interop initialization with error handling",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "try { import JS module and invoke initResizer } catch (Exception ex) { Logger.LogError(...) }"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_97_onafterrenderasync_try_97_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_99_onafterrenderasync_await_99_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.81,
          "detail": "var module = await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/layoutResizer.js\");"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_99_external_call_99__linear",
          "kind": "http-call",
          "label": "Import JS module and call init function",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/.../layoutResizer.js\"); then module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\") (JS interop)"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_100_onafterrenderasync_await_100_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.81,
          "detail": "await module.InvokeVoidAsync(\"initResizer\", \".app-container\", \"#sidebar-resizer\", \"--sidebar-width\");"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_102_onafterrenderasync_catch_102_4__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_104_onafterrenderasync_log_104_5__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.92,
          "detail": "Logger.LogError(ex, \"Failed to initialize layout resizer JS module.\");"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_104_logging_104__linear",
          "kind": "statement",
          "label": "Log JS initialization failure",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "Logger.LogError(ex, \"Failed to initialize layout resizer JS module.\"); (fallback on exception)"
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1r68c5i:onafterrenderasync__entry__method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition",
          "from": "method:1r68c5i:onafterrenderasync__entry",
          "to": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition__method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__true",
          "from": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition",
          "to": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__true",
          "kind": "condition-true",
          "label": "initialize JS resizer",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition__method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__false",
          "from": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__condition",
          "to": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__true__method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "from": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__true",
          "to": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__false__method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "from": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__false",
          "to": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge__method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition",
          "from": "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
          "to": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition__method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__true",
          "from": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition",
          "to": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition__method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__false",
          "from": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__condition",
          "to": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__true__method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "from": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__true",
          "to": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__false__method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "from": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__false",
          "to": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge__method:1r68c5i:onafterrenderasync__action_97_try_catch_97__linear",
          "from": "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge",
          "to": "method:1r68c5i:onafterrenderasync__action_97_try_catch_97__linear",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_97_try_catch_97__linear__method:1r68c5i:onafterrenderasync__action_97_onafterrenderasync_try_97_1__try",
          "from": "method:1r68c5i:onafterrenderasync__action_97_try_catch_97__linear",
          "to": "method:1r68c5i:onafterrenderasync__action_97_onafterrenderasync_try_97_1__try",
          "kind": "next",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_97_onafterrenderasync_try_97_1__try__method:1r68c5i:onafterrenderasync__action_99_onafterrenderasync_await_99_2__await",
          "from": "method:1r68c5i:onafterrenderasync__action_97_onafterrenderasync_try_97_1__try",
          "to": "method:1r68c5i:onafterrenderasync__action_99_onafterrenderasync_await_99_2__await",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_99_onafterrenderasync_await_99_2__await__method:1r68c5i:onafterrenderasync__action_99_external_call_99__linear",
          "from": "method:1r68c5i:onafterrenderasync__action_99_onafterrenderasync_await_99_2__await",
          "to": "method:1r68c5i:onafterrenderasync__action_99_external_call_99__linear",
          "kind": "next",
          "line": 99,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_99_external_call_99__linear__method:1r68c5i:onafterrenderasync__action_100_onafterrenderasync_await_100_3__await",
          "from": "method:1r68c5i:onafterrenderasync__action_99_external_call_99__linear",
          "to": "method:1r68c5i:onafterrenderasync__action_100_onafterrenderasync_await_100_3__await",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_100_onafterrenderasync_await_100_3__await__method:1r68c5i:onafterrenderasync__action_102_onafterrenderasync_catch_102_4__catch",
          "from": "method:1r68c5i:onafterrenderasync__action_100_onafterrenderasync_await_100_3__await",
          "to": "method:1r68c5i:onafterrenderasync__action_102_onafterrenderasync_catch_102_4__catch",
          "kind": "exception",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_102_onafterrenderasync_catch_102_4__catch__method:1r68c5i:onafterrenderasync__action_104_onafterrenderasync_log_104_5__linear",
          "from": "method:1r68c5i:onafterrenderasync__action_102_onafterrenderasync_catch_102_4__catch",
          "to": "method:1r68c5i:onafterrenderasync__action_104_onafterrenderasync_log_104_5__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.92
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_104_onafterrenderasync_log_104_5__linear__method:1r68c5i:onafterrenderasync__action_104_logging_104__linear",
          "from": "method:1r68c5i:onafterrenderasync__action_104_onafterrenderasync_log_104_5__linear",
          "to": "method:1r68c5i:onafterrenderasync__action_104_logging_104__linear",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r68c5i:onafterrenderasync__action_104_logging_104__linear__implicit_return",
          "from": "method:1r68c5i:onafterrenderasync__action_104_logging_104__linear",
          "to": "method:1r68c5i:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1r68c5i:onafterrenderasync__action_95_guard_clause_95__merge",
        "method:1r68c5i:onafterrenderasync__action_95_onafterrenderasync_branch_95_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 93,
        "end": 107
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 93,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1m8qyhe:handleupdate__fragment",
      "ownerFileId": "file:mm1vnb:readerlayout-razor",
      "ownerSymbolId": "method:1m8qyhe:handleupdate",
      "ownerSymbolName": "HandleUpdate",
      "entryNodeId": "method:1m8qyhe:handleupdate__entry",
      "exitNodeIds": [
        "method:1m8qyhe:handleupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1m8qyhe:handleupdate__entry",
          "kind": "entry",
          "label": "HandleUpdate entry",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.99,
          "detail": "Invokes a UI refresh on the component's synchronization context (wraps StateHasChanged in InvokeAsync)."
        },
        {
          "id": "method:1m8qyhe:handleupdate__action_109_invoke_109__linear",
          "kind": "statement",
          "label": "Schedule UI update",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged) to trigger re-render"
        },
        {
          "id": "method:1m8qyhe:handleupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1m8qyhe:handleupdate__entry__method:1m8qyhe:handleupdate__action_109_invoke_109__linear",
          "from": "method:1m8qyhe:handleupdate__entry",
          "to": "method:1m8qyhe:handleupdate__action_109_invoke_109__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1m8qyhe:handleupdate__action_109_invoke_109__linear__implicit_return",
          "from": "method:1m8qyhe:handleupdate__action_109_invoke_109__linear",
          "to": "method:1m8qyhe:handleupdate__implicit_return",
          "kind": "return",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 109,
        "end": 109
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 109,
          "summary": "Control-flow fragment extracted for method HandleUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:zb4rdj:dispose__fragment",
      "ownerFileId": "file:mm1vnb:readerlayout-razor",
      "ownerSymbolId": "method:zb4rdj:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:zb4rdj:dispose__entry",
      "exitNodeIds": [
        "method:zb4rdj:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:zb4rdj:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.99,
          "detail": "Component disposal: unsubscribes from FocusMode and Quiz update events to avoid memory leaks."
        },
        {
          "id": "method:zb4rdj:dispose__action_113_event_unsubscribe_113__linear",
          "kind": "statement",
          "label": "Unsubscribe from focus mode changes",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged -= HandleUpdate"
        },
        {
          "id": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "kind": "call",
          "label": "FocusMode.OnFocusModeChanged -= HandleUpdate (event unsubscribe)",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88,
          "detail": "delegate HandleUpdate"
        },
        {
          "id": "method:zb4rdj:dispose__action_114_event_unsubscribe_114__linear",
          "kind": "statement",
          "label": "Unsubscribe from quiz updates",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7,
          "detail": "QuizService.OnQuizUpdated -= HandleUpdate"
        },
        {
          "id": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "kind": "call",
          "label": "QuizService.OnQuizUpdated -= HandleUpdate (event unsubscribe)",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88,
          "detail": "delegate HandleUpdate"
        },
        {
          "id": "method:zb4rdj:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:zb4rdj:dispose__entry__method:zb4rdj:dispose__action_113_event_unsubscribe_113__linear",
          "from": "method:zb4rdj:dispose__entry",
          "to": "method:zb4rdj:dispose__action_113_event_unsubscribe_113__linear",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zb4rdj:dispose__action_113_event_unsubscribe_113__linear__call_method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "from": "method:zb4rdj:dispose__action_113_event_unsubscribe_113__linear",
          "to": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "kind": "call",
          "label": "delegate HandleUpdate",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe___method:zb4rdj:dispose__action_114_event_unsubscribe_114__linear",
          "from": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "to": "method:zb4rdj:dispose__action_114_event_unsubscribe_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.7
        },
        {
          "id": "method:zb4rdj:dispose__action_114_event_unsubscribe_114__linear__call_method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "from": "method:zb4rdj:dispose__action_114_event_unsubscribe_114__linear",
          "to": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "kind": "call",
          "label": "delegate HandleUpdate",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.88
        },
        {
          "id": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe___implicit_return",
          "from": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "to": "method:zb4rdj:dispose__implicit_return",
          "kind": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe___jump_unknown_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "fromNodeId": "method:zb4rdj:dispose__call_113_FocusMode_OnFocusModeChanged_HandleUpdate_event_unsubscribe_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "FocusMode.OnFocusModeChanged -= HandleUpdate (event unsubscribe)",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "reason": "Call target FocusMode.OnFocusModeChanged -= HandleUpdate (event unsubscribe) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe___jump_unknown_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "fromNodeId": "method:zb4rdj:dispose__call_114_QuizService_OnQuizUpdated_HandleUpdate_event_unsubscribe_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "QuizService.OnQuizUpdated -= HandleUpdate (event unsubscribe)",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "reason": "Call target QuizService.OnQuizUpdated -= HandleUpdate (event unsubscribe) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.75,
      "lineSpan": {
        "start": 111,
        "end": 115
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor",
          "line": 111,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:15ixuxd:module-init__fragment",
      "ownerFileId": "file:1wkle85:reconnectmodal-razor-js",
      "ownerSymbolId": "method:15ixuxd:module-init",
      "ownerSymbolName": "<module_init>",
      "entryNodeId": "method:15ixuxd:module-init__entry",
      "exitNodeIds": [
        "method:15ixuxd:module-init__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:15ixuxd:module-init__entry",
          "kind": "entry",
          "label": "<module_init> entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.99,
          "detail": "Top-level initialization: obtains DOM elements and registers event listeners for reconnect state and button clicks."
        },
        {
          "id": "method:15ixuxd:module-init__action_2_dom_query_2__linear",
          "kind": "statement",
          "label": "Queries modal and buttons from DOM",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "getElementById for modal, retry button, resume button"
        },
        {
          "id": "method:15ixuxd:module-init__action_3_event_registration_3__linear",
          "kind": "statement",
          "label": "Registers reconnect state change handler",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "reconnectModal.addEventListener('components-reconnect-state-changed', handleReconnectStateChanged)"
        },
        {
          "id": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged",
          "kind": "call",
          "label": "handleReconnectStateChanged",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "event (registered as handler for 'components-reconnect-state-changed')"
        },
        {
          "id": "method:15ixuxd:module-init__action_6_event_registration_6__linear",
          "kind": "statement",
          "label": "Registers retry button click handler",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "retryButton.addEventListener('click', retry)"
        },
        {
          "id": "method:15ixuxd:module-init__call_6_retry",
          "kind": "call",
          "label": "retry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "click handler registration"
        },
        {
          "id": "method:15ixuxd:module-init__action_9_event_registration_9__linear",
          "kind": "statement",
          "label": "Registers resume button click handler",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "resumeButton.addEventListener('click', resume)"
        },
        {
          "id": "method:15ixuxd:module-init__call_9_resume",
          "kind": "call",
          "label": "resume",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "click handler registration"
        },
        {
          "id": "method:15ixuxd:module-init__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:15ixuxd:module-init__entry__method:15ixuxd:module-init__action_2_dom_query_2__linear",
          "from": "method:15ixuxd:module-init__entry",
          "to": "method:15ixuxd:module-init__action_2_dom_query_2__linear",
          "kind": "next",
          "line": 2,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:15ixuxd:module-init__action_2_dom_query_2__linear__method:15ixuxd:module-init__action_3_event_registration_3__linear",
          "from": "method:15ixuxd:module-init__action_2_dom_query_2__linear",
          "to": "method:15ixuxd:module-init__action_3_event_registration_3__linear",
          "kind": "next",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:15ixuxd:module-init__action_3_event_registration_3__linear__call_method:15ixuxd:module-init__call_3_handleReconnectStateChanged",
          "from": "method:15ixuxd:module-init__action_3_event_registration_3__linear",
          "to": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged",
          "kind": "call",
          "label": "event (registered as handler for 'components-reconnect-state-changed')",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged__method:15ixuxd:module-init__action_6_event_registration_6__linear",
          "from": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged",
          "to": "method:15ixuxd:module-init__action_6_event_registration_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:15ixuxd:module-init__action_6_event_registration_6__linear__call_method:15ixuxd:module-init__call_6_retry",
          "from": "method:15ixuxd:module-init__action_6_event_registration_6__linear",
          "to": "method:15ixuxd:module-init__call_6_retry",
          "kind": "call",
          "label": "click handler registration",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:15ixuxd:module-init__call_6_retry__method:15ixuxd:module-init__action_9_event_registration_9__linear",
          "from": "method:15ixuxd:module-init__call_6_retry",
          "to": "method:15ixuxd:module-init__action_9_event_registration_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:15ixuxd:module-init__action_9_event_registration_9__linear__call_method:15ixuxd:module-init__call_9_resume",
          "from": "method:15ixuxd:module-init__action_9_event_registration_9__linear",
          "to": "method:15ixuxd:module-init__call_9_resume",
          "kind": "call",
          "label": "click handler registration",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:15ixuxd:module-init__call_9_resume__implicit_return",
          "from": "method:15ixuxd:module-init__call_9_resume",
          "to": "method:15ixuxd:module-init__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_handleReconnectStateChanged",
          "fromNodeId": "method:15ixuxd:module-init__call_3_handleReconnectStateChanged",
          "kind": "call-target",
          "targetNodeId": "method:1n08b99:handlereconnectstatechanged",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "handleReconnectStateChanged",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target handleReconnectStateChanged resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        },
        {
          "id": "method:15ixuxd:module-init__call_6_retry__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_retry",
          "fromNodeId": "method:15ixuxd:module-init__call_6_retry",
          "kind": "call-target",
          "targetNodeId": "method:mdoq3y:retry",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "retry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target retry resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        },
        {
          "id": "method:15ixuxd:module-init__call_9_resume__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_resume",
          "fromNodeId": "method:15ixuxd:module-init__call_9_resume",
          "kind": "call-target",
          "targetNodeId": "method:12nt8as:resume",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "resume",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target resume resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "javascript",
      "confidence": 0.94,
      "lineSpan": {
        "start": 1,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 1,
          "summary": "Control-flow fragment extracted for method <module_init>.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1n08b99:handlereconnectstatechanged__fragment",
      "ownerFileId": "file:1wkle85:reconnectmodal-razor-js",
      "ownerSymbolId": "method:1n08b99:handlereconnectstatechanged",
      "ownerSymbolName": "handleReconnectStateChanged",
      "entryNodeId": "method:1n08b99:handlereconnectstatechanged__entry",
      "exitNodeIds": [
        "method:1n08b99:handlereconnectstatechanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1n08b99:handlereconnectstatechanged__entry",
          "kind": "entry",
          "label": "handleReconnectStateChanged entry",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.99,
          "detail": "Handles incoming reconnect-state change events and performs UI actions (show/hide modal), schedules visibility-driven retries, or forces page reload on rejection."
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition",
          "kind": "condition",
          "label": "event.detail.state === 'show' | 'hide' | 'failed' | 'rejected'",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "Selects UI or scheduling action based on reconnect state"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__true",
          "kind": "branch-true",
          "label": "show -> show modal",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__false",
          "kind": "branch-false",
          "label": "hide -> close modal",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition",
          "kind": "condition",
          "label": "event.detail.state === \"show\"",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "if (event.detail.state === \"show\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal",
          "kind": "call",
          "label": "reconnectModal.showModal",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "} else if (event.detail.state === \"hide\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition",
          "kind": "condition",
          "label": "event.detail.state === \"hide\"",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "} else if (event.detail.state === \"hide\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close",
          "kind": "call",
          "label": "reconnectModal.close",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "} else if (event.detail.state === \"failed\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition",
          "kind": "condition",
          "label": "event.detail.state === \"failed\"",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "} else if (event.detail.state === \"failed\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_17_event_registration_17__linear",
          "kind": "statement",
          "label": "Schedules retry on visibilitychange when failed",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "document.addEventListener('visibilitychange', retryWhenDocumentBecomesVisible)"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible",
          "kind": "call",
          "label": "retryWhenDocumentBecomesVisible",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "registered as visibilitychange handler"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "} else if (event.detail.state === \"rejected\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition",
          "kind": "condition",
          "label": "event.detail.state === \"rejected\"",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "} else if (event.detail.state === \"rejected\") {"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload",
          "kind": "call",
          "label": "location.reload",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1n08b99:handlereconnectstatechanged__entry__method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__entry",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition__method:1n08b99:handlereconnectstatechanged__action_12_branch_12__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__true",
          "kind": "condition-true",
          "label": "show -> show modal",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition__method:1n08b99:handlereconnectstatechanged__action_12_branch_12__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__false",
          "kind": "condition-false",
          "label": "hide -> close modal",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__true__method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__false__method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge__method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition__method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition__method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__true__method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__false__method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge__call_method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal",
          "from": "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal",
          "kind": "call",
          "label": "none",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition",
          "kind": "fallback",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__true__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__false__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__true__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__false__method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge__call_method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close",
          "from": "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close",
          "kind": "call",
          "label": "none",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition",
          "kind": "fallback",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__true__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__false__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__true__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__false__method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge__method:1n08b99:handlereconnectstatechanged__action_17_event_registration_17__linear",
          "from": "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__action_17_event_registration_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_17_event_registration_17__linear__call_method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible",
          "from": "method:1n08b99:handlereconnectstatechanged__action_17_event_registration_17__linear",
          "to": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible",
          "kind": "call",
          "label": "registered as visibilitychange handler",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition",
          "kind": "fallback",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__true__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__false__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__true",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__false",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__condition",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__true__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__true",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__false__method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__false",
          "to": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge__call_method:1n08b99:handlereconnectstatechanged__call_19_location_reload",
          "from": "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge",
          "to": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload",
          "kind": "call",
          "label": "none",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload__implicit_return",
          "from": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload",
          "to": "method:1n08b99:handlereconnectstatechanged__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal__jump_unknown_reconnectModal_showModal",
          "fromNodeId": "method:1n08b99:handlereconnectstatechanged__call_13_reconnectModal_showModal",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "reconnectModal.showModal",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target reconnectModal.showModal in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close__jump_unknown_reconnectModal_close",
          "fromNodeId": "method:1n08b99:handlereconnectstatechanged__call_15_reconnectModal_close",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "reconnectModal.close",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target reconnectModal.close in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_retryWhenDocumentBecomesVisible",
          "fromNodeId": "method:1n08b99:handlereconnectstatechanged__call_17_retryWhenDocumentBecomesVisible",
          "kind": "call-target",
          "targetNodeId": "method:1js2qbs:retrywhendocumentbecomesvisible",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "retryWhenDocumentBecomesVisible",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target retryWhenDocumentBecomesVisible resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        },
        {
          "id": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload__jump_unknown_location_reload",
          "fromNodeId": "method:1n08b99:handlereconnectstatechanged__call_19_location_reload",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "location.reload",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target location.reload in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1n08b99:handlereconnectstatechanged__action_12_branch_12__merge",
        "method:1n08b99:handlereconnectstatechanged__action_12_handlereconnectstatechanged_branch_12_0__merge",
        "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_fallback_14_2__merge",
        "method:1n08b99:handlereconnectstatechanged__action_14_handlereconnectstatechanged_branch_14_1__merge",
        "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_fallback_16_4__merge",
        "method:1n08b99:handlereconnectstatechanged__action_16_handlereconnectstatechanged_branch_16_3__merge",
        "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_fallback_18_6__merge",
        "method:1n08b99:handlereconnectstatechanged__action_18_handlereconnectstatechanged_branch_18_5__merge"
      ],
      "language": "javascript",
      "confidence": 0.98,
      "lineSpan": {
        "start": 11,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 11,
          "summary": "Control-flow fragment extracted for method handleReconnectStateChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mdoq3y:retry__fragment",
      "ownerFileId": "file:1wkle85:reconnectmodal-razor-js",
      "ownerSymbolId": "method:mdoq3y:retry",
      "ownerSymbolName": "retry",
      "entryNodeId": "method:mdoq3y:retry__entry",
      "exitNodeIds": [
        "method:mdoq3y:retry__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mdoq3y:retry__entry",
          "kind": "entry",
          "label": "retry entry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.99,
          "detail": "Attempts to reconnect via Blazor.reconnect; if server reachable but circuit rejected attempts resume, otherwise reloads; on network error schedules visibility-driven retry."
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "kind": "loop-entry",
          "label": "Retries work after a recoverable failure",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "async function retry() {"
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body",
          "kind": "loop-body",
          "label": "async function retry() {",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__condition",
          "kind": "condition",
          "label": "always executed at start",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "document.removeEventListener('visibilitychange', retryWhenDocumentBecomesVisible)"
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__true",
          "kind": "branch-true",
          "label": "listener removed",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "kind": "statement",
          "label": "merge",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__call_24_document_removeEventListener",
          "kind": "call",
          "label": "document.removeEventListener",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "removes visibilitychange handler retryWhenDocumentBecomesVisible"
        },
        {
          "id": "method:mdoq3y:retry__action_26_try_catch_26__linear",
          "kind": "statement",
          "label": "Network call with fallback",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "Handles all three outcomes: success -> nothing; false -> try resumeCircuit -> reload or close modal; exception -> re-register visibilitychange handler"
        },
        {
          "id": "method:mdoq3y:retry__action_26_retry_try_26_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "try {"
        },
        {
          "id": "method:mdoq3y:retry__action_31_retry_await_31_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81,
          "detail": "const successful = await Blazor.reconnect();"
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__condition",
          "kind": "condition",
          "label": "successful === true | false | throws",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__true",
          "kind": "branch-true",
          "label": "false -> attempt resumeCircuit",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__false",
          "kind": "branch-false",
          "label": "true -> implicit success (no UI change here)",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__call_31_Blazor_reconnect",
          "kind": "call",
          "label": "Blazor.reconnect",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "awaits reconnect; returns true|false|throws"
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition",
          "kind": "condition",
          "label": "!successful",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "if (!successful) {"
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_35_retry_await_35_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81,
          "detail": "const resumeSuccessful = await Blazor.resumeCircuit();"
        },
        {
          "id": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit",
          "kind": "call",
          "label": "Blazor.resumeCircuit",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "attempts to resume server circuit when reconnect reached server but was rejected"
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition",
          "kind": "condition",
          "label": "!resumeSuccessful",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "if (!resumeSuccessful) {"
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__call_37_location_reload",
          "kind": "call",
          "label": "location.reload",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "reloads page when resume failed"
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "} else {"
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__call_39_reconnectModal_close",
          "kind": "call",
          "label": "reconnectModal.close",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "closes modal when resume succeeded"
        },
        {
          "id": "method:mdoq3y:retry__action_42_retry_catch_42_7__catch",
          "kind": "catch",
          "label": "catch err",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.86,
          "detail": "} catch (err) {"
        },
        {
          "id": "method:mdoq3y:retry__action_44_event_registration_44__linear",
          "kind": "statement",
          "label": "Schedules visibility retry on exception",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7,
          "detail": "document.addEventListener('visibilitychange', retryWhenDocumentBecomesVisible)"
        },
        {
          "id": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible",
          "kind": "call",
          "label": "retryWhenDocumentBecomesVisible",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "registered on visibilitychange in catch path"
        },
        {
          "id": "method:mdoq3y:retry__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mdoq3y:retry__entry__method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "from": "method:mdoq3y:retry__entry",
          "to": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry__method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body",
          "from": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "to": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body",
          "kind": "loop-body",
          "label": "retry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body__method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "from": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body",
          "to": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry__method:mdoq3y:retry__action_23_retry_retry_23_0__loop_exit",
          "from": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry",
          "to": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_exit__method:mdoq3y:retry__action_24_guard_clause_24__condition",
          "from": "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_exit",
          "to": "method:mdoq3y:retry__action_24_guard_clause_24__condition",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__condition__method:mdoq3y:retry__action_24_guard_clause_24__true",
          "from": "method:mdoq3y:retry__action_24_guard_clause_24__condition",
          "to": "method:mdoq3y:retry__action_24_guard_clause_24__true",
          "kind": "condition-true",
          "label": "listener removed",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__condition__method:mdoq3y:retry__action_24_guard_clause_24__false",
          "from": "method:mdoq3y:retry__action_24_guard_clause_24__condition",
          "to": "method:mdoq3y:retry__action_24_guard_clause_24__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__true__method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "from": "method:mdoq3y:retry__action_24_guard_clause_24__true",
          "to": "method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__false__method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "from": "method:mdoq3y:retry__action_24_guard_clause_24__false",
          "to": "method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_24_guard_clause_24__merge__call_method:mdoq3y:retry__call_24_document_removeEventListener",
          "from": "method:mdoq3y:retry__action_24_guard_clause_24__merge",
          "to": "method:mdoq3y:retry__call_24_document_removeEventListener",
          "kind": "call",
          "label": "removes visibilitychange handler retryWhenDocumentBecomesVisible",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_24_document_removeEventListener__method:mdoq3y:retry__action_26_try_catch_26__linear",
          "from": "method:mdoq3y:retry__call_24_document_removeEventListener",
          "to": "method:mdoq3y:retry__action_26_try_catch_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_26_try_catch_26__linear__method:mdoq3y:retry__action_26_retry_try_26_1__try",
          "from": "method:mdoq3y:retry__action_26_try_catch_26__linear",
          "to": "method:mdoq3y:retry__action_26_retry_try_26_1__try",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_26_retry_try_26_1__try__method:mdoq3y:retry__action_31_retry_await_31_2__await",
          "from": "method:mdoq3y:retry__action_26_retry_try_26_1__try",
          "to": "method:mdoq3y:retry__action_31_retry_await_31_2__await",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81
        },
        {
          "id": "method:mdoq3y:retry__action_31_retry_await_31_2__await__method:mdoq3y:retry__action_31_branch_31__condition",
          "from": "method:mdoq3y:retry__action_31_retry_await_31_2__await",
          "to": "method:mdoq3y:retry__action_31_branch_31__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__condition__method:mdoq3y:retry__action_31_branch_31__true",
          "from": "method:mdoq3y:retry__action_31_branch_31__condition",
          "to": "method:mdoq3y:retry__action_31_branch_31__true",
          "kind": "condition-true",
          "label": "false -> attempt resumeCircuit",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__condition__method:mdoq3y:retry__action_31_branch_31__false",
          "from": "method:mdoq3y:retry__action_31_branch_31__condition",
          "to": "method:mdoq3y:retry__action_31_branch_31__false",
          "kind": "condition-false",
          "label": "true -> implicit success (no UI change here)",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__true__method:mdoq3y:retry__action_31_branch_31__merge",
          "from": "method:mdoq3y:retry__action_31_branch_31__true",
          "to": "method:mdoq3y:retry__action_31_branch_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__false__method:mdoq3y:retry__action_31_branch_31__merge",
          "from": "method:mdoq3y:retry__action_31_branch_31__false",
          "to": "method:mdoq3y:retry__action_31_branch_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_31_branch_31__merge__call_method:mdoq3y:retry__call_31_Blazor_reconnect",
          "from": "method:mdoq3y:retry__action_31_branch_31__merge",
          "to": "method:mdoq3y:retry__call_31_Blazor_reconnect",
          "kind": "call",
          "label": "awaits reconnect; returns true|false|throws",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_31_Blazor_reconnect__method:mdoq3y:retry__action_32_retry_branch_32_3__condition",
          "from": "method:mdoq3y:retry__call_31_Blazor_reconnect",
          "to": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition__method:mdoq3y:retry__action_32_retry_branch_32_3__true",
          "from": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition",
          "to": "method:mdoq3y:retry__action_32_retry_branch_32_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition__method:mdoq3y:retry__action_32_retry_branch_32_3__false",
          "from": "method:mdoq3y:retry__action_32_retry_branch_32_3__condition",
          "to": "method:mdoq3y:retry__action_32_retry_branch_32_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__true__method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "from": "method:mdoq3y:retry__action_32_retry_branch_32_3__true",
          "to": "method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__false__method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "from": "method:mdoq3y:retry__action_32_retry_branch_32_3__false",
          "to": "method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_32_retry_branch_32_3__merge__method:mdoq3y:retry__action_35_retry_await_35_4__await",
          "from": "method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
          "to": "method:mdoq3y:retry__action_35_retry_await_35_4__await",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81
        },
        {
          "id": "method:mdoq3y:retry__action_35_retry_await_35_4__await__call_method:mdoq3y:retry__call_35_Blazor_resumeCircuit",
          "from": "method:mdoq3y:retry__action_35_retry_await_35_4__await",
          "to": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit",
          "kind": "call",
          "label": "attempts to resume server circuit when reconnect reached server but was rejected",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit__method:mdoq3y:retry__action_36_retry_branch_36_5__condition",
          "from": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit",
          "to": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition__method:mdoq3y:retry__action_36_retry_branch_36_5__true",
          "from": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition",
          "to": "method:mdoq3y:retry__action_36_retry_branch_36_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition__method:mdoq3y:retry__action_36_retry_branch_36_5__false",
          "from": "method:mdoq3y:retry__action_36_retry_branch_36_5__condition",
          "to": "method:mdoq3y:retry__action_36_retry_branch_36_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__true__method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "from": "method:mdoq3y:retry__action_36_retry_branch_36_5__true",
          "to": "method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__false__method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "from": "method:mdoq3y:retry__action_36_retry_branch_36_5__false",
          "to": "method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:mdoq3y:retry__action_36_retry_branch_36_5__merge__call_method:mdoq3y:retry__call_37_location_reload",
          "from": "method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
          "to": "method:mdoq3y:retry__call_37_location_reload",
          "kind": "call",
          "label": "reloads page when resume failed",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_37_location_reload__method:mdoq3y:retry__action_38_retry_fallback_38_6__condition",
          "from": "method:mdoq3y:retry__call_37_location_reload",
          "to": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition",
          "kind": "fallback",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition__method:mdoq3y:retry__action_38_retry_fallback_38_6__true",
          "from": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition",
          "to": "method:mdoq3y:retry__action_38_retry_fallback_38_6__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition__method:mdoq3y:retry__action_38_retry_fallback_38_6__false",
          "from": "method:mdoq3y:retry__action_38_retry_fallback_38_6__condition",
          "to": "method:mdoq3y:retry__action_38_retry_fallback_38_6__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__true__method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "from": "method:mdoq3y:retry__action_38_retry_fallback_38_6__true",
          "to": "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__false__method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "from": "method:mdoq3y:retry__action_38_retry_fallback_38_6__false",
          "to": "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge__call_method:mdoq3y:retry__call_39_reconnectModal_close",
          "from": "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge",
          "to": "method:mdoq3y:retry__call_39_reconnectModal_close",
          "kind": "call",
          "label": "closes modal when resume succeeded",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_39_reconnectModal_close__method:mdoq3y:retry__action_42_retry_catch_42_7__catch",
          "from": "method:mdoq3y:retry__call_39_reconnectModal_close",
          "to": "method:mdoq3y:retry__action_42_retry_catch_42_7__catch",
          "kind": "exception",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.86
        },
        {
          "id": "method:mdoq3y:retry__action_42_retry_catch_42_7__catch__method:mdoq3y:retry__action_44_event_registration_44__linear",
          "from": "method:mdoq3y:retry__action_42_retry_catch_42_7__catch",
          "to": "method:mdoq3y:retry__action_44_event_registration_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:mdoq3y:retry__action_44_event_registration_44__linear__call_method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible",
          "from": "method:mdoq3y:retry__action_44_event_registration_44__linear",
          "to": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible",
          "kind": "call",
          "label": "registered on visibilitychange in catch path",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible__implicit_return",
          "from": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible",
          "to": "method:mdoq3y:retry__implicit_return",
          "kind": "return",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mdoq3y:retry__call_24_document_removeEventListener__jump_unknown_document_removeEventListener",
          "fromNodeId": "method:mdoq3y:retry__call_24_document_removeEventListener",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "document.removeEventListener",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target document.removeEventListener in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mdoq3y:retry__call_31_Blazor_reconnect__jump_unknown_Blazor_reconnect",
          "fromNodeId": "method:mdoq3y:retry__call_31_Blazor_reconnect",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Blazor.reconnect",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target Blazor.reconnect in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit__jump_unknown_Blazor_resumeCircuit",
          "fromNodeId": "method:mdoq3y:retry__call_35_Blazor_resumeCircuit",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Blazor.resumeCircuit",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target Blazor.resumeCircuit in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mdoq3y:retry__call_37_location_reload__jump_unknown_location_reload",
          "fromNodeId": "method:mdoq3y:retry__call_37_location_reload",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "location.reload",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target location.reload in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mdoq3y:retry__call_39_reconnectModal_close__jump_unknown_reconnectModal_close",
          "fromNodeId": "method:mdoq3y:retry__call_39_reconnectModal_close",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "reconnectModal.close",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target reconnectModal.close in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_retryWhenDocumentBecomesVisible",
          "fromNodeId": "method:mdoq3y:retry__call_44_retryWhenDocumentBecomesVisible",
          "kind": "call-target",
          "targetNodeId": "method:1js2qbs:retrywhendocumentbecomesvisible",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "retryWhenDocumentBecomesVisible",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target retryWhenDocumentBecomesVisible resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:mdoq3y:retry__action_23_retry_retry_23_0__loop_body__method:mdoq3y:retry__action_23_retry_retry_23_0__loop_entry"
      ],
      "mergeNodeIds": [
        "method:mdoq3y:retry__action_24_guard_clause_24__merge",
        "method:mdoq3y:retry__action_31_branch_31__merge",
        "method:mdoq3y:retry__action_32_retry_branch_32_3__merge",
        "method:mdoq3y:retry__action_36_retry_branch_36_5__merge",
        "method:mdoq3y:retry__action_38_retry_fallback_38_6__merge"
      ],
      "language": "javascript",
      "confidence": 0.98,
      "lineSpan": {
        "start": 23,
        "end": 46
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 23,
          "summary": "Control-flow fragment extracted for method retry.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:12nt8as:resume__fragment",
      "ownerFileId": "file:1wkle85:reconnectmodal-razor-js",
      "ownerSymbolId": "method:12nt8as:resume",
      "ownerSymbolName": "resume",
      "entryNodeId": "method:12nt8as:resume__entry",
      "exitNodeIds": [
        "method:12nt8as:resume__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:12nt8as:resume__entry",
          "kind": "entry",
          "label": "resume entry",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.99,
          "detail": "Attempts to resume an existing circuit via Blazor.resumeCircuit; reloads on failure or toggles UI class on exception."
        },
        {
          "id": "method:12nt8as:resume__action_49_resume_try_49_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84,
          "detail": "try {"
        },
        {
          "id": "method:12nt8as:resume__action_49_try_catch_49__linear",
          "kind": "statement",
          "label": "Attempt resume with fallback UI update",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_50_resume_await_50_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81,
          "detail": "const successful = await Blazor.resumeCircuit();"
        },
        {
          "id": "method:12nt8as:resume__call_50_Blazor_resumeCircuit",
          "kind": "call",
          "label": "Blazor.resumeCircuit",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "awaits resume result boolean"
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__condition",
          "kind": "condition",
          "label": "successful === false triggers reload",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__true",
          "kind": "branch-true",
          "label": "reload",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__false",
          "kind": "branch-false",
          "label": "close/noop",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__condition",
          "kind": "condition",
          "label": "!successful",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "if (!successful) {"
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__call_52_location_reload",
          "kind": "call",
          "label": "location.reload",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "reloads when resume returned false"
        },
        {
          "id": "method:12nt8as:resume__action_54_resume_catch_54_3__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.86,
          "detail": "} catch {"
        },
        {
          "id": "method:12nt8as:resume__call_55_reconnectModal_classList_replace",
          "kind": "call",
          "label": "reconnectModal.classList.replace",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "replaces paused CSS class with resume-failed on exception"
        },
        {
          "id": "method:12nt8as:resume__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:12nt8as:resume__entry__method:12nt8as:resume__action_49_resume_try_49_0__try",
          "from": "method:12nt8as:resume__entry",
          "to": "method:12nt8as:resume__action_49_resume_try_49_0__try",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.84
        },
        {
          "id": "method:12nt8as:resume__action_49_resume_try_49_0__try__method:12nt8as:resume__action_49_try_catch_49__linear",
          "from": "method:12nt8as:resume__action_49_resume_try_49_0__try",
          "to": "method:12nt8as:resume__action_49_try_catch_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_49_try_catch_49__linear__method:12nt8as:resume__action_50_resume_await_50_1__await",
          "from": "method:12nt8as:resume__action_49_try_catch_49__linear",
          "to": "method:12nt8as:resume__action_50_resume_await_50_1__await",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81
        },
        {
          "id": "method:12nt8as:resume__action_50_resume_await_50_1__await__call_method:12nt8as:resume__call_50_Blazor_resumeCircuit",
          "from": "method:12nt8as:resume__action_50_resume_await_50_1__await",
          "to": "method:12nt8as:resume__call_50_Blazor_resumeCircuit",
          "kind": "call",
          "label": "awaits resume result boolean",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:12nt8as:resume__call_50_Blazor_resumeCircuit__method:12nt8as:resume__action_51_branch_51__condition",
          "from": "method:12nt8as:resume__call_50_Blazor_resumeCircuit",
          "to": "method:12nt8as:resume__action_51_branch_51__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__condition__method:12nt8as:resume__action_51_branch_51__true",
          "from": "method:12nt8as:resume__action_51_branch_51__condition",
          "to": "method:12nt8as:resume__action_51_branch_51__true",
          "kind": "condition-true",
          "label": "reload",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__condition__method:12nt8as:resume__action_51_branch_51__false",
          "from": "method:12nt8as:resume__action_51_branch_51__condition",
          "to": "method:12nt8as:resume__action_51_branch_51__false",
          "kind": "condition-false",
          "label": "close/noop",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__true__method:12nt8as:resume__action_51_branch_51__merge",
          "from": "method:12nt8as:resume__action_51_branch_51__true",
          "to": "method:12nt8as:resume__action_51_branch_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__false__method:12nt8as:resume__action_51_branch_51__merge",
          "from": "method:12nt8as:resume__action_51_branch_51__false",
          "to": "method:12nt8as:resume__action_51_branch_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:12nt8as:resume__action_51_branch_51__merge__method:12nt8as:resume__action_51_resume_branch_51_2__condition",
          "from": "method:12nt8as:resume__action_51_branch_51__merge",
          "to": "method:12nt8as:resume__action_51_resume_branch_51_2__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__condition__method:12nt8as:resume__action_51_resume_branch_51_2__true",
          "from": "method:12nt8as:resume__action_51_resume_branch_51_2__condition",
          "to": "method:12nt8as:resume__action_51_resume_branch_51_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__condition__method:12nt8as:resume__action_51_resume_branch_51_2__false",
          "from": "method:12nt8as:resume__action_51_resume_branch_51_2__condition",
          "to": "method:12nt8as:resume__action_51_resume_branch_51_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__true__method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "from": "method:12nt8as:resume__action_51_resume_branch_51_2__true",
          "to": "method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__false__method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "from": "method:12nt8as:resume__action_51_resume_branch_51_2__false",
          "to": "method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:12nt8as:resume__action_51_resume_branch_51_2__merge__call_method:12nt8as:resume__call_52_location_reload",
          "from": "method:12nt8as:resume__action_51_resume_branch_51_2__merge",
          "to": "method:12nt8as:resume__call_52_location_reload",
          "kind": "call",
          "label": "reloads when resume returned false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:12nt8as:resume__call_52_location_reload__method:12nt8as:resume__action_54_resume_catch_54_3__catch",
          "from": "method:12nt8as:resume__call_52_location_reload",
          "to": "method:12nt8as:resume__action_54_resume_catch_54_3__catch",
          "kind": "exception",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.86
        },
        {
          "id": "method:12nt8as:resume__action_54_resume_catch_54_3__catch__call_method:12nt8as:resume__call_55_reconnectModal_classList_replace",
          "from": "method:12nt8as:resume__action_54_resume_catch_54_3__catch",
          "to": "method:12nt8as:resume__call_55_reconnectModal_classList_replace",
          "kind": "call",
          "label": "replaces paused CSS class with resume-failed on exception",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:12nt8as:resume__call_55_reconnectModal_classList_replace__implicit_return",
          "from": "method:12nt8as:resume__call_55_reconnectModal_classList_replace",
          "to": "method:12nt8as:resume__implicit_return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:12nt8as:resume__call_50_Blazor_resumeCircuit__jump_unknown_Blazor_resumeCircuit",
          "fromNodeId": "method:12nt8as:resume__call_50_Blazor_resumeCircuit",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "Blazor.resumeCircuit",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target Blazor.resumeCircuit in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:12nt8as:resume__call_52_location_reload__jump_unknown_location_reload",
          "fromNodeId": "method:12nt8as:resume__call_52_location_reload",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "location.reload",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target location.reload in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:12nt8as:resume__call_55_reconnectModal_classList_replace__jump_unknown_reconnectModal_classList_replace",
          "fromNodeId": "method:12nt8as:resume__call_55_reconnectModal_classList_replace",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "reconnectModal.classList.replace",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target reconnectModal.classList.replace in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:12nt8as:resume__action_51_branch_51__merge",
        "method:12nt8as:resume__action_51_resume_branch_51_2__merge"
      ],
      "language": "javascript",
      "confidence": 0.98,
      "lineSpan": {
        "start": 48,
        "end": 57
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 48,
          "summary": "Control-flow fragment extracted for method resume.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1js2qbs:retrywhendocumentbecomesvisible__fragment",
      "ownerFileId": "file:1wkle85:reconnectmodal-razor-js",
      "ownerSymbolId": "method:1js2qbs:retrywhendocumentbecomesvisible",
      "ownerSymbolName": "retryWhenDocumentBecomesVisible",
      "entryNodeId": "method:1js2qbs:retrywhendocumentbecomesvisible__entry",
      "exitNodeIds": [
        "method:1js2qbs:retrywhendocumentbecomesvisible__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__entry",
          "kind": "entry",
          "label": "retryWhenDocumentBecomesVisible entry",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.99,
          "detail": "Visibility-change handler that triggers retry() when the document becomes visible."
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "kind": "loop-entry",
          "label": "Retries work after a recoverable failure",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "async function retryWhenDocumentBecomesVisible() {"
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body",
          "kind": "loop-body",
          "label": "async function retryWhenDocumentBecomesVisible() {",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition",
          "kind": "condition",
          "label": "document.visibilityState === 'visible'",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__true",
          "kind": "branch-true",
          "label": "visible -> call retry",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__false",
          "kind": "branch-false",
          "label": "not visible -> no-op",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition",
          "kind": "condition",
          "label": "document.visibilityState === \"visible\"",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78,
          "detail": "if (document.visibilityState === \"visible\") {"
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_await_61_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81,
          "detail": "await retry();"
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "kind": "loop-entry",
          "label": "Retries work after a recoverable failure",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "await retry();"
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body",
          "kind": "loop-body",
          "label": "await retry();",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry",
          "kind": "call",
          "label": "retry",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88,
          "detail": "await retry() when document.visibilityState === 'visible'"
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__entry__method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__entry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry__method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body",
          "kind": "loop-body",
          "label": "retry",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body__method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry__method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_exit",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_exit__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_exit",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__true",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__true",
          "kind": "condition-true",
          "label": "visible -> call retry",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__false",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__condition",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__false",
          "kind": "condition-false",
          "label": "not visible -> no-op",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__true__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__true",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__false__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__false",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.7
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__true",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__false",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__condition",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__true__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__true",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__false__method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__false",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.78
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_await_61_3__await",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_await_61_3__await",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.81
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_await_61_3__await__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_await_61_3__await",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body",
          "kind": "loop-body",
          "label": "retry",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_exit",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_exit",
          "kind": "loop-exit",
          "label": "Stops retrying when the attempt budget is exhausted or the call succeeds.",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_exit__call_method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_exit",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry",
          "kind": "call",
          "label": "await retry() when document.visibilityState === 'visible'",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.88
        },
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry__implicit_return",
          "from": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry",
          "to": "method:1js2qbs:retrywhendocumentbecomesvisible__implicit_return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry__jump_NexusReader_UI_Shared_Layout_ReconnectModal_razor_js_retry",
          "fromNodeId": "method:1js2qbs:retrywhendocumentbecomesvisible__call_61_retry",
          "kind": "call-target",
          "targetNodeId": "method:mdoq3y:retry",
          "targetPath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "targetHint": "retry",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "reason": "Call target retry resolved to NexusReader.UI.Shared/Layout/ReconnectModal.razor.js.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_body__method:1js2qbs:retrywhendocumentbecomesvisible__action_59_retrywhendocumentbecomesvisible_retry_59_0__loop_entry",
        "method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_body__method:1js2qbs:retrywhendocumentbecomesvisible__action_61_retrywhendocumentbecomesvisible_retry_61_2__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_guard_clause_60__merge",
        "method:1js2qbs:retrywhendocumentbecomesvisible__action_60_retrywhendocumentbecomesvisible_branch_60_1__merge"
      ],
      "language": "javascript",
      "confidence": 0.98,
      "lineSpan": {
        "start": 59,
        "end": 63
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js",
          "line": 59,
          "summary": "Control-flow fragment extracted for method retryWhenDocumentBecomesVisible.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1v0viho:oninitialized__fragment",
      "ownerFileId": "file:csf9l7:login-razor",
      "ownerSymbolId": "method:1v0viho:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:1v0viho:oninitialized__entry",
      "exitNodeIds": [
        "method:1v0viho:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1v0viho:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.99,
          "detail": "Initializes component state by mapping an incoming query error code to a user-friendly error message."
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(ErrorCode)",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(ErrorCode))"
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition",
          "kind": "condition",
          "label": "if (!string.IsNullOrEmpty(ErrorCode))",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Only when ErrorCode is present the switch below executes to set _errorMessage."
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__true",
          "kind": "branch-true",
          "label": "map error to message",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "kind": "statement",
          "label": "merge",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_114_branch_switch_114__linear",
          "kind": "statement",
          "label": "Map ErrorCode to localized message",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Sets _errorMessage to different Polish messages per error code (lines 116-121)."
        },
        {
          "id": "method:1v0viho:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1v0viho:oninitialized__entry__method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition",
          "from": "method:1v0viho:oninitialized__entry",
          "to": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition__method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__true",
          "from": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition",
          "to": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition__method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__false",
          "from": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__condition",
          "to": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__true__method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "from": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__true",
          "to": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__false__method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "from": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__false",
          "to": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge__method:1v0viho:oninitialized__action_112_guard_clause_112__condition",
          "from": "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
          "to": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition__method:1v0viho:oninitialized__action_112_guard_clause_112__true",
          "from": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition",
          "to": "method:1v0viho:oninitialized__action_112_guard_clause_112__true",
          "kind": "condition-true",
          "label": "map error to message",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition__method:1v0viho:oninitialized__action_112_guard_clause_112__false",
          "from": "method:1v0viho:oninitialized__action_112_guard_clause_112__condition",
          "to": "method:1v0viho:oninitialized__action_112_guard_clause_112__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__true__method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "from": "method:1v0viho:oninitialized__action_112_guard_clause_112__true",
          "to": "method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__false__method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "from": "method:1v0viho:oninitialized__action_112_guard_clause_112__false",
          "to": "method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_112_guard_clause_112__merge__method:1v0viho:oninitialized__action_114_branch_switch_114__linear",
          "from": "method:1v0viho:oninitialized__action_112_guard_clause_112__merge",
          "to": "method:1v0viho:oninitialized__action_114_branch_switch_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1v0viho:oninitialized__action_114_branch_switch_114__linear__implicit_return",
          "from": "method:1v0viho:oninitialized__action_114_branch_switch_114__linear",
          "to": "method:1v0viho:oninitialized__implicit_return",
          "kind": "return",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1v0viho:oninitialized__action_112_oninitialized_branch_112_0__merge",
        "method:1v0viho:oninitialized__action_112_guard_clause_112__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 110,
        "end": 124
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 110,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:uwsk5z:handlelogin__fragment",
      "ownerFileId": "file:csf9l7:login-razor",
      "ownerSymbolId": "method:uwsk5z:handlelogin",
      "ownerSymbolName": "HandleLogin",
      "entryNodeId": "method:uwsk5z:handlelogin__entry",
      "exitNodeIds": [
        "method:uwsk5z:handlelogin__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:uwsk5z:handlelogin__entry",
          "kind": "entry",
          "label": "HandleLogin entry",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.99,
          "detail": "Handles form submission: calls IdentityService.LoginAsync, sets submission state, handles success by invoking a JS helper to submit a hidden form (cookie sign-in), and surfaces errors."
        },
        {
          "id": "method:uwsk5z:handlelogin__action_128_state_mutation_128__linear",
          "kind": "statement",
          "label": "Set submitting state",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "_isSubmitting = true; resets _errorMessage = null"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_131_try_catch_finally_131__linear",
          "kind": "statement",
          "label": "Wrap remote login call",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "try { await IdentityService.LoginAsync(...) } catch { set _errorMessage } finally { _isSubmitting = false } (lines 131-151)"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_131_handlelogin_try_131_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_133_handlelogin_await_133_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.81,
          "detail": "var result = await IdentityService.LoginAsync(_loginModel.Email, _loginModel.Password, _loginModel.RememberMe);"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_133_external_call_133__linear",
          "kind": "http-call",
          "label": "Call identity service",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Calls injected IIdentityService.LoginAsync to authenticate user; external project service (result examined afterwards)."
        },
        {
          "id": "method:uwsk5z:handlelogin__call_133_LoginAsync",
          "kind": "call",
          "label": "LoginAsync",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.88,
          "detail": "(_loginModel.Email, _loginModel.Password, _loginModel.RememberMe)"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__condition",
          "kind": "condition",
          "label": "if (result.IsSuccess) ... else ...",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "On success triggers JS helper, on failure sets _errorMessage from result Errors (lines 134-142)."
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__true",
          "kind": "branch-true",
          "label": "success -> invoke JS to submit hidden form",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__false",
          "kind": "branch-false",
          "label": "failure -> set _errorMessage from result.Errors",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "kind": "statement",
          "label": "merge",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_137_handlelogin_await_137_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.81,
          "detail": "await JS.InvokeVoidAsync(\"nexusAuth.submitLoginForm\", \"nexusLoginForm\", _loginModel.Email, _loginModel.Password, _loginModel.RememberMe);"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_137_external_call_137__linear",
          "kind": "http-call",
          "label": "Invoke JS helper for hidden form submission",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Calls JS.InvokeVoidAsync('nexusAuth.submitLoginForm', 'nexusLoginForm', email, password, remember) to perform cookie-based sign-in (framework JS runtime call)."
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_141_handlelogin_repository_read_141_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.86,
          "detail": "_errorMessage = result.Errors.FirstOrDefault()?.Message ?? \"Nieprawidłowy e-mail lub hasło.\";"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_144_handlelogin_catch_144_6__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_144_error_handling_144__linear",
          "kind": "statement",
          "label": "Catch exceptions from login process",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Catches Exception and sets _errorMessage to include ex.Message (line 146)."
        },
        {
          "id": "method:uwsk5z:handlelogin__action_148_handlelogin_finally_148_7__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:uwsk5z:handlelogin__action_150_state_mutation_150__linear",
          "kind": "statement",
          "label": "Clear submitting state",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "_isSubmitting = false in finally block."
        },
        {
          "id": "method:uwsk5z:handlelogin__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:uwsk5z:handlelogin__entry__method:uwsk5z:handlelogin__action_128_state_mutation_128__linear",
          "from": "method:uwsk5z:handlelogin__entry",
          "to": "method:uwsk5z:handlelogin__action_128_state_mutation_128__linear",
          "kind": "next",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_128_state_mutation_128__linear__method:uwsk5z:handlelogin__action_131_try_catch_finally_131__linear",
          "from": "method:uwsk5z:handlelogin__action_128_state_mutation_128__linear",
          "to": "method:uwsk5z:handlelogin__action_131_try_catch_finally_131__linear",
          "kind": "next",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_131_try_catch_finally_131__linear__method:uwsk5z:handlelogin__action_131_handlelogin_try_131_0__try",
          "from": "method:uwsk5z:handlelogin__action_131_try_catch_finally_131__linear",
          "to": "method:uwsk5z:handlelogin__action_131_handlelogin_try_131_0__try",
          "kind": "next",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_131_handlelogin_try_131_0__try__method:uwsk5z:handlelogin__action_133_handlelogin_await_133_1__await",
          "from": "method:uwsk5z:handlelogin__action_131_handlelogin_try_131_0__try",
          "to": "method:uwsk5z:handlelogin__action_133_handlelogin_await_133_1__await",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.81
        },
        {
          "id": "method:uwsk5z:handlelogin__action_133_handlelogin_await_133_1__await__method:uwsk5z:handlelogin__action_133_external_call_133__linear",
          "from": "method:uwsk5z:handlelogin__action_133_handlelogin_await_133_1__await",
          "to": "method:uwsk5z:handlelogin__action_133_external_call_133__linear",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_133_external_call_133__linear__call_method:uwsk5z:handlelogin__call_133_LoginAsync",
          "from": "method:uwsk5z:handlelogin__action_133_external_call_133__linear",
          "to": "method:uwsk5z:handlelogin__call_133_LoginAsync",
          "kind": "call",
          "label": "(_loginModel.Email, _loginModel.Password, _loginModel.RememberMe)",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.88
        },
        {
          "id": "method:uwsk5z:handlelogin__call_133_LoginAsync__method:uwsk5z:handlelogin__action_134_branch_134__condition",
          "from": "method:uwsk5z:handlelogin__call_133_LoginAsync",
          "to": "method:uwsk5z:handlelogin__action_134_branch_134__condition",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__condition__method:uwsk5z:handlelogin__action_134_branch_134__true",
          "from": "method:uwsk5z:handlelogin__action_134_branch_134__condition",
          "to": "method:uwsk5z:handlelogin__action_134_branch_134__true",
          "kind": "condition-true",
          "label": "success -> invoke JS to submit hidden form",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__condition__method:uwsk5z:handlelogin__action_134_branch_134__false",
          "from": "method:uwsk5z:handlelogin__action_134_branch_134__condition",
          "to": "method:uwsk5z:handlelogin__action_134_branch_134__false",
          "kind": "condition-false",
          "label": "failure -> set _errorMessage from result.Errors",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__true__method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "from": "method:uwsk5z:handlelogin__action_134_branch_134__true",
          "to": "method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__false__method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "from": "method:uwsk5z:handlelogin__action_134_branch_134__false",
          "to": "method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_branch_134__merge__method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition",
          "from": "method:uwsk5z:handlelogin__action_134_branch_134__merge",
          "to": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition__method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__true",
          "from": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition",
          "to": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition__method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__false",
          "from": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__condition",
          "to": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__true__method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "from": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__true",
          "to": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__false__method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "from": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__false",
          "to": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "kind": "next",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.78
        },
        {
          "id": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge__method:uwsk5z:handlelogin__action_137_handlelogin_await_137_3__await",
          "from": "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
          "to": "method:uwsk5z:handlelogin__action_137_handlelogin_await_137_3__await",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.81
        },
        {
          "id": "method:uwsk5z:handlelogin__action_137_handlelogin_await_137_3__await__method:uwsk5z:handlelogin__action_137_external_call_137__linear",
          "from": "method:uwsk5z:handlelogin__action_137_handlelogin_await_137_3__await",
          "to": "method:uwsk5z:handlelogin__action_137_external_call_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_137_external_call_137__linear__method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition",
          "from": "method:uwsk5z:handlelogin__action_137_external_call_137__linear",
          "to": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition",
          "kind": "fallback",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition__method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__true",
          "from": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition",
          "to": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition__method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__false",
          "from": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__condition",
          "to": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__true__method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "from": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__true",
          "to": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__false__method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "from": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__false",
          "to": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge__method:uwsk5z:handlelogin__action_141_handlelogin_repository_read_141_5__linear",
          "from": "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge",
          "to": "method:uwsk5z:handlelogin__action_141_handlelogin_repository_read_141_5__linear",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.86
        },
        {
          "id": "method:uwsk5z:handlelogin__action_141_handlelogin_repository_read_141_5__linear__method:uwsk5z:handlelogin__action_144_handlelogin_catch_144_6__catch",
          "from": "method:uwsk5z:handlelogin__action_141_handlelogin_repository_read_141_5__linear",
          "to": "method:uwsk5z:handlelogin__action_144_handlelogin_catch_144_6__catch",
          "kind": "exception",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.86
        },
        {
          "id": "method:uwsk5z:handlelogin__action_144_handlelogin_catch_144_6__catch__method:uwsk5z:handlelogin__action_144_error_handling_144__linear",
          "from": "method:uwsk5z:handlelogin__action_144_handlelogin_catch_144_6__catch",
          "to": "method:uwsk5z:handlelogin__action_144_error_handling_144__linear",
          "kind": "next",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_144_error_handling_144__linear__method:uwsk5z:handlelogin__action_148_handlelogin_finally_148_7__finally",
          "from": "method:uwsk5z:handlelogin__action_144_error_handling_144__linear",
          "to": "method:uwsk5z:handlelogin__action_148_handlelogin_finally_148_7__finally",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.84
        },
        {
          "id": "method:uwsk5z:handlelogin__action_148_handlelogin_finally_148_7__finally__method:uwsk5z:handlelogin__action_150_state_mutation_150__linear",
          "from": "method:uwsk5z:handlelogin__action_148_handlelogin_finally_148_7__finally",
          "to": "method:uwsk5z:handlelogin__action_150_state_mutation_150__linear",
          "kind": "next",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:uwsk5z:handlelogin__action_150_state_mutation_150__linear__implicit_return",
          "from": "method:uwsk5z:handlelogin__action_150_state_mutation_150__linear",
          "to": "method:uwsk5z:handlelogin__implicit_return",
          "kind": "return",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:uwsk5z:handlelogin__call_133_LoginAsync__jump_unknown_LoginAsync",
          "fromNodeId": "method:uwsk5z:handlelogin__call_133_LoginAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "LoginAsync",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "reason": "Call target LoginAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:uwsk5z:handlelogin__action_134_branch_134__merge",
        "method:uwsk5z:handlelogin__action_134_handlelogin_branch_134_2__merge",
        "method:uwsk5z:handlelogin__action_139_handlelogin_fallback_139_4__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 126,
        "end": 152
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 126,
          "summary": "Control-flow fragment extracted for method HandleLogin.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ulfoov:handlegooglelogin__fragment",
      "ownerFileId": "file:csf9l7:login-razor",
      "ownerSymbolId": "method:ulfoov:handlegooglelogin",
      "ownerSymbolName": "HandleGoogleLogin",
      "entryNodeId": "method:ulfoov:handlegooglelogin__entry",
      "exitNodeIds": [
        "method:ulfoov:handlegooglelogin__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ulfoov:handlegooglelogin__entry",
          "kind": "entry",
          "label": "HandleGoogleLogin entry",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.99,
          "detail": "Initiates external Google/OAuth login by navigating to the identity external-login route with forceLoad."
        },
        {
          "id": "method:ulfoov:handlegooglelogin__action_154_external_navigation_154__linear",
          "kind": "statement",
          "label": "Redirect to external provider",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "Calls NavigationManager.NavigateTo(\"identity/login/google\", forceLoad: true) to trigger Google auth flow (framework navigation)."
        },
        {
          "id": "method:ulfoov:handlegooglelogin__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ulfoov:handlegooglelogin__entry__method:ulfoov:handlegooglelogin__action_154_external_navigation_154__linear",
          "from": "method:ulfoov:handlegooglelogin__entry",
          "to": "method:ulfoov:handlegooglelogin__action_154_external_navigation_154__linear",
          "kind": "next",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:ulfoov:handlegooglelogin__action_154_external_navigation_154__linear__implicit_return",
          "from": "method:ulfoov:handlegooglelogin__action_154_external_navigation_154__linear",
          "to": "method:ulfoov:handlegooglelogin__implicit_return",
          "kind": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 154,
        "end": 154
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 154,
          "summary": "Control-flow fragment extracted for method HandleGoogleLogin.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:5hqhux:togglepassword__fragment",
      "ownerFileId": "file:csf9l7:login-razor",
      "ownerSymbolId": "method:5hqhux:togglepassword",
      "ownerSymbolName": "TogglePassword",
      "entryNodeId": "method:5hqhux:togglepassword__entry",
      "exitNodeIds": [
        "method:5hqhux:togglepassword__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:5hqhux:togglepassword__entry",
          "kind": "entry",
          "label": "TogglePassword entry",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.99,
          "detail": "Toggles password visibility state used by the input field."
        },
        {
          "id": "method:5hqhux:togglepassword__action_155_state_mutation_155__linear",
          "kind": "statement",
          "label": "Flip _showPassword",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7,
          "detail": "_showPassword = !_showPassword toggles input type between text and password."
        },
        {
          "id": "method:5hqhux:togglepassword__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:5hqhux:togglepassword__entry__method:5hqhux:togglepassword__action_155_state_mutation_155__linear",
          "from": "method:5hqhux:togglepassword__entry",
          "to": "method:5hqhux:togglepassword__action_155_state_mutation_155__linear",
          "kind": "next",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.7
        },
        {
          "id": "method:5hqhux:togglepassword__action_155_state_mutation_155__linear__implicit_return",
          "from": "method:5hqhux:togglepassword__action_155_state_mutation_155__linear",
          "to": "method:5hqhux:togglepassword__implicit_return",
          "kind": "return",
          "line": 155,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 155,
        "end": 155
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Login.razor",
          "line": 155,
          "summary": "Control-flow fragment extracted for method TogglePassword.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:hkgxib:render-markup__fragment",
      "ownerFileId": "file:11crtur:profile-razor",
      "ownerSymbolId": "method:hkgxib:render-markup",
      "ownerSymbolName": "Render (markup)",
      "entryNodeId": "method:hkgxib:render-markup__entry",
      "exitNodeIds": [
        "method:hkgxib:render-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:hkgxib:render-markup__entry",
          "kind": "entry",
          "label": "Render (markup) entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.99,
          "detail": "Renders the profile UI, shows loading state when _profile is null, binds profile fields into the UI, and wires button click handlers."
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition",
          "kind": "condition",
          "label": "_profile == null",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78,
          "detail": "@if (_profile == null)"
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__condition",
          "kind": "condition",
          "label": "_profile == null",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "If _profile is null shows loading markup (lines 16-19), otherwise renders profile content (lines 22-101)"
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__true",
          "kind": "branch-true",
          "label": "render-loading",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__false",
          "kind": "branch-false",
          "label": "render-profile",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_29_data_binding_29__linear",
          "kind": "statement",
          "label": "Bind profile fields into UI",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "Multiple bindings to _profile properties (Email, TenantId, AITokensUsed, AITokenLimit, AverageQuizScore, LastReadBookTitle, CurrentPlan)"
        },
        {
          "id": "method:hkgxib:render-markup__action_44_component_usage_44__linear",
          "kind": "statement",
          "label": "Uses NexusIcon components to render icons",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "Multiple NexusIcon component instances embedded in markup"
        },
        {
          "id": "method:hkgxib:render-markup__call_44_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "Name=\"robot\", Size=24, Color=var(--nexus-neon)"
        },
        {
          "id": "method:hkgxib:render-markup__call_55_CalculateProgress",
          "kind": "call",
          "label": "CalculateProgress",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:hkgxib:render-markup__call_65_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "Name=\"activity\", Size=24, Color=var(--nexus-neon)"
        },
        {
          "id": "method:hkgxib:render-markup__call_74_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "Name=\"book-open\", Size=14"
        },
        {
          "id": "method:hkgxib:render-markup__call_83_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "Name=\"shield\", Size=24, Color=var(--nexus-neon)"
        },
        {
          "id": "method:hkgxib:render-markup__action_92_event_handler_attachment_92__linear",
          "kind": "statement",
          "label": "Hook UI buttons to component handlers",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "Upgrade button @onclick -> HandleUpgrade (line 92); Logout button @onclick -> HandleLogout (line 93)"
        },
        {
          "id": "method:hkgxib:render-markup__call_94_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "Name=\"log-out\", Size=18"
        },
        {
          "id": "method:hkgxib:render-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:hkgxib:render-markup__entry__method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition",
          "from": "method:hkgxib:render-markup__entry",
          "to": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition__method:hkgxib:render-markup__action_14_render_markup_branch_14_0__true",
          "from": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition",
          "to": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition__method:hkgxib:render-markup__action_14_render_markup_branch_14_0__false",
          "from": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__condition",
          "to": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__true__method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "from": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__true",
          "to": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__false__method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "from": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__false",
          "to": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge__method:hkgxib:render-markup__action_14_guard_clause_14__condition",
          "from": "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
          "to": "method:hkgxib:render-markup__action_14_guard_clause_14__condition",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__condition__method:hkgxib:render-markup__action_14_guard_clause_14__true",
          "from": "method:hkgxib:render-markup__action_14_guard_clause_14__condition",
          "to": "method:hkgxib:render-markup__action_14_guard_clause_14__true",
          "kind": "condition-true",
          "label": "render-loading",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__condition__method:hkgxib:render-markup__action_14_guard_clause_14__false",
          "from": "method:hkgxib:render-markup__action_14_guard_clause_14__condition",
          "to": "method:hkgxib:render-markup__action_14_guard_clause_14__false",
          "kind": "condition-false",
          "label": "render-profile",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__true__method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "from": "method:hkgxib:render-markup__action_14_guard_clause_14__true",
          "to": "method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__false__method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "from": "method:hkgxib:render-markup__action_14_guard_clause_14__false",
          "to": "method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_14_guard_clause_14__merge__method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition",
          "from": "method:hkgxib:render-markup__action_14_guard_clause_14__merge",
          "to": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition",
          "kind": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition__method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__true",
          "from": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition",
          "to": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition__method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__false",
          "from": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__condition",
          "to": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__true__method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "from": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__true",
          "to": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__false__method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "from": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__false",
          "to": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.84
        },
        {
          "id": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge__method:hkgxib:render-markup__action_29_data_binding_29__linear",
          "from": "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge",
          "to": "method:hkgxib:render-markup__action_29_data_binding_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_29_data_binding_29__linear__method:hkgxib:render-markup__action_44_component_usage_44__linear",
          "from": "method:hkgxib:render-markup__action_29_data_binding_29__linear",
          "to": "method:hkgxib:render-markup__action_44_component_usage_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_44_component_usage_44__linear__call_method:hkgxib:render-markup__call_44_NexusIcon",
          "from": "method:hkgxib:render-markup__action_44_component_usage_44__linear",
          "to": "method:hkgxib:render-markup__call_44_NexusIcon",
          "kind": "call",
          "label": "Name=\"robot\", Size=24, Color=var(--nexus-neon)",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_44_NexusIcon__call_method:hkgxib:render-markup__call_55_CalculateProgress",
          "from": "method:hkgxib:render-markup__call_44_NexusIcon",
          "to": "method:hkgxib:render-markup__call_55_CalculateProgress",
          "kind": "call",
          "label": "none",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_55_CalculateProgress__call_method:hkgxib:render-markup__call_65_NexusIcon",
          "from": "method:hkgxib:render-markup__call_55_CalculateProgress",
          "to": "method:hkgxib:render-markup__call_65_NexusIcon",
          "kind": "call",
          "label": "Name=\"activity\", Size=24, Color=var(--nexus-neon)",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_65_NexusIcon__call_method:hkgxib:render-markup__call_74_NexusIcon",
          "from": "method:hkgxib:render-markup__call_65_NexusIcon",
          "to": "method:hkgxib:render-markup__call_74_NexusIcon",
          "kind": "call",
          "label": "Name=\"book-open\", Size=14",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_74_NexusIcon__call_method:hkgxib:render-markup__call_83_NexusIcon",
          "from": "method:hkgxib:render-markup__call_74_NexusIcon",
          "to": "method:hkgxib:render-markup__call_83_NexusIcon",
          "kind": "call",
          "label": "Name=\"shield\", Size=24, Color=var(--nexus-neon)",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_83_NexusIcon__method:hkgxib:render-markup__action_92_event_handler_attachment_92__linear",
          "from": "method:hkgxib:render-markup__call_83_NexusIcon",
          "to": "method:hkgxib:render-markup__action_92_event_handler_attachment_92__linear",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:hkgxib:render-markup__action_92_event_handler_attachment_92__linear__call_method:hkgxib:render-markup__call_94_NexusIcon",
          "from": "method:hkgxib:render-markup__action_92_event_handler_attachment_92__linear",
          "to": "method:hkgxib:render-markup__call_94_NexusIcon",
          "kind": "call",
          "label": "Name=\"log-out\", Size=18",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:hkgxib:render-markup__call_94_NexusIcon__implicit_return",
          "from": "method:hkgxib:render-markup__call_94_NexusIcon",
          "to": "method:hkgxib:render-markup__implicit_return",
          "kind": "return",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:hkgxib:render-markup__call_44_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:hkgxib:render-markup__call_44_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:hkgxib:render-markup__call_55_CalculateProgress__jump_NexusReader_UI_Shared_Pages_Account_Profile_razor_CalculateProgress",
          "fromNodeId": "method:hkgxib:render-markup__call_55_CalculateProgress",
          "kind": "call-target",
          "targetNodeId": "method:k7fbfq:calculateprogress",
          "targetPath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "targetHint": "CalculateProgress",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target CalculateProgress resolved to NexusReader.UI.Shared/Pages/Account/Profile.razor.",
          "status": "resolved"
        },
        {
          "id": "method:hkgxib:render-markup__call_65_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:hkgxib:render-markup__call_65_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:hkgxib:render-markup__call_74_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:hkgxib:render-markup__call_74_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:hkgxib:render-markup__call_83_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:hkgxib:render-markup__call_83_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:hkgxib:render-markup__call_94_NexusIcon__jump_NexusReader_UI_Shared_Components_Atoms_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:hkgxib:render-markup__call_94_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:hkgxib:render-markup__action_14_render_markup_branch_14_0__merge",
        "method:hkgxib:render-markup__action_14_guard_clause_14__merge",
        "method:hkgxib:render-markup__action_21_render_markup_fallback_21_1__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 1,
        "end": 106
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method Render (markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:z1n8tn:oninitializedasync__fragment",
      "ownerFileId": "file:11crtur:profile-razor",
      "ownerSymbolId": "method:z1n8tn:oninitializedasync",
      "ownerSymbolName": "OnInitializedAsync",
      "entryNodeId": "method:z1n8tn:oninitializedasync__entry",
      "exitNodeIds": [
        "method:z1n8tn:oninitializedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:z1n8tn:oninitializedasync__entry",
          "kind": "entry",
          "label": "OnInitializedAsync entry",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.99,
          "detail": "Lifecycle init method: asynchronously requests the current user's profile from IdentityService and updates component state."
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_113_oninitializedasync_await_113_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.81,
          "detail": "var result = await IdentityService.GetProfileAsync();"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_113_external_call_113__linear",
          "kind": "http-call",
          "label": "Fetch profile from identity service",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.GetProfileAsync()"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "If IsSuccess sets _profile = result.Value (line 116); otherwise leaves _profile null"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__true",
          "kind": "branch-true",
          "label": "assign-_profile",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_118_state_change_118__linear",
          "kind": "statement",
          "label": "Trigger UI refresh",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "StateHasChanged() invoked to update the rendered UI after profile assignment"
        },
        {
          "id": "method:z1n8tn:oninitializedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:z1n8tn:oninitializedasync__entry__method:z1n8tn:oninitializedasync__action_113_oninitializedasync_await_113_0__await",
          "from": "method:z1n8tn:oninitializedasync__entry",
          "to": "method:z1n8tn:oninitializedasync__action_113_oninitializedasync_await_113_0__await",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.81
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_113_oninitializedasync_await_113_0__await__method:z1n8tn:oninitializedasync__action_113_external_call_113__linear",
          "from": "method:z1n8tn:oninitializedasync__action_113_oninitializedasync_await_113_0__await",
          "to": "method:z1n8tn:oninitializedasync__action_113_external_call_113__linear",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_113_external_call_113__linear__call_method:z1n8tn:oninitializedasync__call_113_GetProfileAsync",
          "from": "method:z1n8tn:oninitializedasync__action_113_external_call_113__linear",
          "to": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync",
          "kind": "call",
          "label": "none",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync__method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition",
          "from": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync",
          "to": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition__method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__true",
          "from": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition",
          "to": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition__method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__false",
          "from": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__condition",
          "to": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__true__method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "from": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__true",
          "to": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__false__method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "from": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__false",
          "to": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.78
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge__method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition",
          "from": "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
          "to": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition__method:z1n8tn:oninitializedasync__action_114_guard_clause_114__true",
          "from": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition",
          "to": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__true",
          "kind": "condition-true",
          "label": "assign-_profile",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition__method:z1n8tn:oninitializedasync__action_114_guard_clause_114__false",
          "from": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__condition",
          "to": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__true__method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "from": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__true",
          "to": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__false__method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "from": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__false",
          "to": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge__method:z1n8tn:oninitializedasync__action_118_state_change_118__linear",
          "from": "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge",
          "to": "method:z1n8tn:oninitializedasync__action_118_state_change_118__linear",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z1n8tn:oninitializedasync__action_118_state_change_118__linear__implicit_return",
          "from": "method:z1n8tn:oninitializedasync__action_118_state_change_118__linear",
          "to": "method:z1n8tn:oninitializedasync__implicit_return",
          "kind": "return",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync__jump_NexusReader_UI_Shared_Services_IIdentityService_cs_GetProfileAsync",
          "fromNodeId": "method:z1n8tn:oninitializedasync__call_113_GetProfileAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
          "targetHint": "GetProfileAsync",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target GetProfileAsync in NexusReader.UI.Shared/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:z1n8tn:oninitializedasync__action_114_oninitializedasync_branch_114_1__merge",
        "method:z1n8tn:oninitializedasync__action_114_guard_clause_114__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 111,
        "end": 119
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 111,
          "summary": "Control-flow fragment extracted for method OnInitializedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:k7fbfq:calculateprogress__fragment",
      "ownerFileId": "file:11crtur:profile-razor",
      "ownerSymbolId": "method:k7fbfq:calculateprogress",
      "ownerSymbolName": "CalculateProgress",
      "entryNodeId": "method:k7fbfq:calculateprogress__entry",
      "exitNodeIds": [
        "method:k7fbfq:calculateprogress__action_125_calculateprogress_return_125_1__return"
      ],
      "nodes": [
        {
          "id": "method:k7fbfq:calculateprogress__entry",
          "kind": "entry",
          "label": "CalculateProgress entry",
          "line": 121,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.99,
          "detail": "Calculates percentage of AI tokens used and clamps it to a maximum of 100."
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition",
          "kind": "condition",
          "label": "_profile == null || _profile.AITokenLimit == 0",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9,
          "detail": "if (_profile == null || _profile.AITokenLimit == 0) return 0;"
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition",
          "kind": "condition",
          "label": "_profile == null || _profile.AITokenLimit == 0",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "Returns 0 when no profile or limit is zero"
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__true",
          "kind": "branch-true",
          "label": "return-0",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__false",
          "kind": "branch-false",
          "label": "compute-percent",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "kind": "statement",
          "label": "merge",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_124_calculation_124__linear",
          "kind": "statement",
          "label": "Compute percentage and cap",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "Computes percent = (AITokensUsed / AITokenLimit) * 100 and returns Math.Min(percent, 100)"
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_125_calculateprogress_return_125_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 125,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "return Math.Min(percent, 100);"
        }
      ],
      "edges": [
        {
          "id": "method:k7fbfq:calculateprogress__entry__method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition",
          "from": "method:k7fbfq:calculateprogress__entry",
          "to": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition__method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__true",
          "from": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition",
          "to": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition__method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__false",
          "from": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__condition",
          "to": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__true__method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "from": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__true",
          "to": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__false__method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "from": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__false",
          "to": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.9
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge__method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition",
          "from": "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
          "to": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition__method:k7fbfq:calculateprogress__action_123_guard_clause_123__true",
          "from": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition",
          "to": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__true",
          "kind": "condition-true",
          "label": "return-0",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition__method:k7fbfq:calculateprogress__action_123_guard_clause_123__false",
          "from": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__condition",
          "to": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__false",
          "kind": "condition-false",
          "label": "compute-percent",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__true__method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "from": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__true",
          "to": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__false__method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "from": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__false",
          "to": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge__method:k7fbfq:calculateprogress__action_124_calculation_124__linear",
          "from": "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge",
          "to": "method:k7fbfq:calculateprogress__action_124_calculation_124__linear",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:k7fbfq:calculateprogress__action_124_calculation_124__linear__method:k7fbfq:calculateprogress__action_125_calculateprogress_return_125_1__return",
          "from": "method:k7fbfq:calculateprogress__action_124_calculation_124__linear",
          "to": "method:k7fbfq:calculateprogress__action_125_calculateprogress_return_125_1__return",
          "kind": "return",
          "line": 125,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:k7fbfq:calculateprogress__action_123_calculateprogress_guard_clause_123_0__merge",
        "method:k7fbfq:calculateprogress__action_123_guard_clause_123__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 121,
        "end": 126
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 121,
          "summary": "Control-flow fragment extracted for method CalculateProgress.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:12nkjhc:handleupgrade__fragment",
      "ownerFileId": "file:11crtur:profile-razor",
      "ownerSymbolId": "method:12nkjhc:handleupgrade",
      "ownerSymbolName": "HandleUpgrade",
      "entryNodeId": "method:12nkjhc:handleupgrade__entry",
      "exitNodeIds": [
        "method:12nkjhc:handleupgrade__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:12nkjhc:handleupgrade__entry",
          "kind": "entry",
          "label": "HandleUpgrade entry",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.99,
          "detail": "Placeholder click handler intended to redirect user to billing/upgrade flow (not yet implemented)."
        },
        {
          "id": "method:12nkjhc:handleupgrade__action_130_placeholder_130__linear",
          "kind": "statement",
          "label": "Future redirect to billing portal",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "// Future: Redirect to Stripe billing portal"
        },
        {
          "id": "method:12nkjhc:handleupgrade__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:12nkjhc:handleupgrade__entry__method:12nkjhc:handleupgrade__action_130_placeholder_130__linear",
          "from": "method:12nkjhc:handleupgrade__entry",
          "to": "method:12nkjhc:handleupgrade__action_130_placeholder_130__linear",
          "kind": "next",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:12nkjhc:handleupgrade__action_130_placeholder_130__linear__implicit_return",
          "from": "method:12nkjhc:handleupgrade__action_130_placeholder_130__linear",
          "to": "method:12nkjhc:handleupgrade__implicit_return",
          "kind": "return",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 128,
        "end": 131
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 128,
          "summary": "Control-flow fragment extracted for method HandleUpgrade.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jxczws:handlelogout__fragment",
      "ownerFileId": "file:11crtur:profile-razor",
      "ownerSymbolId": "method:1jxczws:handlelogout",
      "ownerSymbolName": "HandleLogout",
      "entryNodeId": "method:1jxczws:handlelogout__entry",
      "exitNodeIds": [
        "method:1jxczws:handlelogout__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jxczws:handlelogout__entry",
          "kind": "entry",
          "label": "HandleLogout entry",
          "line": 133,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.99,
          "detail": "Performs logout by calling IdentityService.LogoutAsync and then navigates to the logout form route."
        },
        {
          "id": "method:1jxczws:handlelogout__action_135_handlelogout_await_135_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.81,
          "detail": "await IdentityService.LogoutAsync();"
        },
        {
          "id": "method:1jxczws:handlelogout__action_135_external_call_135__linear",
          "kind": "http-call",
          "label": "Invoke logout on identity service",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.LogoutAsync()"
        },
        {
          "id": "method:1jxczws:handlelogout__call_135_LogoutAsync",
          "kind": "call",
          "label": "LogoutAsync",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1jxczws:handlelogout__action_136_navigation_136__linear",
          "kind": "statement",
          "label": "Redirect to logout route",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/account/logout-form\", true)"
        },
        {
          "id": "method:1jxczws:handlelogout__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jxczws:handlelogout__entry__method:1jxczws:handlelogout__action_135_handlelogout_await_135_0__await",
          "from": "method:1jxczws:handlelogout__entry",
          "to": "method:1jxczws:handlelogout__action_135_handlelogout_await_135_0__await",
          "kind": "next",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1jxczws:handlelogout__action_135_handlelogout_await_135_0__await__method:1jxczws:handlelogout__action_135_external_call_135__linear",
          "from": "method:1jxczws:handlelogout__action_135_handlelogout_await_135_0__await",
          "to": "method:1jxczws:handlelogout__action_135_external_call_135__linear",
          "kind": "next",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1jxczws:handlelogout__action_135_external_call_135__linear__call_method:1jxczws:handlelogout__call_135_LogoutAsync",
          "from": "method:1jxczws:handlelogout__action_135_external_call_135__linear",
          "to": "method:1jxczws:handlelogout__call_135_LogoutAsync",
          "kind": "call",
          "label": "none",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1jxczws:handlelogout__call_135_LogoutAsync__method:1jxczws:handlelogout__action_136_navigation_136__linear",
          "from": "method:1jxczws:handlelogout__call_135_LogoutAsync",
          "to": "method:1jxczws:handlelogout__action_136_navigation_136__linear",
          "kind": "next",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1jxczws:handlelogout__action_136_navigation_136__linear__implicit_return",
          "from": "method:1jxczws:handlelogout__action_136_navigation_136__linear",
          "to": "method:1jxczws:handlelogout__implicit_return",
          "kind": "return",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1jxczws:handlelogout__call_135_LogoutAsync__jump_NexusReader_UI_Shared_Services_IIdentityService_cs_LogoutAsync",
          "fromNodeId": "method:1jxczws:handlelogout__call_135_LogoutAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
          "targetHint": "LogoutAsync",
          "line": 135,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "reason": "Call target LogoutAsync in NexusReader.UI.Shared/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 133,
        "end": 137
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor",
          "line": 133,
          "summary": "Control-flow fragment extracted for method HandleLogout.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mj67eu:handleregister__fragment",
      "ownerFileId": "file:1hn70tz:register-razor",
      "ownerSymbolId": "method:mj67eu:handleregister",
      "ownerSymbolName": "HandleRegister",
      "entryNodeId": "method:mj67eu:handleregister__entry",
      "exitNodeIds": [
        "method:mj67eu:handleregister__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mj67eu:handleregister__entry",
          "kind": "entry",
          "label": "HandleRegister entry",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.99,
          "detail": "Handles the registration form submission: calls identity service to register, attempts immediate login, triggers a hidden form submission via JS to establish cookie-based auth, and surfaces errors to the UI."
        },
        {
          "id": "method:mj67eu:handleregister__action_86_state_change_86__linear",
          "kind": "statement",
          "label": "mark submitting",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "_isSubmitting = true"
        },
        {
          "id": "method:mj67eu:handleregister__action_87_state_change_87__linear",
          "kind": "statement",
          "label": "clear error",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "_errorMessage = null"
        },
        {
          "id": "method:mj67eu:handleregister__action_89_try_catch_finally_89__linear",
          "kind": "statement",
          "label": "wraps registration and login",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception) { ... } finally { _isSubmitting = false; }"
        },
        {
          "id": "method:mj67eu:handleregister__action_89_handleregister_try_89_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:mj67eu:handleregister__action_91_handleregister_await_91_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81,
          "detail": "var regResult = await IdentityService.RegisterAsync(_registerModel.Email, _registerModel.Password);"
        },
        {
          "id": "method:mj67eu:handleregister__action_91_external_call_91__linear",
          "kind": "http-call",
          "label": "register user",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.RegisterAsync(email, password)"
        },
        {
          "id": "method:mj67eu:handleregister__call_91_RegisterAsync",
          "kind": "call",
          "label": "RegisterAsync",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.88,
          "detail": "(_registerModel.Email, _registerModel.Password)"
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__condition",
          "kind": "condition",
          "label": "regResult.IsSuccess",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "If success proceed to login; else set error message from regResult.Errors or default message"
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__true",
          "kind": "branch-true",
          "label": "success -> attempt login",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__false",
          "kind": "branch-false",
          "label": "failure -> show error",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition",
          "kind": "condition",
          "label": "regResult.IsSuccess",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78,
          "detail": "if (regResult.IsSuccess)"
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_94_handleregister_await_94_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81,
          "detail": "var loginResult = await IdentityService.LoginAsync(_registerModel.Email, _registerModel.Password);"
        },
        {
          "id": "method:mj67eu:handleregister__action_94_external_call_94__linear",
          "kind": "http-call",
          "label": "login user (programmatic)",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.LoginAsync(email, password)"
        },
        {
          "id": "method:mj67eu:handleregister__call_94_LoginAsync",
          "kind": "call",
          "label": "LoginAsync",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.88,
          "detail": "(_registerModel.Email, _registerModel.Password)"
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__condition",
          "kind": "condition",
          "label": "loginResult.IsSuccess",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "On success use JS helper to submit hidden form; on failure navigate to /account/login"
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__true",
          "kind": "branch-true",
          "label": "success -> submit hidden form via JS",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__false",
          "kind": "branch-false",
          "label": "failure -> navigate to login page",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__merge",
          "kind": "statement",
          "label": "merge",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition",
          "kind": "condition",
          "label": "loginResult.IsSuccess",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78,
          "detail": "if (loginResult.IsSuccess)"
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_98_handleregister_await_98_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81,
          "detail": "await JS.InvokeVoidAsync(\"nexusAuth.submitLoginForm\", \"nexusLoginForm\", _registerModel.Email, _registerModel.Password, false);"
        },
        {
          "id": "method:mj67eu:handleregister__action_98_external_js_98__linear",
          "kind": "statement",
          "label": "submit hidden login form for cookie sign-in",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "await JS.InvokeVoidAsync(\"nexusAuth.submitLoginForm\", \"nexusLoginForm\", email, password, false)"
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_102_navigation_102__linear",
          "kind": "statement",
          "label": "fallback navigate to login page",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "NavigationManager.NavigateTo(\"/account/login\") on login failure"
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_107_set_error_107__linear",
          "kind": "statement",
          "label": "set registration error from service",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\""
        },
        {
          "id": "method:mj67eu:handleregister__action_107_handleregister_repository_read_107_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.86,
          "detail": "_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? \"Rejestracja nie powiodła się.\";"
        },
        {
          "id": "method:mj67eu:handleregister__action_110_handleregister_catch_110_9__catch",
          "kind": "catch",
          "label": "catch Exception",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.86,
          "detail": "catch (Exception)"
        },
        {
          "id": "method:mj67eu:handleregister__action_111_exception_handle_111__linear",
          "kind": "statement",
          "label": "generic error on exception",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "_errorMessage = \"Wystąpił błąd podczas rejestracji.\""
        },
        {
          "id": "method:mj67eu:handleregister__action_114_handleregister_finally_114_10__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:mj67eu:handleregister__action_116_state_change_116__linear",
          "kind": "statement",
          "label": "clear submitting flag",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7,
          "detail": "_isSubmitting = false (finally)"
        },
        {
          "id": "method:mj67eu:handleregister__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mj67eu:handleregister__entry__method:mj67eu:handleregister__action_86_state_change_86__linear",
          "from": "method:mj67eu:handleregister__entry",
          "to": "method:mj67eu:handleregister__action_86_state_change_86__linear",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_86_state_change_86__linear__method:mj67eu:handleregister__action_87_state_change_87__linear",
          "from": "method:mj67eu:handleregister__action_86_state_change_86__linear",
          "to": "method:mj67eu:handleregister__action_87_state_change_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_87_state_change_87__linear__method:mj67eu:handleregister__action_89_try_catch_finally_89__linear",
          "from": "method:mj67eu:handleregister__action_87_state_change_87__linear",
          "to": "method:mj67eu:handleregister__action_89_try_catch_finally_89__linear",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_89_try_catch_finally_89__linear__method:mj67eu:handleregister__action_89_handleregister_try_89_0__try",
          "from": "method:mj67eu:handleregister__action_89_try_catch_finally_89__linear",
          "to": "method:mj67eu:handleregister__action_89_handleregister_try_89_0__try",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_89_handleregister_try_89_0__try__method:mj67eu:handleregister__action_91_handleregister_await_91_1__await",
          "from": "method:mj67eu:handleregister__action_89_handleregister_try_89_0__try",
          "to": "method:mj67eu:handleregister__action_91_handleregister_await_91_1__await",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81
        },
        {
          "id": "method:mj67eu:handleregister__action_91_handleregister_await_91_1__await__method:mj67eu:handleregister__action_91_external_call_91__linear",
          "from": "method:mj67eu:handleregister__action_91_handleregister_await_91_1__await",
          "to": "method:mj67eu:handleregister__action_91_external_call_91__linear",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_91_external_call_91__linear__call_method:mj67eu:handleregister__call_91_RegisterAsync",
          "from": "method:mj67eu:handleregister__action_91_external_call_91__linear",
          "to": "method:mj67eu:handleregister__call_91_RegisterAsync",
          "kind": "call",
          "label": "(_registerModel.Email, _registerModel.Password)",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.88
        },
        {
          "id": "method:mj67eu:handleregister__call_91_RegisterAsync__method:mj67eu:handleregister__action_92_branch_92__condition",
          "from": "method:mj67eu:handleregister__call_91_RegisterAsync",
          "to": "method:mj67eu:handleregister__action_92_branch_92__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__condition__method:mj67eu:handleregister__action_92_branch_92__true",
          "from": "method:mj67eu:handleregister__action_92_branch_92__condition",
          "to": "method:mj67eu:handleregister__action_92_branch_92__true",
          "kind": "condition-true",
          "label": "success -> attempt login",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__condition__method:mj67eu:handleregister__action_92_branch_92__false",
          "from": "method:mj67eu:handleregister__action_92_branch_92__condition",
          "to": "method:mj67eu:handleregister__action_92_branch_92__false",
          "kind": "condition-false",
          "label": "failure -> show error",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__true__method:mj67eu:handleregister__action_92_branch_92__merge",
          "from": "method:mj67eu:handleregister__action_92_branch_92__true",
          "to": "method:mj67eu:handleregister__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__false__method:mj67eu:handleregister__action_92_branch_92__merge",
          "from": "method:mj67eu:handleregister__action_92_branch_92__false",
          "to": "method:mj67eu:handleregister__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_92_branch_92__merge__method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition",
          "from": "method:mj67eu:handleregister__action_92_branch_92__merge",
          "to": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition__method:mj67eu:handleregister__action_92_handleregister_branch_92_2__true",
          "from": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition",
          "to": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition__method:mj67eu:handleregister__action_92_handleregister_branch_92_2__false",
          "from": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__condition",
          "to": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__true__method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "from": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__true",
          "to": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__false__method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "from": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__false",
          "to": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge__method:mj67eu:handleregister__action_94_handleregister_await_94_3__await",
          "from": "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
          "to": "method:mj67eu:handleregister__action_94_handleregister_await_94_3__await",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81
        },
        {
          "id": "method:mj67eu:handleregister__action_94_handleregister_await_94_3__await__method:mj67eu:handleregister__action_94_external_call_94__linear",
          "from": "method:mj67eu:handleregister__action_94_handleregister_await_94_3__await",
          "to": "method:mj67eu:handleregister__action_94_external_call_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_94_external_call_94__linear__call_method:mj67eu:handleregister__call_94_LoginAsync",
          "from": "method:mj67eu:handleregister__action_94_external_call_94__linear",
          "to": "method:mj67eu:handleregister__call_94_LoginAsync",
          "kind": "call",
          "label": "(_registerModel.Email, _registerModel.Password)",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.88
        },
        {
          "id": "method:mj67eu:handleregister__call_94_LoginAsync__method:mj67eu:handleregister__action_95_branch_95__condition",
          "from": "method:mj67eu:handleregister__call_94_LoginAsync",
          "to": "method:mj67eu:handleregister__action_95_branch_95__condition",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__condition__method:mj67eu:handleregister__action_95_branch_95__true",
          "from": "method:mj67eu:handleregister__action_95_branch_95__condition",
          "to": "method:mj67eu:handleregister__action_95_branch_95__true",
          "kind": "condition-true",
          "label": "success -> submit hidden form via JS",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__condition__method:mj67eu:handleregister__action_95_branch_95__false",
          "from": "method:mj67eu:handleregister__action_95_branch_95__condition",
          "to": "method:mj67eu:handleregister__action_95_branch_95__false",
          "kind": "condition-false",
          "label": "failure -> navigate to login page",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__true__method:mj67eu:handleregister__action_95_branch_95__merge",
          "from": "method:mj67eu:handleregister__action_95_branch_95__true",
          "to": "method:mj67eu:handleregister__action_95_branch_95__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__false__method:mj67eu:handleregister__action_95_branch_95__merge",
          "from": "method:mj67eu:handleregister__action_95_branch_95__false",
          "to": "method:mj67eu:handleregister__action_95_branch_95__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_95_branch_95__merge__method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition",
          "from": "method:mj67eu:handleregister__action_95_branch_95__merge",
          "to": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition__method:mj67eu:handleregister__action_95_handleregister_branch_95_4__true",
          "from": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition",
          "to": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition__method:mj67eu:handleregister__action_95_handleregister_branch_95_4__false",
          "from": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__condition",
          "to": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__true__method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "from": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__true",
          "to": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__false__method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "from": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__false",
          "to": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.78
        },
        {
          "id": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge__method:mj67eu:handleregister__action_98_handleregister_await_98_5__await",
          "from": "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
          "to": "method:mj67eu:handleregister__action_98_handleregister_await_98_5__await",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.81
        },
        {
          "id": "method:mj67eu:handleregister__action_98_handleregister_await_98_5__await__method:mj67eu:handleregister__action_98_external_js_98__linear",
          "from": "method:mj67eu:handleregister__action_98_handleregister_await_98_5__await",
          "to": "method:mj67eu:handleregister__action_98_external_js_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_98_external_js_98__linear__method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition",
          "from": "method:mj67eu:handleregister__action_98_external_js_98__linear",
          "to": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition",
          "kind": "fallback",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition__method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__true",
          "from": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition",
          "to": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition__method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__false",
          "from": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__condition",
          "to": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__true__method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "from": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__true",
          "to": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__false__method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "from": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__false",
          "to": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge__method:mj67eu:handleregister__action_102_navigation_102__linear",
          "from": "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
          "to": "method:mj67eu:handleregister__action_102_navigation_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_102_navigation_102__linear__method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition",
          "from": "method:mj67eu:handleregister__action_102_navigation_102__linear",
          "to": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition",
          "kind": "fallback",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition__method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__true",
          "from": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition",
          "to": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition__method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__false",
          "from": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__condition",
          "to": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__true__method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "from": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__true",
          "to": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__false__method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "from": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__false",
          "to": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge__method:mj67eu:handleregister__action_107_set_error_107__linear",
          "from": "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge",
          "to": "method:mj67eu:handleregister__action_107_set_error_107__linear",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_107_set_error_107__linear__method:mj67eu:handleregister__action_107_handleregister_repository_read_107_8__linear",
          "from": "method:mj67eu:handleregister__action_107_set_error_107__linear",
          "to": "method:mj67eu:handleregister__action_107_handleregister_repository_read_107_8__linear",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.86
        },
        {
          "id": "method:mj67eu:handleregister__action_107_handleregister_repository_read_107_8__linear__method:mj67eu:handleregister__action_110_handleregister_catch_110_9__catch",
          "from": "method:mj67eu:handleregister__action_107_handleregister_repository_read_107_8__linear",
          "to": "method:mj67eu:handleregister__action_110_handleregister_catch_110_9__catch",
          "kind": "exception",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.86
        },
        {
          "id": "method:mj67eu:handleregister__action_110_handleregister_catch_110_9__catch__method:mj67eu:handleregister__action_111_exception_handle_111__linear",
          "from": "method:mj67eu:handleregister__action_110_handleregister_catch_110_9__catch",
          "to": "method:mj67eu:handleregister__action_111_exception_handle_111__linear",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_111_exception_handle_111__linear__method:mj67eu:handleregister__action_114_handleregister_finally_114_10__finally",
          "from": "method:mj67eu:handleregister__action_111_exception_handle_111__linear",
          "to": "method:mj67eu:handleregister__action_114_handleregister_finally_114_10__finally",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.84
        },
        {
          "id": "method:mj67eu:handleregister__action_114_handleregister_finally_114_10__finally__method:mj67eu:handleregister__action_116_state_change_116__linear",
          "from": "method:mj67eu:handleregister__action_114_handleregister_finally_114_10__finally",
          "to": "method:mj67eu:handleregister__action_116_state_change_116__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.7
        },
        {
          "id": "method:mj67eu:handleregister__action_116_state_change_116__linear__implicit_return",
          "from": "method:mj67eu:handleregister__action_116_state_change_116__linear",
          "to": "method:mj67eu:handleregister__implicit_return",
          "kind": "return",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mj67eu:handleregister__call_91_RegisterAsync__jump_NexusReader_UI_Shared_Services_IIdentityService_cs_RegisterAsync",
          "fromNodeId": "method:mj67eu:handleregister__call_91_RegisterAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
          "targetHint": "RegisterAsync",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "reason": "Call target RegisterAsync in NexusReader.UI.Shared/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:mj67eu:handleregister__call_94_LoginAsync__jump_NexusReader_UI_Shared_Services_IIdentityService_cs_LoginAsync",
          "fromNodeId": "method:mj67eu:handleregister__call_94_LoginAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
          "targetHint": "LoginAsync",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "reason": "Call target LoginAsync in NexusReader.UI.Shared/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:mj67eu:handleregister__action_92_branch_92__merge",
        "method:mj67eu:handleregister__action_92_handleregister_branch_92_2__merge",
        "method:mj67eu:handleregister__action_95_branch_95__merge",
        "method:mj67eu:handleregister__action_95_handleregister_branch_95_4__merge",
        "method:mj67eu:handleregister__action_100_handleregister_fallback_100_6__merge",
        "method:mj67eu:handleregister__action_105_handleregister_fallback_105_7__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 84,
        "end": 118
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Account/Register.razor",
          "line": 84,
          "summary": "Control-flow fragment extracted for method HandleRegister.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:lqrlha:oninitializedasync__fragment",
      "ownerFileId": "file:1b5rrku:dashboard-razor",
      "ownerSymbolId": "method:lqrlha:oninitializedasync",
      "ownerSymbolName": "OnInitializedAsync",
      "entryNodeId": "method:lqrlha:oninitializedasync__entry",
      "exitNodeIds": [
        "method:lqrlha:oninitializedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:lqrlha:oninitializedasync__entry",
          "kind": "entry",
          "label": "OnInitializedAsync entry",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.99,
          "detail": "Component lifecycle method: asynchronously fetches the current user's profile when the dashboard initializes and stores it in component state."
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_92_oninitializedasync_await_92_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.81,
          "detail": "var result = await IdentityService.GetProfileAsync();"
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_92_external_call_92__linear",
          "kind": "http-call",
          "label": "Fetch user profile",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7,
          "detail": "await IdentityService.GetProfileAsync()"
        },
        {
          "id": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.88,
          "detail": "no parameters; awaited call to retrieve user profile result"
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7,
          "detail": "if (result.IsSuccess) { _profile = result.Value; }"
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__true",
          "kind": "branch-true",
          "label": "set _profile",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__false",
          "kind": "branch-false",
          "label": "no-op on failure",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_95_state_mutation_95__linear",
          "kind": "statement",
          "label": "Store profile in local state",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7,
          "detail": "_profile = result.Value"
        },
        {
          "id": "method:lqrlha:oninitializedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:lqrlha:oninitializedasync__entry__method:lqrlha:oninitializedasync__action_92_oninitializedasync_await_92_0__await",
          "from": "method:lqrlha:oninitializedasync__entry",
          "to": "method:lqrlha:oninitializedasync__action_92_oninitializedasync_await_92_0__await",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.81
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_92_oninitializedasync_await_92_0__await__method:lqrlha:oninitializedasync__action_92_external_call_92__linear",
          "from": "method:lqrlha:oninitializedasync__action_92_oninitializedasync_await_92_0__await",
          "to": "method:lqrlha:oninitializedasync__action_92_external_call_92__linear",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_92_external_call_92__linear__call_method:lqrlha:oninitializedasync__call_92_GetProfileAsync",
          "from": "method:lqrlha:oninitializedasync__action_92_external_call_92__linear",
          "to": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync",
          "kind": "call",
          "label": "no parameters; awaited call to retrieve user profile result",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.88
        },
        {
          "id": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync__method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition",
          "from": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync",
          "to": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition__method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__true",
          "from": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition",
          "to": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition__method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__false",
          "from": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__condition",
          "to": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__true__method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "from": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__true",
          "to": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__false__method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "from": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__false",
          "to": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.78
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge__method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition",
          "from": "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
          "to": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition__method:lqrlha:oninitializedasync__action_93_guard_clause_93__true",
          "from": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition",
          "to": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__true",
          "kind": "condition-true",
          "label": "set _profile",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition__method:lqrlha:oninitializedasync__action_93_guard_clause_93__false",
          "from": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__condition",
          "to": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__false",
          "kind": "condition-false",
          "label": "no-op on failure",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__true__method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "from": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__true",
          "to": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__false__method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "from": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__false",
          "to": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge__method:lqrlha:oninitializedasync__action_95_state_mutation_95__linear",
          "from": "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge",
          "to": "method:lqrlha:oninitializedasync__action_95_state_mutation_95__linear",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.7
        },
        {
          "id": "method:lqrlha:oninitializedasync__action_95_state_mutation_95__linear__implicit_return",
          "from": "method:lqrlha:oninitializedasync__action_95_state_mutation_95__linear",
          "to": "method:lqrlha:oninitializedasync__implicit_return",
          "kind": "return",
          "line": 97,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync__jump_unknown_GetProfileAsync",
          "fromNodeId": "method:lqrlha:oninitializedasync__call_92_GetProfileAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetProfileAsync",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "reason": "Call target GetProfileAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:lqrlha:oninitializedasync__action_93_oninitializedasync_branch_93_1__merge",
        "method:lqrlha:oninitializedasync__action_93_guard_clause_93__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 90,
        "end": 97
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Dashboard.razor",
          "line": 90,
          "summary": "Control-flow fragment extracted for method OnInitializedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1yypduz:oninitialized__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:1yypduz:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:1yypduz:oninitialized__entry",
      "exitNodeIds": [
        "method:1yypduz:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1yypduz:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "Subscribe to UI-level events for quiz requests and focus-mode changes when the component is initialized."
        },
        {
          "id": "method:1yypduz:oninitialized__action_32_event_subscribe_32__linear",
          "kind": "statement",
          "label": "Subscribe to QuizState.OnQuizRequested",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "QuizState.OnQuizRequested += HandleQuizRequestedAsync"
        },
        {
          "id": "method:1yypduz:oninitialized__action_33_event_subscribe_33__linear",
          "kind": "statement",
          "label": "Subscribe to FocusMode.OnFocusModeChanged",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged += HandleUpdate"
        },
        {
          "id": "method:1yypduz:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1yypduz:oninitialized__entry__method:1yypduz:oninitialized__action_32_event_subscribe_32__linear",
          "from": "method:1yypduz:oninitialized__entry",
          "to": "method:1yypduz:oninitialized__action_32_event_subscribe_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1yypduz:oninitialized__action_32_event_subscribe_32__linear__method:1yypduz:oninitialized__action_33_event_subscribe_33__linear",
          "from": "method:1yypduz:oninitialized__action_32_event_subscribe_32__linear",
          "to": "method:1yypduz:oninitialized__action_33_event_subscribe_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1yypduz:oninitialized__action_33_event_subscribe_33__linear__implicit_return",
          "from": "method:1yypduz:oninitialized__action_33_event_subscribe_33__linear",
          "to": "method:1yypduz:oninitialized__implicit_return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 30,
        "end": 34
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 30,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:p5ejmn:onparameterssetasync__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:p5ejmn:onparameterssetasync",
      "ownerSymbolName": "OnParametersSetAsync",
      "entryNodeId": "method:p5ejmn:onparameterssetasync__entry",
      "exitNodeIds": [
        "method:p5ejmn:onparameterssetasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:p5ejmn:onparameterssetasync__entry",
          "kind": "entry",
          "label": "OnParametersSetAsync entry",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "React to route/query changes: parse chapter query, determine BookId from route or fallback to last-read book from profile, and instruct navigation service to load the correct book/chapter."
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_parse_40__linear",
          "kind": "statement",
          "label": "Query parsing",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Parses `chapter` from URL query and tries to convert to int"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition",
          "kind": "condition",
          "label": "Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query).TryGetValue(\"chapter\", out var chapterValue)",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query).TryGetValue(\"chapter\", out var chapterValue))"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition",
          "kind": "condition",
          "label": "BookId.HasValue && BookId != Guid.Empty",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "If NavService differs from requested book/chapter, call SetBook (line 47-50)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__true",
          "kind": "branch-true",
          "label": "maybe SetBook",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition",
          "kind": "condition",
          "label": "BookId.HasValue && BookId.Value != Guid.Empty",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (BookId.HasValue && BookId.Value != Guid.Empty)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition",
          "kind": "condition",
          "label": "NavService.CurrentEbookId != BookId.Value || NavService.CurrentChapterIndex != chapterIndex",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (NavService.CurrentEbookId != BookId.Value || NavService.CurrentChapterIndex != chapterIndex)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_49_SetBook",
          "kind": "call",
          "label": "SetBook",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "BookId.Value, chapterIndex (from query)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84,
          "detail": "else if (NavService.CurrentEbookId == Guid.Empty)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition",
          "kind": "condition",
          "label": "NavService.CurrentEbookId == Guid.Empty and no BookId in URL",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Calls IdentityService.GetProfileAsync and if profile has LastReadBook calls NavService.SetBook (lines 55-59)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__true",
          "kind": "branch-true",
          "label": "load last read",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__false",
          "kind": "branch-false",
          "label": "do nothing",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition",
          "kind": "condition",
          "label": "NavService.CurrentEbookId == Guid.Empty",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "else if (NavService.CurrentEbookId == Guid.Empty)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_55_onparameterssetasync_await_55_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "var profileResult = await IdentityService.GetProfileAsync();"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition",
          "kind": "condition",
          "label": "profileResult.IsSuccess && profileResult.Value.LastReadBook != null",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (profileResult.IsSuccess && profileResult.Value.LastReadBook != null)"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_58_SetBook",
          "kind": "call",
          "label": "SetBook",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "profileResult.Value.LastReadBook.Id and computed chapter index"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:p5ejmn:onparameterssetasync__entry__method:p5ejmn:onparameterssetasync__action_40_parse_40__linear",
          "from": "method:p5ejmn:onparameterssetasync__entry",
          "to": "method:p5ejmn:onparameterssetasync__action_40_parse_40__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_parse_40__linear__method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_40_parse_40__linear",
          "to": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition__method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__true",
          "from": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition__method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__false",
          "from": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__true__method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__true",
          "to": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__false__method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__false",
          "to": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge__method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition__method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__true",
          "from": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__true",
          "kind": "condition-true",
          "label": "maybe SetBook",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition__method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__false",
          "from": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__true__method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__true",
          "to": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__false__method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__false",
          "to": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge__method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition__method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__true",
          "from": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition__method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__false",
          "from": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__true__method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__true",
          "to": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__false__method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__false",
          "to": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge__method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition__method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__true",
          "from": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition__method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__false",
          "from": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__true__method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__true",
          "to": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__false__method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__false",
          "to": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge__call_method:p5ejmn:onparameterssetasync__call_49_SetBook",
          "from": "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
          "to": "method:p5ejmn:onparameterssetasync__call_49_SetBook",
          "kind": "call",
          "label": "BookId.Value, chapterIndex (from query)",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_49_SetBook__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition",
          "from": "method:p5ejmn:onparameterssetasync__call_49_SetBook",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition",
          "kind": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__true",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__false",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__true__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__true",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__false__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__false",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge__method:p5ejmn:onparameterssetasync__action_52_branch_52__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition__method:p5ejmn:onparameterssetasync__action_52_branch_52__true",
          "from": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_branch_52__true",
          "kind": "condition-true",
          "label": "load last read",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition__method:p5ejmn:onparameterssetasync__action_52_branch_52__false",
          "from": "method:p5ejmn:onparameterssetasync__action_52_branch_52__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_branch_52__false",
          "kind": "condition-false",
          "label": "do nothing",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__true__method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_branch_52__true",
          "to": "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__false__method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_branch_52__false",
          "to": "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition",
          "from": "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__true",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__false",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__true__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__true",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__false__method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__false",
          "to": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge__method:p5ejmn:onparameterssetasync__action_55_onparameterssetasync_await_55_5__await",
          "from": "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
          "to": "method:p5ejmn:onparameterssetasync__action_55_onparameterssetasync_await_55_5__await",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_55_onparameterssetasync_await_55_5__await__call_method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync",
          "from": "method:p5ejmn:onparameterssetasync__action_55_onparameterssetasync_await_55_5__await",
          "to": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync",
          "kind": "call",
          "label": "none",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync__method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition",
          "from": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync",
          "to": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition__method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__true",
          "from": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition__method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__false",
          "from": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__condition",
          "to": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__true__method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__true",
          "to": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__false__method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "from": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__false",
          "to": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge__call_method:p5ejmn:onparameterssetasync__call_58_SetBook",
          "from": "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge",
          "to": "method:p5ejmn:onparameterssetasync__call_58_SetBook",
          "kind": "call",
          "label": "profileResult.Value.LastReadBook.Id and computed chapter index",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_58_SetBook__implicit_return",
          "from": "method:p5ejmn:onparameterssetasync__call_58_SetBook",
          "to": "method:p5ejmn:onparameterssetasync__implicit_return",
          "kind": "return",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:p5ejmn:onparameterssetasync__call_49_SetBook__jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_SetBook",
          "fromNodeId": "method:p5ejmn:onparameterssetasync__call_49_SetBook",
          "kind": "call-target",
          "targetNodeId": "method:4o7htd:setbook",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "SetBook",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target SetBook resolved to NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync__jump_NexusReader_UI_Shared_Services_IIdentityService_cs_GetProfileAsync",
          "fromNodeId": "method:p5ejmn:onparameterssetasync__call_55_GetProfileAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IIdentityService.cs",
          "targetHint": "GetProfileAsync",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target GetProfileAsync in NexusReader.UI.Shared/Services/IIdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:p5ejmn:onparameterssetasync__call_58_SetBook__jump_NexusReader_UI_Shared_Services_IReaderNavigationService_cs_SetBook",
          "fromNodeId": "method:p5ejmn:onparameterssetasync__call_58_SetBook",
          "kind": "call-target",
          "targetNodeId": "method:4o7htd:setbook",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "targetHint": "SetBook",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target SetBook resolved to NexusReader.UI.Shared/Services/IReaderNavigationService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:p5ejmn:onparameterssetasync__action_40_onparameterssetasync_branch_40_0__merge",
        "method:p5ejmn:onparameterssetasync__action_45_guard_clause_45__merge",
        "method:p5ejmn:onparameterssetasync__action_45_onparameterssetasync_branch_45_1__merge",
        "method:p5ejmn:onparameterssetasync__action_47_onparameterssetasync_branch_47_2__merge",
        "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_fallback_52_4__merge",
        "method:p5ejmn:onparameterssetasync__action_52_branch_52__merge",
        "method:p5ejmn:onparameterssetasync__action_52_onparameterssetasync_branch_52_3__merge",
        "method:p5ejmn:onparameterssetasync__action_56_onparameterssetasync_branch_56_6__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 36,
        "end": 61
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 36,
          "summary": "Control-flow fragment extracted for method OnParametersSetAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1r63qu7:onafterrenderasync__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:1r63qu7:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:1r63qu7:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:1r63qu7:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1r63qu7:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "On first render initialize focus-mode service and attempt to attach a JS keyboard listener, updating state afterwards."
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition",
          "kind": "condition",
          "label": "firstRender == true",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Only runs initialization and JS interop on first render"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__true",
          "kind": "branch-true",
          "label": "initialize",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_67_onafterrenderasync_await_67_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await FocusMode.InitializeAsync();"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync",
          "kind": "call",
          "label": "InitializeAsync",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_68_try_catch_68__linear",
          "kind": "statement",
          "label": "Dynamic JS interop load",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Attempts to import JS module and attach keyboard listener; exceptions are swallowed (line 68-72)"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_68_onafterrenderasync_try_68_2__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84,
          "detail": "try {"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_69_onafterrenderasync_await_69_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "_interopModule = await JS.InvokeAsync<IJSObjectReference>(\"import\", \"./_content/NexusReader.UI.Shared/js/focusInterop.js\");"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_71_onafterrenderasync_await_71_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "_keydownHandler = await _interopModule.InvokeAsync<IJSObjectReference>(\"attachKeyboardListener\", _dotNetRef);"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_72_onafterrenderasync_catch_72_5__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.86,
          "detail": "} catch { } /* ignored dynamically */"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_73_state_change_73__linear",
          "kind": "statement",
          "label": "Force UI refresh",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "StateHasChanged() invoked after initialization"
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1r63qu7:onafterrenderasync__entry__method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition",
          "from": "method:1r63qu7:onafterrenderasync__entry",
          "to": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition__method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__true",
          "from": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition",
          "to": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__true",
          "kind": "condition-true",
          "label": "initialize",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition__method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__false",
          "from": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__condition",
          "to": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__true__method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "from": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__true",
          "to": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__false__method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "from": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__false",
          "to": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge__method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition",
          "from": "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
          "to": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition__method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__true",
          "from": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition",
          "to": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition__method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__false",
          "from": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__condition",
          "to": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__true__method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "from": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__true",
          "to": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__false__method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "from": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__false",
          "to": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge__method:1r63qu7:onafterrenderasync__action_67_onafterrenderasync_await_67_1__await",
          "from": "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge",
          "to": "method:1r63qu7:onafterrenderasync__action_67_onafterrenderasync_await_67_1__await",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_67_onafterrenderasync_await_67_1__await__call_method:1r63qu7:onafterrenderasync__call_67_InitializeAsync",
          "from": "method:1r63qu7:onafterrenderasync__action_67_onafterrenderasync_await_67_1__await",
          "to": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync",
          "kind": "call",
          "label": "none",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync__method:1r63qu7:onafterrenderasync__action_68_try_catch_68__linear",
          "from": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync",
          "to": "method:1r63qu7:onafterrenderasync__action_68_try_catch_68__linear",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_68_try_catch_68__linear__method:1r63qu7:onafterrenderasync__action_68_onafterrenderasync_try_68_2__try",
          "from": "method:1r63qu7:onafterrenderasync__action_68_try_catch_68__linear",
          "to": "method:1r63qu7:onafterrenderasync__action_68_onafterrenderasync_try_68_2__try",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_68_onafterrenderasync_try_68_2__try__method:1r63qu7:onafterrenderasync__action_69_onafterrenderasync_await_69_3__await",
          "from": "method:1r63qu7:onafterrenderasync__action_68_onafterrenderasync_try_68_2__try",
          "to": "method:1r63qu7:onafterrenderasync__action_69_onafterrenderasync_await_69_3__await",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_69_onafterrenderasync_await_69_3__await__method:1r63qu7:onafterrenderasync__action_71_onafterrenderasync_await_71_4__await",
          "from": "method:1r63qu7:onafterrenderasync__action_69_onafterrenderasync_await_69_3__await",
          "to": "method:1r63qu7:onafterrenderasync__action_71_onafterrenderasync_await_71_4__await",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_71_onafterrenderasync_await_71_4__await__method:1r63qu7:onafterrenderasync__action_72_onafterrenderasync_catch_72_5__catch",
          "from": "method:1r63qu7:onafterrenderasync__action_71_onafterrenderasync_await_71_4__await",
          "to": "method:1r63qu7:onafterrenderasync__action_72_onafterrenderasync_catch_72_5__catch",
          "kind": "exception",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_72_onafterrenderasync_catch_72_5__catch__method:1r63qu7:onafterrenderasync__action_73_state_change_73__linear",
          "from": "method:1r63qu7:onafterrenderasync__action_72_onafterrenderasync_catch_72_5__catch",
          "to": "method:1r63qu7:onafterrenderasync__action_73_state_change_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1r63qu7:onafterrenderasync__action_73_state_change_73__linear__implicit_return",
          "from": "method:1r63qu7:onafterrenderasync__action_73_state_change_73__linear",
          "to": "method:1r63qu7:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync__jump_NexusReader_UI_Shared_Services_IFocusModeService_cs_InitializeAsync",
          "fromNodeId": "method:1r63qu7:onafterrenderasync__call_67_InitializeAsync",
          "kind": "call-target",
          "targetNodeId": "method:fpl7t6:initializeasync",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "targetHint": "InitializeAsync",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target InitializeAsync resolved to NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1r63qu7:onafterrenderasync__action_65_guard_clause_65__merge",
        "method:1r63qu7:onafterrenderasync__action_65_onafterrenderasync_branch_65_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 63,
        "end": 75
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 63,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:whfss9:onfocuskeypressed__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:whfss9:onfocuskeypressed",
      "ownerSymbolName": "OnFocusKeypressed",
      "entryNodeId": "method:whfss9:onfocuskeypressed__entry",
      "exitNodeIds": [
        "method:whfss9:onfocuskeypressed__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:whfss9:onfocuskeypressed__entry",
          "kind": "entry",
          "label": "OnFocusKeypressed entry",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "JS-invokable handler called when the focus-mode key is pressed: toggles focus mode and refreshes UI."
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_77_js_invokable_77__linear",
          "kind": "statement",
          "label": "Exposed to JS",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "[JSInvokable] attribute"
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_80_onfocuskeypressed_await_80_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await FocusMode.ToggleAsync();"
        },
        {
          "id": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync",
          "kind": "call",
          "label": "ToggleAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_81_state_change_81__linear",
          "kind": "statement",
          "label": "Force UI refresh after toggle",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "StateHasChanged() called"
        },
        {
          "id": "method:whfss9:onfocuskeypressed__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:whfss9:onfocuskeypressed__entry__method:whfss9:onfocuskeypressed__action_77_js_invokable_77__linear",
          "from": "method:whfss9:onfocuskeypressed__entry",
          "to": "method:whfss9:onfocuskeypressed__action_77_js_invokable_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_77_js_invokable_77__linear__method:whfss9:onfocuskeypressed__action_80_onfocuskeypressed_await_80_0__await",
          "from": "method:whfss9:onfocuskeypressed__action_77_js_invokable_77__linear",
          "to": "method:whfss9:onfocuskeypressed__action_80_onfocuskeypressed_await_80_0__await",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_80_onfocuskeypressed_await_80_0__await__call_method:whfss9:onfocuskeypressed__call_80_ToggleAsync",
          "from": "method:whfss9:onfocuskeypressed__action_80_onfocuskeypressed_await_80_0__await",
          "to": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync",
          "kind": "call",
          "label": "none",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync__method:whfss9:onfocuskeypressed__action_81_state_change_81__linear",
          "from": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync",
          "to": "method:whfss9:onfocuskeypressed__action_81_state_change_81__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:whfss9:onfocuskeypressed__action_81_state_change_81__linear__implicit_return",
          "from": "method:whfss9:onfocuskeypressed__action_81_state_change_81__linear",
          "to": "method:whfss9:onfocuskeypressed__implicit_return",
          "kind": "return",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync__jump_NexusReader_UI_Shared_Services_IFocusModeService_cs_ToggleAsync",
          "fromNodeId": "method:whfss9:onfocuskeypressed__call_80_ToggleAsync",
          "kind": "call-target",
          "targetNodeId": "method:17j6y8x:toggleasync",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "targetHint": "ToggleAsync",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target ToggleAsync resolved to NexusReader.UI.Shared/Services/IFocusModeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 77,
        "end": 82
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 77,
          "summary": "Control-flow fragment extracted for method OnFocusKeypressed.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6vyv4w:handlenodeselected__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:6vyv4w:handlenodeselected",
      "ownerSymbolName": "HandleNodeSelected",
      "entryNodeId": "method:6vyv4w:handlenodeselected__entry",
      "exitNodeIds": [
        "method:6vyv4w:handlenodeselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:6vyv4w:handlenodeselected__entry",
          "kind": "entry",
          "label": "HandleNodeSelected entry",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "Scroll the embedded ReaderCanvas to a particular node when a node selection event occurs."
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition",
          "kind": "condition",
          "label": "readerCanvas != null",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Only calls ScrollToNodeAsync when component ref exists"
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__true",
          "kind": "branch-true",
          "label": "scroll",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "kind": "statement",
          "label": "merge",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition",
          "kind": "condition",
          "label": "readerCanvas != null",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (readerCanvas != null)"
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_88_handlenodeselected_await_88_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await readerCanvas.ScrollToNodeAsync(nodeId);"
        },
        {
          "id": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync",
          "kind": "call",
          "label": "ScrollToNodeAsync",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "nodeId"
        },
        {
          "id": "method:6vyv4w:handlenodeselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:6vyv4w:handlenodeselected__entry__method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition",
          "from": "method:6vyv4w:handlenodeselected__entry",
          "to": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition__method:6vyv4w:handlenodeselected__action_86_guard_clause_86__true",
          "from": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition",
          "to": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__true",
          "kind": "condition-true",
          "label": "scroll",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition__method:6vyv4w:handlenodeselected__action_86_guard_clause_86__false",
          "from": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__condition",
          "to": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__true__method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "from": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__true",
          "to": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__false__method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "from": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__false",
          "to": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge__method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition",
          "from": "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
          "to": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition__method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__true",
          "from": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition",
          "to": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition__method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__false",
          "from": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__condition",
          "to": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__true__method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "from": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__true",
          "to": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__false__method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "from": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__false",
          "to": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge__method:6vyv4w:handlenodeselected__action_88_handlenodeselected_await_88_1__await",
          "from": "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge",
          "to": "method:6vyv4w:handlenodeselected__action_88_handlenodeselected_await_88_1__await",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:6vyv4w:handlenodeselected__action_88_handlenodeselected_await_88_1__await__call_method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync",
          "from": "method:6vyv4w:handlenodeselected__action_88_handlenodeselected_await_88_1__await",
          "to": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync",
          "kind": "call",
          "label": "nodeId",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync__implicit_return",
          "from": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync",
          "to": "method:6vyv4w:handlenodeselected__implicit_return",
          "kind": "return",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync__jump_NexusReader_UI_Shared_Components_ReaderCanvas_razor_ScrollToNodeAsync",
          "fromNodeId": "method:6vyv4w:handlenodeselected__call_88_ScrollToNodeAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/ReaderCanvas.razor",
          "targetHint": "ScrollToNodeAsync",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target ScrollToNodeAsync in NexusReader.UI.Shared/Components/ReaderCanvas.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:6vyv4w:handlenodeselected__action_86_guard_clause_86__merge",
        "method:6vyv4w:handlenodeselected__action_86_handlenodeselected_branch_86_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.9799999999999998,
      "lineSpan": {
        "start": 84,
        "end": 90
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 84,
          "summary": "Control-flow fragment extracted for method HandleNodeSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ib6h4r:handlequizrequestedasync__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:1ib6h4r:handlequizrequestedasync",
      "ownerSymbolName": "HandleQuizRequestedAsync",
      "entryNodeId": "method:1ib6h4r:handlequizrequestedasync__entry",
      "exitNodeIds": [
        "method:1ib6h4r:handlequizrequestedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__entry",
          "kind": "entry",
          "label": "HandleQuizRequestedAsync entry",
          "line": 92,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "Receive quiz request events, set active quiz block id and request UI update."
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_94_state_mutation_94__linear",
          "kind": "statement",
          "label": "Set active quiz block id",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "_activeQuizBlockId = blockId"
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_95_handlequizrequestedasync_await_95_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await InvokeAsync(StateHasChanged);"
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_95_state_change_95__linear",
          "kind": "statement",
          "label": "Invoke UI update",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__entry__method:1ib6h4r:handlequizrequestedasync__action_94_state_mutation_94__linear",
          "from": "method:1ib6h4r:handlequizrequestedasync__entry",
          "to": "method:1ib6h4r:handlequizrequestedasync__action_94_state_mutation_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_94_state_mutation_94__linear__method:1ib6h4r:handlequizrequestedasync__action_95_handlequizrequestedasync_await_95_0__await",
          "from": "method:1ib6h4r:handlequizrequestedasync__action_94_state_mutation_94__linear",
          "to": "method:1ib6h4r:handlequizrequestedasync__action_95_handlequizrequestedasync_await_95_0__await",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_95_handlequizrequestedasync_await_95_0__await__method:1ib6h4r:handlequizrequestedasync__action_95_state_change_95__linear",
          "from": "method:1ib6h4r:handlequizrequestedasync__action_95_handlequizrequestedasync_await_95_0__await",
          "to": "method:1ib6h4r:handlequizrequestedasync__action_95_state_change_95__linear",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ib6h4r:handlequizrequestedasync__action_95_state_change_95__linear__implicit_return",
          "from": "method:1ib6h4r:handlequizrequestedasync__action_95_state_change_95__linear",
          "to": "method:1ib6h4r:handlequizrequestedasync__implicit_return",
          "kind": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.82,
      "lineSpan": {
        "start": 92,
        "end": 96
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 92,
          "summary": "Control-flow fragment extracted for method HandleQuizRequestedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1l4808t:handleupdate__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:1l4808t:handleupdate",
      "ownerSymbolName": "HandleUpdate",
      "entryNodeId": "method:1l4808t:handleupdate__entry",
      "exitNodeIds": [
        "method:1l4808t:handleupdate__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1l4808t:handleupdate__entry",
          "kind": "entry",
          "label": "HandleUpdate entry",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "Request a UI update from other subscribers (used as an event handler)."
        },
        {
          "id": "method:1l4808t:handleupdate__action_98_state_change_98__linear",
          "kind": "statement",
          "label": "Invoke UI update",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Returns InvokeAsync(StateHasChanged)"
        },
        {
          "id": "method:1l4808t:handleupdate__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1l4808t:handleupdate__entry__method:1l4808t:handleupdate__action_98_state_change_98__linear",
          "from": "method:1l4808t:handleupdate__entry",
          "to": "method:1l4808t:handleupdate__action_98_state_change_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1l4808t:handleupdate__action_98_state_change_98__linear__implicit_return",
          "from": "method:1l4808t:handleupdate__action_98_state_change_98__linear",
          "to": "method:1l4808t:handleupdate__implicit_return",
          "kind": "return",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 98,
        "end": 98
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 98,
          "summary": "Control-flow fragment extracted for method HandleUpdate.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:99k8q7:disposeasync__fragment",
      "ownerFileId": "file:h6mj95:home-razor",
      "ownerSymbolId": "method:99k8q7:disposeasync",
      "ownerSymbolName": "DisposeAsync",
      "entryNodeId": "method:99k8q7:disposeasync__entry",
      "exitNodeIds": [
        "method:99k8q7:disposeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:99k8q7:disposeasync__entry",
          "kind": "entry",
          "label": "DisposeAsync entry",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.99,
          "detail": "Unsubscribe event handlers, detach JS keyboard listener if present, dispose JS interop objects and DotNetObjectReference when the component is disposed."
        },
        {
          "id": "method:99k8q7:disposeasync__action_102_event_unsubscribe_102__linear",
          "kind": "statement",
          "label": "Unsubscribe QuizState.OnQuizRequested",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "QuizState.OnQuizRequested -= HandleQuizRequestedAsync"
        },
        {
          "id": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription",
          "kind": "call",
          "label": "OnQuizRequested - event unsubscription",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "HandleQuizRequestedAsync"
        },
        {
          "id": "method:99k8q7:disposeasync__action_103_event_unsubscribe_103__linear",
          "kind": "statement",
          "label": "Unsubscribe FocusMode.OnFocusModeChanged",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "FocusMode.OnFocusModeChanged -= HandleUpdate"
        },
        {
          "id": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription",
          "kind": "call",
          "label": "OnFocusModeChanged - event unsubscription",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "HandleUpdate"
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition",
          "kind": "condition",
          "label": "_interopModule != null && _keydownHandler != null",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78,
          "detail": "if (_interopModule != null && _keydownHandler != null)"
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition",
          "kind": "condition",
          "label": "_interopModule != null && _keydownHandler != null",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "Calls JS detach and disposes JS object references inside try/catch (lines 107-111); exceptions swallowed"
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__true",
          "kind": "branch-true",
          "label": "try detach and dispose",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "kind": "statement",
          "label": "merge",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_107_disposeasync_try_107_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84,
          "detail": "try {"
        },
        {
          "id": "method:99k8q7:disposeasync__action_108_disposeasync_await_108_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await _interopModule.InvokeVoidAsync(\"detachKeyboardListener\", _keydownHandler);"
        },
        {
          "id": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module_",
          "kind": "call",
          "label": "Dispose/interop cleanup (via JS module)",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88,
          "detail": "detachKeyboardListener then dispose interop references"
        },
        {
          "id": "method:99k8q7:disposeasync__action_109_disposeasync_await_109_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await _interopModule.DisposeAsync();"
        },
        {
          "id": "method:99k8q7:disposeasync__action_110_disposeasync_await_110_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81,
          "detail": "await _keydownHandler.DisposeAsync();"
        },
        {
          "id": "method:99k8q7:disposeasync__action_111_disposeasync_catch_111_5__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.86,
          "detail": "} catch { } // Circuit disconnected catch explicitly"
        },
        {
          "id": "method:99k8q7:disposeasync__action_114_dispose_114__linear",
          "kind": "statement",
          "label": "Dispose DotNetObjectReference",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7,
          "detail": "_dotNetRef?.Dispose()"
        },
        {
          "id": "method:99k8q7:disposeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:99k8q7:disposeasync__entry__method:99k8q7:disposeasync__action_102_event_unsubscribe_102__linear",
          "from": "method:99k8q7:disposeasync__entry",
          "to": "method:99k8q7:disposeasync__action_102_event_unsubscribe_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_102_event_unsubscribe_102__linear__call_method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription",
          "from": "method:99k8q7:disposeasync__action_102_event_unsubscribe_102__linear",
          "to": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription",
          "kind": "call",
          "label": "HandleQuizRequestedAsync",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription__method:99k8q7:disposeasync__action_103_event_unsubscribe_103__linear",
          "from": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription",
          "to": "method:99k8q7:disposeasync__action_103_event_unsubscribe_103__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_103_event_unsubscribe_103__linear__call_method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription",
          "from": "method:99k8q7:disposeasync__action_103_event_unsubscribe_103__linear",
          "to": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription",
          "kind": "call",
          "label": "HandleUpdate",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription__method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition",
          "from": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription",
          "to": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition__method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__true",
          "from": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition",
          "to": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition__method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__false",
          "from": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__condition",
          "to": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__true__method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "from": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__true",
          "to": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__false__method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "from": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__false",
          "to": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.78
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge__method:99k8q7:disposeasync__action_105_guard_clause_105__condition",
          "from": "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
          "to": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition__method:99k8q7:disposeasync__action_105_guard_clause_105__true",
          "from": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition",
          "to": "method:99k8q7:disposeasync__action_105_guard_clause_105__true",
          "kind": "condition-true",
          "label": "try detach and dispose",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition__method:99k8q7:disposeasync__action_105_guard_clause_105__false",
          "from": "method:99k8q7:disposeasync__action_105_guard_clause_105__condition",
          "to": "method:99k8q7:disposeasync__action_105_guard_clause_105__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__true__method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "from": "method:99k8q7:disposeasync__action_105_guard_clause_105__true",
          "to": "method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__false__method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "from": "method:99k8q7:disposeasync__action_105_guard_clause_105__false",
          "to": "method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_105_guard_clause_105__merge__method:99k8q7:disposeasync__action_107_disposeasync_try_107_1__try",
          "from": "method:99k8q7:disposeasync__action_105_guard_clause_105__merge",
          "to": "method:99k8q7:disposeasync__action_107_disposeasync_try_107_1__try",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.84
        },
        {
          "id": "method:99k8q7:disposeasync__action_107_disposeasync_try_107_1__try__method:99k8q7:disposeasync__action_108_disposeasync_await_108_2__await",
          "from": "method:99k8q7:disposeasync__action_107_disposeasync_try_107_1__try",
          "to": "method:99k8q7:disposeasync__action_108_disposeasync_await_108_2__await",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:99k8q7:disposeasync__action_108_disposeasync_await_108_2__await__call_method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module_",
          "from": "method:99k8q7:disposeasync__action_108_disposeasync_await_108_2__await",
          "to": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module_",
          "kind": "call",
          "label": "detachKeyboardListener then dispose interop references",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.88
        },
        {
          "id": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module___method:99k8q7:disposeasync__action_109_disposeasync_await_109_3__await",
          "from": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module_",
          "to": "method:99k8q7:disposeasync__action_109_disposeasync_await_109_3__await",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:99k8q7:disposeasync__action_109_disposeasync_await_109_3__await__method:99k8q7:disposeasync__action_110_disposeasync_await_110_4__await",
          "from": "method:99k8q7:disposeasync__action_109_disposeasync_await_109_3__await",
          "to": "method:99k8q7:disposeasync__action_110_disposeasync_await_110_4__await",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.81
        },
        {
          "id": "method:99k8q7:disposeasync__action_110_disposeasync_await_110_4__await__method:99k8q7:disposeasync__action_111_disposeasync_catch_111_5__catch",
          "from": "method:99k8q7:disposeasync__action_110_disposeasync_await_110_4__await",
          "to": "method:99k8q7:disposeasync__action_111_disposeasync_catch_111_5__catch",
          "kind": "exception",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.86
        },
        {
          "id": "method:99k8q7:disposeasync__action_111_disposeasync_catch_111_5__catch__method:99k8q7:disposeasync__action_114_dispose_114__linear",
          "from": "method:99k8q7:disposeasync__action_111_disposeasync_catch_111_5__catch",
          "to": "method:99k8q7:disposeasync__action_114_dispose_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.7
        },
        {
          "id": "method:99k8q7:disposeasync__action_114_dispose_114__linear__implicit_return",
          "from": "method:99k8q7:disposeasync__action_114_dispose_114__linear",
          "to": "method:99k8q7:disposeasync__implicit_return",
          "kind": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription__jump_NexusReader_UI_Shared_Services_IQuizStateService_cs_OnQuizRequested_event_unsubscription",
          "fromNodeId": "method:99k8q7:disposeasync__call_102_OnQuizRequested_event_unsubscription",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "targetHint": "OnQuizRequested - event unsubscription",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target OnQuizRequested - event unsubscription in NexusReader.UI.Shared/Services/IQuizStateService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription__jump_NexusReader_UI_Shared_Services_IFocusModeService_cs_OnFocusModeChanged_event_unsubscription",
          "fromNodeId": "method:99k8q7:disposeasync__call_103_OnFocusModeChanged_event_unsubscription",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "targetHint": "OnFocusModeChanged - event unsubscription",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target OnFocusModeChanged - event unsubscription in NexusReader.UI.Shared/Services/IFocusModeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module___jump_NexusReader_UI_Shared_Components_ReaderCanvas_razor_Dispose_interop_cleanup_via_JS_module_",
          "fromNodeId": "method:99k8q7:disposeasync__call_108_Dispose_interop_cleanup_via_JS_module_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/ReaderCanvas.razor",
          "targetHint": "Dispose/interop cleanup (via JS module)",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor",
          "reason": "Call target Dispose/interop cleanup (via JS module) in NexusReader.UI.Shared/Components/ReaderCanvas.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:99k8q7:disposeasync__action_105_disposeasync_branch_105_0__merge",
        "method:99k8q7:disposeasync__action_105_guard_clause_105__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 100,
        "end": 115
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Home.razor",
          "line": 100,
          "summary": "Control-flow fragment extracted for method DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1f4bu99:oninitializedasync__fragment",
      "ownerFileId": "file:1kjntt:intelligence-razor",
      "ownerSymbolId": "method:1f4bu99:oninitializedasync",
      "ownerSymbolName": "OnInitializedAsync",
      "entryNodeId": "method:1f4bu99:oninitializedasync__entry",
      "exitNodeIds": [
        "method:1f4bu99:oninitializedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1f4bu99:oninitializedasync__entry",
          "kind": "entry",
          "label": "OnInitializedAsync entry",
          "line": 388,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.99,
          "detail": "Initializes the component by loading recent books for the scope selector from the API."
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_390_try_catch_390__linear",
          "kind": "statement",
          "label": "Swallow errors loading books",
          "line": 390,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "catch writes to Console: failed to load books (line 396)"
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_390_oninitializedasync_try_390_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 390,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_392_oninitializedasync_await_392_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 392,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81,
          "detail": "_books = await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");"
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_392_external_call_392__linear",
          "kind": "http-call",
          "label": "Load books for scope selector",
          "line": 392,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\") assigns to _books"
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_394_oninitializedasync_catch_394_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 394,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1f4bu99:oninitializedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 398,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1f4bu99:oninitializedasync__entry__method:1f4bu99:oninitializedasync__action_390_try_catch_390__linear",
          "from": "method:1f4bu99:oninitializedasync__entry",
          "to": "method:1f4bu99:oninitializedasync__action_390_try_catch_390__linear",
          "kind": "next",
          "line": 390,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_390_try_catch_390__linear__method:1f4bu99:oninitializedasync__action_390_oninitializedasync_try_390_0__try",
          "from": "method:1f4bu99:oninitializedasync__action_390_try_catch_390__linear",
          "to": "method:1f4bu99:oninitializedasync__action_390_oninitializedasync_try_390_0__try",
          "kind": "next",
          "line": 390,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_390_oninitializedasync_try_390_0__try__method:1f4bu99:oninitializedasync__action_392_oninitializedasync_await_392_1__await",
          "from": "method:1f4bu99:oninitializedasync__action_390_oninitializedasync_try_390_0__try",
          "to": "method:1f4bu99:oninitializedasync__action_392_oninitializedasync_await_392_1__await",
          "kind": "next",
          "line": 392,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_392_oninitializedasync_await_392_1__await__method:1f4bu99:oninitializedasync__action_392_external_call_392__linear",
          "from": "method:1f4bu99:oninitializedasync__action_392_oninitializedasync_await_392_1__await",
          "to": "method:1f4bu99:oninitializedasync__action_392_external_call_392__linear",
          "kind": "next",
          "line": 392,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_392_external_call_392__linear__method:1f4bu99:oninitializedasync__action_394_oninitializedasync_catch_394_2__catch",
          "from": "method:1f4bu99:oninitializedasync__action_392_external_call_392__linear",
          "to": "method:1f4bu99:oninitializedasync__action_394_oninitializedasync_catch_394_2__catch",
          "kind": "exception",
          "line": 394,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86
        },
        {
          "id": "method:1f4bu99:oninitializedasync__action_394_oninitializedasync_catch_394_2__catch__implicit_return",
          "from": "method:1f4bu99:oninitializedasync__action_394_oninitializedasync_catch_394_2__catch",
          "to": "method:1f4bu99:oninitializedasync__implicit_return",
          "kind": "return",
          "line": 398,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 388,
        "end": 398
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 388,
          "summary": "Control-flow fragment extracted for method OnInitializedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:91tjy5:handlekeyup__fragment",
      "ownerFileId": "file:1kjntt:intelligence-razor",
      "ownerSymbolId": "method:91tjy5:handlekeyup",
      "ownerSymbolName": "HandleKeyUp",
      "entryNodeId": "method:91tjy5:handlekeyup__entry",
      "exitNodeIds": [
        "method:91tjy5:handlekeyup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:91tjy5:handlekeyup__entry",
          "kind": "entry",
          "label": "HandleKeyUp entry",
          "line": 400,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.99,
          "detail": "Handles key up events on the input; triggers AskQuestionAsync when Enter is pressed and input is non-empty and not loading."
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition",
          "kind": "condition",
          "label": "e.Key == \"Enter\" && !string.IsNullOrWhiteSpace(_question) && !_isLoading",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "Calls AskQuestionAsync when condition true"
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__true",
          "kind": "branch-true",
          "label": "call-AskQuestionAsync",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "kind": "statement",
          "label": "merge",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition",
          "kind": "condition",
          "label": "e.Key == \"Enter\" && !string.IsNullOrWhiteSpace(_question) && !_isLoading",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78,
          "detail": "if (e.Key == \"Enter\" && !string.IsNullOrWhiteSpace(_question) && !_isLoading)"
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_404_handlekeyup_await_404_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 404,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81,
          "detail": "await AskQuestionAsync();"
        },
        {
          "id": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync",
          "kind": "call",
          "label": "AskQuestionAsync",
          "line": 404,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:91tjy5:handlekeyup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 406,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:91tjy5:handlekeyup__entry__method:91tjy5:handlekeyup__action_402_guard_clause_402__condition",
          "from": "method:91tjy5:handlekeyup__entry",
          "to": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition__method:91tjy5:handlekeyup__action_402_guard_clause_402__true",
          "from": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition",
          "to": "method:91tjy5:handlekeyup__action_402_guard_clause_402__true",
          "kind": "condition-true",
          "label": "call-AskQuestionAsync",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition__method:91tjy5:handlekeyup__action_402_guard_clause_402__false",
          "from": "method:91tjy5:handlekeyup__action_402_guard_clause_402__condition",
          "to": "method:91tjy5:handlekeyup__action_402_guard_clause_402__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__true__method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "from": "method:91tjy5:handlekeyup__action_402_guard_clause_402__true",
          "to": "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__false__method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "from": "method:91tjy5:handlekeyup__action_402_guard_clause_402__false",
          "to": "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge__method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition",
          "from": "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
          "to": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition__method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__true",
          "from": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition",
          "to": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition__method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__false",
          "from": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__condition",
          "to": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__true__method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "from": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__true",
          "to": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__false__method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "from": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__false",
          "to": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "kind": "next",
          "line": 402,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge__method:91tjy5:handlekeyup__action_404_handlekeyup_await_404_1__await",
          "from": "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge",
          "to": "method:91tjy5:handlekeyup__action_404_handlekeyup_await_404_1__await",
          "kind": "next",
          "line": 404,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81
        },
        {
          "id": "method:91tjy5:handlekeyup__action_404_handlekeyup_await_404_1__await__call_method:91tjy5:handlekeyup__call_404_AskQuestionAsync",
          "from": "method:91tjy5:handlekeyup__action_404_handlekeyup_await_404_1__await",
          "to": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync",
          "kind": "call",
          "label": "none",
          "line": 404,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.88
        },
        {
          "id": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync__implicit_return",
          "from": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync",
          "to": "method:91tjy5:handlekeyup__implicit_return",
          "kind": "return",
          "line": 406,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync__jump_NexusReader_UI_Shared_Pages_Intelligence_razor_AskQuestionAsync",
          "fromNodeId": "method:91tjy5:handlekeyup__call_404_AskQuestionAsync",
          "kind": "call-target",
          "targetNodeId": "method:c84ulg:askquestionasync",
          "targetPath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "targetHint": "AskQuestionAsync",
          "line": 404,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "reason": "Call target AskQuestionAsync resolved to NexusReader.UI.Shared/Pages/Intelligence.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:91tjy5:handlekeyup__action_402_guard_clause_402__merge",
        "method:91tjy5:handlekeyup__action_402_handlekeyup_branch_402_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 400,
        "end": 406
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 400,
          "summary": "Control-flow fragment extracted for method HandleKeyUp.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:c84ulg:askquestionasync__fragment",
      "ownerFileId": "file:1kjntt:intelligence-razor",
      "ownerSymbolId": "method:c84ulg:askquestionasync",
      "ownerSymbolName": "AskQuestionAsync",
      "entryNodeId": "method:c84ulg:askquestionasync__entry",
      "exitNodeIds": [
        "method:c84ulg:askquestionasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:c84ulg:askquestionasync__entry",
          "kind": "entry",
          "label": "AskQuestionAsync entry",
          "line": 408,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.99,
          "detail": "Orchestrates asking the knowledge service a question: validates input, sets loading state, optionally scopes by book, calls IKnowledgeService, handles success/error responses and exceptions, and clears loading state."
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(_question) || _isLoading",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "Early return if no question or already loading"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__true",
          "kind": "branch-true",
          "label": "return",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "kind": "statement",
          "label": "merge",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(_question) || _isLoading",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(_question) || _isLoading) return;"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_412_state_change_412__linear",
          "kind": "statement",
          "label": "Enter search state",
          "line": 412,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "_isLoading = true; _hasSearched = true; _response = null; StateHasChanged()"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_417_try_catch_417__linear",
          "kind": "statement",
          "label": "Catch network/API exceptions",
          "line": 417,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "Sets _response.Answer to 'Network/API Error: {ex.Message}' and empty citations (lines 439-445)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_417_askquestionasync_try_417_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 417,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(_selectedBookId) && Guid.TryParse(_selectedBookId, out parsedId)",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "Sets ebookId when parsing succeeds (lines 419-423)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__true",
          "kind": "branch-true",
          "label": "ebookId set",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__false",
          "kind": "branch-false",
          "label": "ebookId null",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "kind": "statement",
          "label": "merge",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(_selectedBookId) && Guid.TryParse(_selectedBookId, out var parsedId)",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(_selectedBookId) && Guid.TryParse(_selectedBookId, out var parsedId))"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_425_askquestionasync_await_425_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81,
          "detail": "var result = await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId);"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_425_external_call_425__linear",
          "kind": "http-call",
          "label": "Ask knowledge service",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId)"
        },
        {
          "id": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync",
          "kind": "call",
          "label": "AskQuestionAsync",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.88,
          "detail": "_question, \"tenantId\", ebookId (nullable Guid)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "On success assigns _response; on failure builds an error GroundedResponseDto (lines 426-436)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__true",
          "kind": "branch-true",
          "label": "assign response from result.Value",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__false",
          "kind": "branch-false",
          "label": "construct error GroundedResponseDto with first error message",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "kind": "statement",
          "label": "merge",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_434_askquestionasync_repository_read_434_6__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 434,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86,
          "detail": "Answer = $\"Error: {result.Errors.FirstOrDefault()?.Message ?? \"An error occurred.\"}\","
        },
        {
          "id": "method:c84ulg:askquestionasync__action_439_askquestionasync_catch_439_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 439,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_447_askquestionasync_finally_447_8__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 447,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:c84ulg:askquestionasync__action_447_finally_447__finally",
          "kind": "finally",
          "label": "Exit loading state and refresh UI",
          "line": 447,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7,
          "detail": "_isLoading = false; StateHasChanged() (lines 449-450)"
        },
        {
          "id": "method:c84ulg:askquestionasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 452,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:c84ulg:askquestionasync__entry__method:c84ulg:askquestionasync__action_410_guard_clause_410__condition",
          "from": "method:c84ulg:askquestionasync__entry",
          "to": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition__method:c84ulg:askquestionasync__action_410_guard_clause_410__true",
          "from": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition",
          "to": "method:c84ulg:askquestionasync__action_410_guard_clause_410__true",
          "kind": "condition-true",
          "label": "return",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition__method:c84ulg:askquestionasync__action_410_guard_clause_410__false",
          "from": "method:c84ulg:askquestionasync__action_410_guard_clause_410__condition",
          "to": "method:c84ulg:askquestionasync__action_410_guard_clause_410__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__true__method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "from": "method:c84ulg:askquestionasync__action_410_guard_clause_410__true",
          "to": "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__false__method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "from": "method:c84ulg:askquestionasync__action_410_guard_clause_410__false",
          "to": "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge__method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition",
          "from": "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
          "to": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition__method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__true",
          "from": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition",
          "to": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition__method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__false",
          "from": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__condition",
          "to": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__true__method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "from": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__true",
          "to": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__false__method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "from": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__false",
          "to": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "kind": "next",
          "line": 410,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.9
        },
        {
          "id": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge__method:c84ulg:askquestionasync__action_412_state_change_412__linear",
          "from": "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
          "to": "method:c84ulg:askquestionasync__action_412_state_change_412__linear",
          "kind": "next",
          "line": 412,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_412_state_change_412__linear__method:c84ulg:askquestionasync__action_417_try_catch_417__linear",
          "from": "method:c84ulg:askquestionasync__action_412_state_change_412__linear",
          "to": "method:c84ulg:askquestionasync__action_417_try_catch_417__linear",
          "kind": "next",
          "line": 417,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_417_try_catch_417__linear__method:c84ulg:askquestionasync__action_417_askquestionasync_try_417_1__try",
          "from": "method:c84ulg:askquestionasync__action_417_try_catch_417__linear",
          "to": "method:c84ulg:askquestionasync__action_417_askquestionasync_try_417_1__try",
          "kind": "next",
          "line": 417,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_417_askquestionasync_try_417_1__try__method:c84ulg:askquestionasync__action_419_branch_419__condition",
          "from": "method:c84ulg:askquestionasync__action_417_askquestionasync_try_417_1__try",
          "to": "method:c84ulg:askquestionasync__action_419_branch_419__condition",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__condition__method:c84ulg:askquestionasync__action_419_branch_419__true",
          "from": "method:c84ulg:askquestionasync__action_419_branch_419__condition",
          "to": "method:c84ulg:askquestionasync__action_419_branch_419__true",
          "kind": "condition-true",
          "label": "ebookId set",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__condition__method:c84ulg:askquestionasync__action_419_branch_419__false",
          "from": "method:c84ulg:askquestionasync__action_419_branch_419__condition",
          "to": "method:c84ulg:askquestionasync__action_419_branch_419__false",
          "kind": "condition-false",
          "label": "ebookId null",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__true__method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "from": "method:c84ulg:askquestionasync__action_419_branch_419__true",
          "to": "method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__false__method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "from": "method:c84ulg:askquestionasync__action_419_branch_419__false",
          "to": "method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_419_branch_419__merge__method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition",
          "from": "method:c84ulg:askquestionasync__action_419_branch_419__merge",
          "to": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition",
          "kind": "next",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition__method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__true",
          "from": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition",
          "to": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition__method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__false",
          "from": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__condition",
          "to": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__true__method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "from": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__true",
          "to": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "kind": "next",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__false__method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "from": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__false",
          "to": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "kind": "next",
          "line": 420,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge__method:c84ulg:askquestionasync__action_425_askquestionasync_await_425_3__await",
          "from": "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
          "to": "method:c84ulg:askquestionasync__action_425_askquestionasync_await_425_3__await",
          "kind": "next",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.81
        },
        {
          "id": "method:c84ulg:askquestionasync__action_425_askquestionasync_await_425_3__await__method:c84ulg:askquestionasync__action_425_external_call_425__linear",
          "from": "method:c84ulg:askquestionasync__action_425_askquestionasync_await_425_3__await",
          "to": "method:c84ulg:askquestionasync__action_425_external_call_425__linear",
          "kind": "next",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_425_external_call_425__linear__call_method:c84ulg:askquestionasync__call_425_AskQuestionAsync",
          "from": "method:c84ulg:askquestionasync__action_425_external_call_425__linear",
          "to": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync",
          "kind": "call",
          "label": "_question, \"tenantId\", ebookId (nullable Guid)",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.88
        },
        {
          "id": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync__method:c84ulg:askquestionasync__action_426_branch_426__condition",
          "from": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync",
          "to": "method:c84ulg:askquestionasync__action_426_branch_426__condition",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__condition__method:c84ulg:askquestionasync__action_426_branch_426__true",
          "from": "method:c84ulg:askquestionasync__action_426_branch_426__condition",
          "to": "method:c84ulg:askquestionasync__action_426_branch_426__true",
          "kind": "condition-true",
          "label": "assign response from result.Value",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__condition__method:c84ulg:askquestionasync__action_426_branch_426__false",
          "from": "method:c84ulg:askquestionasync__action_426_branch_426__condition",
          "to": "method:c84ulg:askquestionasync__action_426_branch_426__false",
          "kind": "condition-false",
          "label": "construct error GroundedResponseDto with first error message",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__true__method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "from": "method:c84ulg:askquestionasync__action_426_branch_426__true",
          "to": "method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__false__method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "from": "method:c84ulg:askquestionasync__action_426_branch_426__false",
          "to": "method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_branch_426__merge__method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition",
          "from": "method:c84ulg:askquestionasync__action_426_branch_426__merge",
          "to": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition__method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__true",
          "from": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition",
          "to": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition__method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__false",
          "from": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__condition",
          "to": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__true__method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "from": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__true",
          "to": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__false__method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "from": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__false",
          "to": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.78
        },
        {
          "id": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge__method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition",
          "from": "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
          "to": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition",
          "kind": "fallback",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition__method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__true",
          "from": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition",
          "to": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition__method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__false",
          "from": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__condition",
          "to": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__true__method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "from": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__true",
          "to": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "kind": "next",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__false__method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "from": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__false",
          "to": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "kind": "next",
          "line": 430,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge__method:c84ulg:askquestionasync__action_434_askquestionasync_repository_read_434_6__linear",
          "from": "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge",
          "to": "method:c84ulg:askquestionasync__action_434_askquestionasync_repository_read_434_6__linear",
          "kind": "next",
          "line": 434,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86
        },
        {
          "id": "method:c84ulg:askquestionasync__action_434_askquestionasync_repository_read_434_6__linear__method:c84ulg:askquestionasync__action_439_askquestionasync_catch_439_7__catch",
          "from": "method:c84ulg:askquestionasync__action_434_askquestionasync_repository_read_434_6__linear",
          "to": "method:c84ulg:askquestionasync__action_439_askquestionasync_catch_439_7__catch",
          "kind": "exception",
          "line": 439,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.86
        },
        {
          "id": "method:c84ulg:askquestionasync__action_439_askquestionasync_catch_439_7__catch__method:c84ulg:askquestionasync__action_447_askquestionasync_finally_447_8__finally",
          "from": "method:c84ulg:askquestionasync__action_439_askquestionasync_catch_439_7__catch",
          "to": "method:c84ulg:askquestionasync__action_447_askquestionasync_finally_447_8__finally",
          "kind": "next",
          "line": 447,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.84
        },
        {
          "id": "method:c84ulg:askquestionasync__action_447_askquestionasync_finally_447_8__finally__method:c84ulg:askquestionasync__action_447_finally_447__finally",
          "from": "method:c84ulg:askquestionasync__action_447_askquestionasync_finally_447_8__finally",
          "to": "method:c84ulg:askquestionasync__action_447_finally_447__finally",
          "kind": "next",
          "line": 447,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.7
        },
        {
          "id": "method:c84ulg:askquestionasync__action_447_finally_447__finally__implicit_return",
          "from": "method:c84ulg:askquestionasync__action_447_finally_447__finally",
          "to": "method:c84ulg:askquestionasync__implicit_return",
          "kind": "return",
          "line": 452,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_cs_AskQuestionAsync",
          "fromNodeId": "method:c84ulg:askquestionasync__call_425_AskQuestionAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions/Services/IKnowledgeService.cs",
          "targetHint": "AskQuestionAsync",
          "line": 425,
          "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "reason": "Call target AskQuestionAsync in NexusReader.Application.Abstractions/Services/IKnowledgeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:c84ulg:askquestionasync__action_410_guard_clause_410__merge",
        "method:c84ulg:askquestionasync__action_410_askquestionasync_guard_clause_410_0__merge",
        "method:c84ulg:askquestionasync__action_419_branch_419__merge",
        "method:c84ulg:askquestionasync__action_420_askquestionasync_branch_420_2__merge",
        "method:c84ulg:askquestionasync__action_426_branch_426__merge",
        "method:c84ulg:askquestionasync__action_426_askquestionasync_branch_426_4__merge",
        "method:c84ulg:askquestionasync__action_430_askquestionasync_fallback_430_5__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 408,
        "end": 452
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Intelligence.razor",
          "line": 408,
          "summary": "Control-flow fragment extracted for method AskQuestionAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:bktx49:onafterrenderasync__fragment",
      "ownerFileId": "file:1uhcs2l:library-razor",
      "ownerSymbolId": "method:bktx49:onafterrenderasync",
      "ownerSymbolName": "OnAfterRenderAsync",
      "entryNodeId": "method:bktx49:onafterrenderasync__entry",
      "exitNodeIds": [
        "method:bktx49:onafterrenderasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:bktx49:onafterrenderasync__entry",
          "kind": "entry",
          "label": "OnAfterRenderAsync entry",
          "line": 511,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.99,
          "detail": "Lifecycle override that triggers initial load of books on first render."
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition",
          "kind": "condition",
          "label": "firstRender == true",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "if (firstRender) { await LoadBooksAsync(); }"
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__true",
          "kind": "branch-true",
          "label": "load invoked",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "kind": "statement",
          "label": "merge",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition",
          "kind": "condition",
          "label": "firstRender",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78,
          "detail": "if (firstRender)"
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_515_onafterrenderasync_await_515_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 515,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81,
          "detail": "await LoadBooksAsync();"
        },
        {
          "id": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync",
          "kind": "call",
          "label": "LoadBooksAsync",
          "line": 515,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:bktx49:onafterrenderasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 517,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:bktx49:onafterrenderasync__entry__method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition",
          "from": "method:bktx49:onafterrenderasync__entry",
          "to": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition__method:bktx49:onafterrenderasync__action_513_guard_clause_513__true",
          "from": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition",
          "to": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__true",
          "kind": "condition-true",
          "label": "load invoked",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition__method:bktx49:onafterrenderasync__action_513_guard_clause_513__false",
          "from": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__condition",
          "to": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__true__method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "from": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__true",
          "to": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__false__method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "from": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__false",
          "to": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge__method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition",
          "from": "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
          "to": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition__method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__true",
          "from": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition",
          "to": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition__method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__false",
          "from": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__condition",
          "to": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__true__method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "from": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__true",
          "to": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__false__method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "from": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__false",
          "to": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "kind": "next",
          "line": 513,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge__method:bktx49:onafterrenderasync__action_515_onafterrenderasync_await_515_1__await",
          "from": "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge",
          "to": "method:bktx49:onafterrenderasync__action_515_onafterrenderasync_await_515_1__await",
          "kind": "next",
          "line": 515,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81
        },
        {
          "id": "method:bktx49:onafterrenderasync__action_515_onafterrenderasync_await_515_1__await__call_method:bktx49:onafterrenderasync__call_515_LoadBooksAsync",
          "from": "method:bktx49:onafterrenderasync__action_515_onafterrenderasync_await_515_1__await",
          "to": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync",
          "kind": "call",
          "label": "none",
          "line": 515,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88
        },
        {
          "id": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync__implicit_return",
          "from": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync",
          "to": "method:bktx49:onafterrenderasync__implicit_return",
          "kind": "return",
          "line": 517,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync__jump_NexusReader_UI_Shared_Pages_Library_razor_LoadBooksAsync",
          "fromNodeId": "method:bktx49:onafterrenderasync__call_515_LoadBooksAsync",
          "kind": "call-target",
          "targetNodeId": "method:676x78:loadbooksasync",
          "targetPath": "NexusReader.UI.Shared/Pages/Library.razor",
          "targetHint": "LoadBooksAsync",
          "line": 515,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "reason": "Call target LoadBooksAsync resolved to NexusReader.UI.Shared/Pages/Library.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:bktx49:onafterrenderasync__action_513_guard_clause_513__merge",
        "method:bktx49:onafterrenderasync__action_513_onafterrenderasync_branch_513_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 511,
        "end": 517
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 511,
          "summary": "Control-flow fragment extracted for method OnAfterRenderAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:676x78:loadbooksasync__fragment",
      "ownerFileId": "file:1uhcs2l:library-razor",
      "ownerSymbolId": "method:676x78:loadbooksasync",
      "ownerSymbolName": "LoadBooksAsync",
      "entryNodeId": "method:676x78:loadbooksasync__entry",
      "exitNodeIds": [
        "method:676x78:loadbooksasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:676x78:loadbooksasync__entry",
          "kind": "entry",
          "label": "LoadBooksAsync entry",
          "line": 519,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.99,
          "detail": "Loads the list of last-read books from the backend API and updates component state with loading/success/failure handling."
        },
        {
          "id": "method:676x78:loadbooksasync__action_521_state_change_521__linear",
          "kind": "statement",
          "label": "Set loading indicator true",
          "line": 521,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "_isLoading = true; StateHasChanged();"
        },
        {
          "id": "method:676x78:loadbooksasync__action_524_try_catch_finally_524__linear",
          "kind": "statement",
          "label": "Exception handling and fallback for browser environment",
          "line": 524,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { Console.WriteLine(...); if (OperatingSystem.IsBrowser()) _isLoading = false; } finally { StateHasChanged(); }"
        },
        {
          "id": "method:676x78:loadbooksasync__action_524_loadbooksasync_try_524_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 524,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:676x78:loadbooksasync__action_526_loadbooksasync_await_526_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 526,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81,
          "detail": "_books = await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");"
        },
        {
          "id": "method:676x78:loadbooksasync__action_526_external_call_526__linear",
          "kind": "http-call",
          "label": "Fetch books from API endpoint",
          "line": 526,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "await Http.GetFromJsonAsync<List<LastReadBookDto>>(\"api/library/books\");"
        },
        {
          "id": "method:676x78:loadbooksasync__action_527_state_change_527__linear",
          "kind": "statement",
          "label": "Store loaded books and clear loading flag",
          "line": 527,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "_books = ...; _isLoading = false;"
        },
        {
          "id": "method:676x78:loadbooksasync__action_529_loadbooksasync_catch_529_2__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 529,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:676x78:loadbooksasync__action_531_log_531__linear",
          "kind": "statement",
          "label": "Log load failure to console",
          "line": 531,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[Library] Failed to load books: {ex.Message}\");"
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition",
          "kind": "condition",
          "label": "OperatingSystem.IsBrowser()",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78,
          "detail": "if (OperatingSystem.IsBrowser())"
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_537_loadbooksasync_finally_537_4__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 537,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:676x78:loadbooksasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 541,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:676x78:loadbooksasync__entry__method:676x78:loadbooksasync__action_521_state_change_521__linear",
          "from": "method:676x78:loadbooksasync__entry",
          "to": "method:676x78:loadbooksasync__action_521_state_change_521__linear",
          "kind": "next",
          "line": 521,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:676x78:loadbooksasync__action_521_state_change_521__linear__method:676x78:loadbooksasync__action_524_try_catch_finally_524__linear",
          "from": "method:676x78:loadbooksasync__action_521_state_change_521__linear",
          "to": "method:676x78:loadbooksasync__action_524_try_catch_finally_524__linear",
          "kind": "next",
          "line": 524,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:676x78:loadbooksasync__action_524_try_catch_finally_524__linear__method:676x78:loadbooksasync__action_524_loadbooksasync_try_524_0__try",
          "from": "method:676x78:loadbooksasync__action_524_try_catch_finally_524__linear",
          "to": "method:676x78:loadbooksasync__action_524_loadbooksasync_try_524_0__try",
          "kind": "next",
          "line": 524,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.84
        },
        {
          "id": "method:676x78:loadbooksasync__action_524_loadbooksasync_try_524_0__try__method:676x78:loadbooksasync__action_526_loadbooksasync_await_526_1__await",
          "from": "method:676x78:loadbooksasync__action_524_loadbooksasync_try_524_0__try",
          "to": "method:676x78:loadbooksasync__action_526_loadbooksasync_await_526_1__await",
          "kind": "next",
          "line": 526,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81
        },
        {
          "id": "method:676x78:loadbooksasync__action_526_loadbooksasync_await_526_1__await__method:676x78:loadbooksasync__action_526_external_call_526__linear",
          "from": "method:676x78:loadbooksasync__action_526_loadbooksasync_await_526_1__await",
          "to": "method:676x78:loadbooksasync__action_526_external_call_526__linear",
          "kind": "next",
          "line": 526,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:676x78:loadbooksasync__action_526_external_call_526__linear__method:676x78:loadbooksasync__action_527_state_change_527__linear",
          "from": "method:676x78:loadbooksasync__action_526_external_call_526__linear",
          "to": "method:676x78:loadbooksasync__action_527_state_change_527__linear",
          "kind": "next",
          "line": 527,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:676x78:loadbooksasync__action_527_state_change_527__linear__method:676x78:loadbooksasync__action_529_loadbooksasync_catch_529_2__catch",
          "from": "method:676x78:loadbooksasync__action_527_state_change_527__linear",
          "to": "method:676x78:loadbooksasync__action_529_loadbooksasync_catch_529_2__catch",
          "kind": "exception",
          "line": 529,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.86
        },
        {
          "id": "method:676x78:loadbooksasync__action_529_loadbooksasync_catch_529_2__catch__method:676x78:loadbooksasync__action_531_log_531__linear",
          "from": "method:676x78:loadbooksasync__action_529_loadbooksasync_catch_529_2__catch",
          "to": "method:676x78:loadbooksasync__action_531_log_531__linear",
          "kind": "next",
          "line": 531,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:676x78:loadbooksasync__action_531_log_531__linear__method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition",
          "from": "method:676x78:loadbooksasync__action_531_log_531__linear",
          "to": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition",
          "kind": "next",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition__method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__true",
          "from": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition",
          "to": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition__method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__false",
          "from": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__condition",
          "to": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__true__method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "from": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__true",
          "to": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "kind": "next",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__false__method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "from": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__false",
          "to": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "kind": "next",
          "line": 532,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.78
        },
        {
          "id": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge__method:676x78:loadbooksasync__action_537_loadbooksasync_finally_537_4__finally",
          "from": "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge",
          "to": "method:676x78:loadbooksasync__action_537_loadbooksasync_finally_537_4__finally",
          "kind": "next",
          "line": 537,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.84
        },
        {
          "id": "method:676x78:loadbooksasync__action_537_loadbooksasync_finally_537_4__finally__implicit_return",
          "from": "method:676x78:loadbooksasync__action_537_loadbooksasync_finally_537_4__finally",
          "to": "method:676x78:loadbooksasync__implicit_return",
          "kind": "return",
          "line": 541,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:676x78:loadbooksasync__action_532_loadbooksasync_branch_532_3__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 519,
        "end": 541
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 519,
          "summary": "Control-flow fragment extracted for method LoadBooksAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ffpsuv:refreshlibrary__fragment",
      "ownerFileId": "file:1uhcs2l:library-razor",
      "ownerSymbolId": "method:1ffpsuv:refreshlibrary",
      "ownerSymbolName": "RefreshLibrary",
      "entryNodeId": "method:1ffpsuv:refreshlibrary__entry",
      "exitNodeIds": [
        "method:1ffpsuv:refreshlibrary__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ffpsuv:refreshlibrary__entry",
          "kind": "entry",
          "label": "RefreshLibrary entry",
          "line": 543,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.99,
          "detail": "Public refresh helper invoked after the ingestion modal closes to reload the library."
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__action_23_event_binding_23__linear",
          "kind": "statement",
          "label": "Bound to BookIngestionModal @bind-IsOpen:after (modal close)",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "BookIngestionModal @bind-IsOpen:after=\"RefreshLibrary\" triggers this when modal closes or state changes."
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__action_546_refreshlibrary_await_546_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 546,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81,
          "detail": "await LoadBooksAsync();"
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync",
          "kind": "call",
          "label": "LoadBooksAsync",
          "line": 546,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 547,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ffpsuv:refreshlibrary__entry__method:1ffpsuv:refreshlibrary__action_23_event_binding_23__linear",
          "from": "method:1ffpsuv:refreshlibrary__entry",
          "to": "method:1ffpsuv:refreshlibrary__action_23_event_binding_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__action_23_event_binding_23__linear__method:1ffpsuv:refreshlibrary__action_546_refreshlibrary_await_546_0__await",
          "from": "method:1ffpsuv:refreshlibrary__action_23_event_binding_23__linear",
          "to": "method:1ffpsuv:refreshlibrary__action_546_refreshlibrary_await_546_0__await",
          "kind": "next",
          "line": 546,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.81
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__action_546_refreshlibrary_await_546_0__await__call_method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync",
          "from": "method:1ffpsuv:refreshlibrary__action_546_refreshlibrary_await_546_0__await",
          "to": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync",
          "kind": "call",
          "label": "none",
          "line": 546,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync__implicit_return",
          "from": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync",
          "to": "method:1ffpsuv:refreshlibrary__implicit_return",
          "kind": "return",
          "line": 547,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync__jump_NexusReader_UI_Shared_Pages_Library_razor_LoadBooksAsync",
          "fromNodeId": "method:1ffpsuv:refreshlibrary__call_546_LoadBooksAsync",
          "kind": "call-target",
          "targetNodeId": "method:676x78:loadbooksasync",
          "targetPath": "NexusReader.UI.Shared/Pages/Library.razor",
          "targetHint": "LoadBooksAsync",
          "line": 546,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "reason": "Call target LoadBooksAsync resolved to NexusReader.UI.Shared/Pages/Library.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.82,
      "lineSpan": {
        "start": 543,
        "end": 547
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 543,
          "summary": "Control-flow fragment extracted for method RefreshLibrary.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8gksn2:openbook__fragment",
      "ownerFileId": "file:1uhcs2l:library-razor",
      "ownerSymbolId": "method:8gksn2:openbook",
      "ownerSymbolName": "OpenBook",
      "entryNodeId": "method:8gksn2:openbook__entry",
      "exitNodeIds": [
        "method:8gksn2:openbook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8gksn2:openbook__entry",
          "kind": "entry",
          "label": "OpenBook entry",
          "line": 549,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.99,
          "detail": "Navigate to the reader view for the selected book using the injected navigation service."
        },
        {
          "id": "method:8gksn2:openbook__action_77_invoked_from_markup_77__linear",
          "kind": "statement",
          "label": "Invoked by book card click",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7,
          "detail": "card @onclick=\"() => OpenBook(book.Id)\""
        },
        {
          "id": "method:8gksn2:openbook__call_551_NavigateToBook",
          "kind": "call",
          "label": "NavigateToBook",
          "line": 551,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88,
          "detail": "bookId (Guid)"
        },
        {
          "id": "method:8gksn2:openbook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 552,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8gksn2:openbook__entry__method:8gksn2:openbook__action_77_invoked_from_markup_77__linear",
          "from": "method:8gksn2:openbook__entry",
          "to": "method:8gksn2:openbook__action_77_invoked_from_markup_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.7
        },
        {
          "id": "method:8gksn2:openbook__action_77_invoked_from_markup_77__linear__call_method:8gksn2:openbook__call_551_NavigateToBook",
          "from": "method:8gksn2:openbook__action_77_invoked_from_markup_77__linear",
          "to": "method:8gksn2:openbook__call_551_NavigateToBook",
          "kind": "call",
          "label": "bookId (Guid)",
          "line": 551,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.88
        },
        {
          "id": "method:8gksn2:openbook__call_551_NavigateToBook__implicit_return",
          "from": "method:8gksn2:openbook__call_551_NavigateToBook",
          "to": "method:8gksn2:openbook__implicit_return",
          "kind": "return",
          "line": 552,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:8gksn2:openbook__call_551_NavigateToBook__jump_NexusReader_UI_Shared_Services_IReaderNavigationService_NavigateToBook",
          "fromNodeId": "method:8gksn2:openbook__call_551_NavigateToBook",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IReaderNavigationService",
          "targetHint": "NavigateToBook",
          "line": 551,
          "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor",
          "reason": "Call target NavigateToBook in NexusReader.UI.Shared/Services/IReaderNavigationService could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 549,
        "end": 552
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Pages/Library.razor",
          "line": 549,
          "summary": "Control-flow fragment extracted for method OpenBook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bnazn2:render-component-markup__fragment",
      "ownerFileId": "file:1sm6kjd:routes-razor",
      "ownerSymbolId": "method:1bnazn2:render-component-markup",
      "ownerSymbolName": "Render (component markup)",
      "entryNodeId": "method:1bnazn2:render-component-markup__entry",
      "exitNodeIds": [
        "method:1bnazn2:render-component-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1bnazn2:render-component-markup__entry",
          "kind": "entry",
          "label": "Render (component markup) entry",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.99,
          "detail": "Renders the app Router, wraps route rendering in an authorization view and an error boundary; shows NotFound and an error UI with a retry action."
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_1_error_boundary_1__linear",
          "kind": "statement",
          "label": "Global error handling UI",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "ErrorBoundary with ErrorContent displays an error card and exception message"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_3_orchestration_3__linear",
          "kind": "statement",
          "label": "Routing orchestration",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "<Router AppAssembly=\"@typeof(Routes).Assembly\"> selects pages based on route data"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_5_authorization_gate_5__linear",
          "kind": "statement",
          "label": "AuthorizeRouteView enforces authorization for routed pages",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Wraps routed components and provides a NotAuthorized slot"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_5_MainHubLayout",
          "kind": "call",
          "label": "MainHubLayout",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88,
          "detail": "used as DefaultLayout for AuthorizeRouteView"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition",
          "kind": "condition",
          "label": "NotAuthorized fallback",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Renders RedirectToLogin when route requires auth and user is not authorized"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin",
          "kind": "call",
          "label": "RedirectToLogin",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88,
          "detail": "none (renders redirect-to-login component in NotAuthorized slot)"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_10_focus_navigation_10__linear",
          "kind": "statement",
          "label": "FocusOnNavigate usage",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Focuses the h1 element on navigation using FocusOnNavigate (improves accessibility)"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition",
          "kind": "condition",
          "label": "NotFound fallback",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Renders NotFound component when no route matches"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__true",
          "kind": "branch-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__false",
          "kind": "branch-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_13_NotFound",
          "kind": "call",
          "label": "NotFound",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88,
          "detail": "renders NotFound page for unmatched routes"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_21_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88,
          "detail": "icon props { Name: 'alert-triangle', Size: 48, Color: '#ff4444' }"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_27_display_27__linear",
          "kind": "statement",
          "label": "Surface exception message",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Renders @ex.Message inside <code>"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "kind": "loop-entry",
          "label": "Retry/recover action",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Button onclick triggers lambda that calls _errorBoundary?.Recover() to attempt UI recovery"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_body",
          "kind": "loop-body",
          "label": "Button onclick triggers lambda that calls _errorBoundary?.Recover() to attempt UI recovery",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition",
          "kind": "condition",
          "label": "_errorBoundary != null",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7,
          "detail": "Uses null-conditional operator when invoking Recover"
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__true",
          "kind": "branch-true",
          "label": "calls Recover()",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "kind": "statement",
          "label": "merge",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_31_NexusIcon",
          "kind": "call",
          "label": "NexusIcon",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88,
          "detail": "icon props { Name: 'refresh-cw', Size: 16 }"
        },
        {
          "id": "method:1bnazn2:render-component-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1bnazn2:render-component-markup__entry__method:1bnazn2:render-component-markup__action_1_error_boundary_1__linear",
          "from": "method:1bnazn2:render-component-markup__entry",
          "to": "method:1bnazn2:render-component-markup__action_1_error_boundary_1__linear",
          "kind": "next",
          "line": 1,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_1_error_boundary_1__linear__method:1bnazn2:render-component-markup__action_3_orchestration_3__linear",
          "from": "method:1bnazn2:render-component-markup__action_1_error_boundary_1__linear",
          "to": "method:1bnazn2:render-component-markup__action_3_orchestration_3__linear",
          "kind": "next",
          "line": 3,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_3_orchestration_3__linear__method:1bnazn2:render-component-markup__action_5_authorization_gate_5__linear",
          "from": "method:1bnazn2:render-component-markup__action_3_orchestration_3__linear",
          "to": "method:1bnazn2:render-component-markup__action_5_authorization_gate_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_5_authorization_gate_5__linear__call_method:1bnazn2:render-component-markup__call_5_MainHubLayout",
          "from": "method:1bnazn2:render-component-markup__action_5_authorization_gate_5__linear",
          "to": "method:1bnazn2:render-component-markup__call_5_MainHubLayout",
          "kind": "call",
          "label": "used as DefaultLayout for AuthorizeRouteView",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_5_MainHubLayout__method:1bnazn2:render-component-markup__action_6_fallback_6__condition",
          "from": "method:1bnazn2:render-component-markup__call_5_MainHubLayout",
          "to": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition",
          "kind": "fallback",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition__method:1bnazn2:render-component-markup__action_6_fallback_6__true",
          "from": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition",
          "to": "method:1bnazn2:render-component-markup__action_6_fallback_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition__method:1bnazn2:render-component-markup__action_6_fallback_6__false",
          "from": "method:1bnazn2:render-component-markup__action_6_fallback_6__condition",
          "to": "method:1bnazn2:render-component-markup__action_6_fallback_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__true__method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "from": "method:1bnazn2:render-component-markup__action_6_fallback_6__true",
          "to": "method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__false__method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "from": "method:1bnazn2:render-component-markup__action_6_fallback_6__false",
          "to": "method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_6_fallback_6__merge__call_method:1bnazn2:render-component-markup__call_7_RedirectToLogin",
          "from": "method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
          "to": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin",
          "kind": "call",
          "label": "none (renders redirect-to-login component in NotAuthorized slot)",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin__method:1bnazn2:render-component-markup__action_10_focus_navigation_10__linear",
          "from": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin",
          "to": "method:1bnazn2:render-component-markup__action_10_focus_navigation_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_10_focus_navigation_10__linear__method:1bnazn2:render-component-markup__action_12_fallback_12__condition",
          "from": "method:1bnazn2:render-component-markup__action_10_focus_navigation_10__linear",
          "to": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition",
          "kind": "fallback",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition__method:1bnazn2:render-component-markup__action_12_fallback_12__true",
          "from": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition",
          "to": "method:1bnazn2:render-component-markup__action_12_fallback_12__true",
          "kind": "condition-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition__method:1bnazn2:render-component-markup__action_12_fallback_12__false",
          "from": "method:1bnazn2:render-component-markup__action_12_fallback_12__condition",
          "to": "method:1bnazn2:render-component-markup__action_12_fallback_12__false",
          "kind": "condition-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__true__method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "from": "method:1bnazn2:render-component-markup__action_12_fallback_12__true",
          "to": "method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__false__method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "from": "method:1bnazn2:render-component-markup__action_12_fallback_12__false",
          "to": "method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_12_fallback_12__merge__call_method:1bnazn2:render-component-markup__call_13_NotFound",
          "from": "method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
          "to": "method:1bnazn2:render-component-markup__call_13_NotFound",
          "kind": "call",
          "label": "renders NotFound page for unmatched routes",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_13_NotFound__call_method:1bnazn2:render-component-markup__call_21_NexusIcon",
          "from": "method:1bnazn2:render-component-markup__call_13_NotFound",
          "to": "method:1bnazn2:render-component-markup__call_21_NexusIcon",
          "kind": "call",
          "label": "icon props { Name: 'alert-triangle', Size: 48, Color: '#ff4444' }",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_21_NexusIcon__method:1bnazn2:render-component-markup__action_27_display_27__linear",
          "from": "method:1bnazn2:render-component-markup__call_21_NexusIcon",
          "to": "method:1bnazn2:render-component-markup__action_27_display_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_27_display_27__linear__method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "from": "method:1bnazn2:render-component-markup__action_27_display_27__linear",
          "to": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry__method:1bnazn2:render-component-markup__action_30_retry_30__loop_body",
          "from": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "to": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_body__method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "from": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_body",
          "to": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "kind": "retry",
          "label": "retry",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry__method:1bnazn2:render-component-markup__action_30_retry_30__loop_exit",
          "from": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry",
          "to": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_exit__method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition",
          "from": "method:1bnazn2:render-component-markup__action_30_retry_30__loop_exit",
          "to": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition__method:1bnazn2:render-component-markup__action_30_guard_clause_30__true",
          "from": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition",
          "to": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__true",
          "kind": "condition-true",
          "label": "calls Recover()",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition__method:1bnazn2:render-component-markup__action_30_guard_clause_30__false",
          "from": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__condition",
          "to": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__true__method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "from": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__true",
          "to": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__false__method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "from": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__false",
          "to": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge__call_method:1bnazn2:render-component-markup__call_31_NexusIcon",
          "from": "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge",
          "to": "method:1bnazn2:render-component-markup__call_31_NexusIcon",
          "kind": "call",
          "label": "icon props { Name: 'refresh-cw', Size: 16 }",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.88
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_31_NexusIcon__implicit_return",
          "from": "method:1bnazn2:render-component-markup__call_31_NexusIcon",
          "to": "method:1bnazn2:render-component-markup__implicit_return",
          "kind": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1bnazn2:render-component-markup__call_5_MainHubLayout__jump_NexusReader_UI_Shared_Layouts_MainHubLayout_razor_MainHubLayout",
          "fromNodeId": "method:1bnazn2:render-component-markup__call_5_MainHubLayout",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Layouts/MainHubLayout.razor",
          "targetHint": "MainHubLayout",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "reason": "Call target MainHubLayout in NexusReader.UI.Shared/Layouts/MainHubLayout.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin__jump_NexusReader_UI_Shared_RedirectToLogin_razor_RedirectToLogin",
          "fromNodeId": "method:1bnazn2:render-component-markup__call_7_RedirectToLogin",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/RedirectToLogin.razor",
          "targetHint": "RedirectToLogin",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "reason": "Call target RedirectToLogin in NexusReader.UI.Shared/RedirectToLogin.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_13_NotFound__jump_NexusReader_UI_Shared_Pages_NotFound_razor_NotFound",
          "fromNodeId": "method:1bnazn2:render-component-markup__call_13_NotFound",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Pages/NotFound.razor",
          "targetHint": "NotFound",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "reason": "Call target NotFound in NexusReader.UI.Shared/Pages/NotFound.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_21_NexusIcon__jump_NexusReader_UI_Shared_Components_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:1bnazn2:render-component-markup__call_21_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1bnazn2:render-component-markup__call_31_NexusIcon__jump_NexusReader_UI_Shared_Components_NexusIcon_razor_NexusIcon",
          "fromNodeId": "method:1bnazn2:render-component-markup__call_31_NexusIcon",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Components/NexusIcon.razor",
          "targetHint": "NexusIcon",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Routes.razor",
          "reason": "Call target NexusIcon in NexusReader.UI.Shared/Components/NexusIcon.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:1bnazn2:render-component-markup__action_30_retry_30__loop_body__method:1bnazn2:render-component-markup__action_30_retry_30__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1bnazn2:render-component-markup__action_6_fallback_6__merge",
        "method:1bnazn2:render-component-markup__action_12_fallback_12__merge",
        "method:1bnazn2:render-component-markup__action_30_guard_clause_30__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 1,
        "end": 41
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Routes.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method Render (component markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:wn38ys:focusmodeservice__fragment",
      "ownerFileId": "file:1953stk:focusmodeservice-cs",
      "ownerSymbolId": "method:wn38ys:focusmodeservice",
      "ownerSymbolName": "FocusModeService",
      "entryNodeId": "method:wn38ys:focusmodeservice__entry",
      "exitNodeIds": [
        "method:wn38ys:focusmodeservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:wn38ys:focusmodeservice__entry",
          "kind": "entry",
          "label": "FocusModeService entry",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.99,
          "detail": "Constructs the service and captures an IJSRuntime instance for JS interop."
        },
        {
          "id": "method:wn38ys:focusmodeservice__action_13_assignment_13__linear",
          "kind": "statement",
          "label": "Stores js runtime",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime = jsRuntime"
        },
        {
          "id": "method:wn38ys:focusmodeservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:wn38ys:focusmodeservice__entry__method:wn38ys:focusmodeservice__action_13_assignment_13__linear",
          "from": "method:wn38ys:focusmodeservice__entry",
          "to": "method:wn38ys:focusmodeservice__action_13_assignment_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wn38ys:focusmodeservice__action_13_assignment_13__linear__implicit_return",
          "from": "method:wn38ys:focusmodeservice__action_13_assignment_13__linear",
          "to": "method:wn38ys:focusmodeservice__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method FocusModeService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1094u9:initializeasync__fragment",
      "ownerFileId": "file:1953stk:focusmodeservice-cs",
      "ownerSymbolId": "method:1094u9:initializeasync",
      "ownerSymbolName": "InitializeAsync",
      "entryNodeId": "method:1094u9:initializeasync__entry",
      "exitNodeIds": [
        "method:1094u9:initializeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1094u9:initializeasync__entry",
          "kind": "entry",
          "label": "InitializeAsync entry",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.99,
          "detail": "Reads persisted focus-mode flag from localStorage and activates focus mode if stored as true, notifying subscribers; ignores JS errors (e.g., during pre-render)."
        },
        {
          "id": "method:1094u9:initializeasync__action_18_try_catch_18__linear",
          "kind": "statement",
          "label": "Wrap JS interop in try/catch",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "try { await _jsRuntime.InvokeAsync... } catch { /* ignored */ }"
        },
        {
          "id": "method:1094u9:initializeasync__action_18_initializeasync_try_18_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1094u9:initializeasync__action_20_initializeasync_await_20_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81,
          "detail": "var value = await _jsRuntime.InvokeAsync<string>(\"localStorage.getItem\", \"nexus_focus_mode\");"
        },
        {
          "id": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync",
          "kind": "call",
          "label": "IJSRuntime.InvokeAsync",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88,
          "detail": "calls localStorage.getItem with key 'nexus_focus_mode', expects string"
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition",
          "kind": "condition",
          "label": "value == \"true\" && !IsFocusModeActive",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78,
          "detail": "if (value == \"true\" && !IsFocusModeActive)"
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__condition",
          "kind": "condition",
          "label": "value == \"true\" && !IsFocusModeActive",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "if condition true then set IsFocusModeActive = true and invoke OnFocusModeChanged"
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__true",
          "kind": "branch-true",
          "label": "set active & notify",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "kind": "statement",
          "label": "merge",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_await_24_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:1094u9:initializeasync__action_24_event_invocation_24__linear",
          "kind": "statement",
          "label": "Notify subscribers of mode change",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition",
          "kind": "condition",
          "label": "OnFocusModeChanged != null) await OnFocusModeChanged(",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__call_24_OnFocusModeChanged",
          "kind": "call",
          "label": "OnFocusModeChanged",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88,
          "detail": "no args, invokes subscribers asynchronously"
        },
        {
          "id": "method:1094u9:initializeasync__action_27_initializeasync_catch_27_5__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.86,
          "detail": "catch"
        },
        {
          "id": "method:1094u9:initializeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1094u9:initializeasync__entry__method:1094u9:initializeasync__action_18_try_catch_18__linear",
          "from": "method:1094u9:initializeasync__entry",
          "to": "method:1094u9:initializeasync__action_18_try_catch_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_18_try_catch_18__linear__method:1094u9:initializeasync__action_18_initializeasync_try_18_0__try",
          "from": "method:1094u9:initializeasync__action_18_try_catch_18__linear",
          "to": "method:1094u9:initializeasync__action_18_initializeasync_try_18_0__try",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1094u9:initializeasync__action_18_initializeasync_try_18_0__try__method:1094u9:initializeasync__action_20_initializeasync_await_20_1__await",
          "from": "method:1094u9:initializeasync__action_18_initializeasync_try_18_0__try",
          "to": "method:1094u9:initializeasync__action_20_initializeasync_await_20_1__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1094u9:initializeasync__action_20_initializeasync_await_20_1__await__call_method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync",
          "from": "method:1094u9:initializeasync__action_20_initializeasync_await_20_1__await",
          "to": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync",
          "kind": "call",
          "label": "calls localStorage.getItem with key 'nexus_focus_mode', expects string",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync__method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition",
          "from": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync",
          "to": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition__method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__true",
          "from": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition",
          "to": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition__method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__false",
          "from": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__condition",
          "to": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__true__method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "from": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__true",
          "to": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__false__method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "from": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__false",
          "to": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge__method:1094u9:initializeasync__action_21_guard_clause_21__condition",
          "from": "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
          "to": "method:1094u9:initializeasync__action_21_guard_clause_21__condition",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__condition__method:1094u9:initializeasync__action_21_guard_clause_21__true",
          "from": "method:1094u9:initializeasync__action_21_guard_clause_21__condition",
          "to": "method:1094u9:initializeasync__action_21_guard_clause_21__true",
          "kind": "condition-true",
          "label": "set active & notify",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__condition__method:1094u9:initializeasync__action_21_guard_clause_21__false",
          "from": "method:1094u9:initializeasync__action_21_guard_clause_21__condition",
          "to": "method:1094u9:initializeasync__action_21_guard_clause_21__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__true__method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "from": "method:1094u9:initializeasync__action_21_guard_clause_21__true",
          "to": "method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__false__method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "from": "method:1094u9:initializeasync__action_21_guard_clause_21__false",
          "to": "method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_21_guard_clause_21__merge__method:1094u9:initializeasync__action_24_initializeasync_await_24_4__await",
          "from": "method:1094u9:initializeasync__action_21_guard_clause_21__merge",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_await_24_4__await",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_await_24_4__await__method:1094u9:initializeasync__action_24_event_invocation_24__linear",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_await_24_4__await",
          "to": "method:1094u9:initializeasync__action_24_event_invocation_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1094u9:initializeasync__action_24_event_invocation_24__linear__method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition",
          "from": "method:1094u9:initializeasync__action_24_event_invocation_24__linear",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition__method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__true",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition__method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__false",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__condition",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__true__method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__true",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__false__method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__false",
          "to": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge__call_method:1094u9:initializeasync__call_24_OnFocusModeChanged",
          "from": "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge",
          "to": "method:1094u9:initializeasync__call_24_OnFocusModeChanged",
          "kind": "call",
          "label": "no args, invokes subscribers asynchronously",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1094u9:initializeasync__call_24_OnFocusModeChanged__method:1094u9:initializeasync__action_27_initializeasync_catch_27_5__catch",
          "from": "method:1094u9:initializeasync__call_24_OnFocusModeChanged",
          "to": "method:1094u9:initializeasync__action_27_initializeasync_catch_27_5__catch",
          "kind": "exception",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1094u9:initializeasync__action_27_initializeasync_catch_27_5__catch__implicit_return",
          "from": "method:1094u9:initializeasync__action_27_initializeasync_catch_27_5__catch",
          "to": "method:1094u9:initializeasync__implicit_return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync__jump_unknown_IJSRuntime_InvokeAsync",
          "fromNodeId": "method:1094u9:initializeasync__call_20_IJSRuntime_InvokeAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IJSRuntime.InvokeAsync",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "reason": "Call target IJSRuntime.InvokeAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1094u9:initializeasync__call_24_OnFocusModeChanged__jump_NexusReader_UI_Shared_Services_FocusModeService_cs_OnFocusModeChanged",
          "fromNodeId": "method:1094u9:initializeasync__call_24_OnFocusModeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "targetHint": "OnFocusModeChanged",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "reason": "Call target OnFocusModeChanged in NexusReader.UI.Shared/Services/FocusModeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1094u9:initializeasync__action_21_initializeasync_branch_21_2__merge",
        "method:1094u9:initializeasync__action_21_guard_clause_21__merge",
        "method:1094u9:initializeasync__action_24_initializeasync_branch_24_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 16,
        "end": 31
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method InitializeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:439s8m:toggleasync__fragment",
      "ownerFileId": "file:1953stk:focusmodeservice-cs",
      "ownerSymbolId": "method:439s8m:toggleasync",
      "ownerSymbolName": "ToggleAsync",
      "entryNodeId": "method:439s8m:toggleasync__entry",
      "exitNodeIds": [
        "method:439s8m:toggleasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:439s8m:toggleasync__entry",
          "kind": "entry",
          "label": "ToggleAsync entry",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.99,
          "detail": "Toggles the in-memory focus-mode flag, notifies subscribers, and persists the new value to localStorage; ignores JS write errors."
        },
        {
          "id": "method:439s8m:toggleasync__action_35_state_change_35__linear",
          "kind": "statement",
          "label": "Toggle in-memory flag",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "IsFocusModeActive = !IsFocusModeActive"
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_await_36_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:439s8m:toggleasync__action_36_event_invocation_36__linear",
          "kind": "statement",
          "label": "Notify subscribers after toggle",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition",
          "kind": "condition",
          "label": "OnFocusModeChanged != null) await OnFocusModeChanged(",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78,
          "detail": "if (OnFocusModeChanged != null) await OnFocusModeChanged();"
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__call_36_OnFocusModeChanged",
          "kind": "call",
          "label": "OnFocusModeChanged",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88,
          "detail": "no args, invokes subscribers asynchronously"
        },
        {
          "id": "method:439s8m:toggleasync__action_38_try_catch_38__linear",
          "kind": "statement",
          "label": "Persist new value to localStorage, ignore errors",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7,
          "detail": "try { await _jsRuntime.InvokeVoidAsync(...)} catch { }"
        },
        {
          "id": "method:439s8m:toggleasync__action_38_toggleasync_try_38_2__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:439s8m:toggleasync__action_40_toggleasync_await_40_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", \"nexus_focus_mode\", IsFocusModeActive ? \"true\" : \"false\");"
        },
        {
          "id": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync",
          "kind": "call",
          "label": "IJSRuntime.InvokeVoidAsync",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88,
          "detail": "calls localStorage.setItem with key 'nexus_focus_mode' and value 'true' or 'false'"
        },
        {
          "id": "method:439s8m:toggleasync__action_42_toggleasync_catch_42_4__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.86,
          "detail": "catch { }"
        },
        {
          "id": "method:439s8m:toggleasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:439s8m:toggleasync__entry__method:439s8m:toggleasync__action_35_state_change_35__linear",
          "from": "method:439s8m:toggleasync__entry",
          "to": "method:439s8m:toggleasync__action_35_state_change_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:439s8m:toggleasync__action_35_state_change_35__linear__method:439s8m:toggleasync__action_36_toggleasync_await_36_1__await",
          "from": "method:439s8m:toggleasync__action_35_state_change_35__linear",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_await_36_1__await",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_await_36_1__await__method:439s8m:toggleasync__action_36_event_invocation_36__linear",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_await_36_1__await",
          "to": "method:439s8m:toggleasync__action_36_event_invocation_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:439s8m:toggleasync__action_36_event_invocation_36__linear__method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition",
          "from": "method:439s8m:toggleasync__action_36_event_invocation_36__linear",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition__method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__true",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition__method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__false",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__condition",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__true__method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__true",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__false__method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__false",
          "to": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge__call_method:439s8m:toggleasync__call_36_OnFocusModeChanged",
          "from": "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge",
          "to": "method:439s8m:toggleasync__call_36_OnFocusModeChanged",
          "kind": "call",
          "label": "no args, invokes subscribers asynchronously",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:439s8m:toggleasync__call_36_OnFocusModeChanged__method:439s8m:toggleasync__action_38_try_catch_38__linear",
          "from": "method:439s8m:toggleasync__call_36_OnFocusModeChanged",
          "to": "method:439s8m:toggleasync__action_38_try_catch_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:439s8m:toggleasync__action_38_try_catch_38__linear__method:439s8m:toggleasync__action_38_toggleasync_try_38_2__try",
          "from": "method:439s8m:toggleasync__action_38_try_catch_38__linear",
          "to": "method:439s8m:toggleasync__action_38_toggleasync_try_38_2__try",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:439s8m:toggleasync__action_38_toggleasync_try_38_2__try__method:439s8m:toggleasync__action_40_toggleasync_await_40_3__await",
          "from": "method:439s8m:toggleasync__action_38_toggleasync_try_38_2__try",
          "to": "method:439s8m:toggleasync__action_40_toggleasync_await_40_3__await",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:439s8m:toggleasync__action_40_toggleasync_await_40_3__await__call_method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync",
          "from": "method:439s8m:toggleasync__action_40_toggleasync_await_40_3__await",
          "to": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync",
          "kind": "call",
          "label": "calls localStorage.setItem with key 'nexus_focus_mode' and value 'true' or 'false'",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync__method:439s8m:toggleasync__action_42_toggleasync_catch_42_4__catch",
          "from": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync",
          "to": "method:439s8m:toggleasync__action_42_toggleasync_catch_42_4__catch",
          "kind": "exception",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:439s8m:toggleasync__action_42_toggleasync_catch_42_4__catch__implicit_return",
          "from": "method:439s8m:toggleasync__action_42_toggleasync_catch_42_4__catch",
          "to": "method:439s8m:toggleasync__implicit_return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:439s8m:toggleasync__call_36_OnFocusModeChanged__jump_NexusReader_UI_Shared_Services_FocusModeService_cs_OnFocusModeChanged",
          "fromNodeId": "method:439s8m:toggleasync__call_36_OnFocusModeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "targetHint": "OnFocusModeChanged",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "reason": "Call target OnFocusModeChanged in NexusReader.UI.Shared/Services/FocusModeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync__jump_unknown_IJSRuntime_InvokeVoidAsync",
          "fromNodeId": "method:439s8m:toggleasync__call_40_IJSRuntime_InvokeVoidAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IJSRuntime.InvokeVoidAsync",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "reason": "Call target IJSRuntime.InvokeVoidAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:439s8m:toggleasync__action_36_toggleasync_branch_36_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 33,
        "end": 42
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/FocusModeService.cs",
          "line": 33,
          "summary": "Control-flow fragment extracted for method ToggleAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8ggznb:identityservice__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:8ggznb:identityservice",
      "ownerSymbolName": "IdentityService",
      "entryNodeId": "method:8ggznb:identityservice__entry",
      "exitNodeIds": [
        "method:8ggznb:identityservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8ggznb:identityservice__entry",
          "kind": "entry",
          "label": "IdentityService entry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Constructs the identity service wiring HttpClient, native storage and optional auth state provider."
        },
        {
          "id": "method:8ggznb:identityservice__action_28_assign_28__linear",
          "kind": "statement",
          "label": "Store injected dependencies",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "_httpClient/_storageService/_authStateProvider assignments"
        },
        {
          "id": "method:8ggznb:identityservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8ggznb:identityservice__entry__method:8ggznb:identityservice__action_28_assign_28__linear",
          "from": "method:8ggznb:identityservice__entry",
          "to": "method:8ggznb:identityservice__action_28_assign_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8ggznb:identityservice__action_28_assign_28__linear__implicit_return",
          "from": "method:8ggznb:identityservice__action_28_assign_28__linear",
          "to": "method:8ggznb:identityservice__implicit_return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 23,
        "end": 31
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method IdentityService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:kf6qfg:registerasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:kf6qfg:registerasync",
      "ownerSymbolName": "RegisterAsync",
      "entryNodeId": "method:kf6qfg:registerasync__entry",
      "exitNodeIds": [
        "method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return",
        "method:kf6qfg:registerasync__action_42_registerasync_return_42_4__return"
      ],
      "nodes": [
        {
          "id": "method:kf6qfg:registerasync__entry",
          "kind": "entry",
          "label": "RegisterAsync entry",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Sends registration request to the backend and returns success/failure result."
        },
        {
          "id": "method:kf6qfg:registerasync__action_35_try_catch_35__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns a Result.Fail with caused-by error"
        },
        {
          "id": "method:kf6qfg:registerasync__action_35_registerasync_try_35_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:kf6qfg:registerasync__action_37_registerasync_await_37_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"identity/register\", new { email, password });"
        },
        {
          "id": "method:kf6qfg:registerasync__action_37_external_call_37__linear",
          "kind": "http-call",
          "label": "POST register",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Calls HttpClient.PostAsJsonAsync to 'identity/register' (framework call omitted from calls list)"
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return response.IsSuccessStatusCode ? Result.Ok() : Result.Fail(\"Rejestracja nie powiodła się.\");"
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on success, Result.Fail(...) on failure"
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__true",
          "kind": "branch-true",
          "label": "ok",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__false",
          "kind": "branch-false",
          "label": "fail",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_40_registerasync_catch_40_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:kf6qfg:registerasync__action_42_registerasync_return_42_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Błąd sieci podczas rejestracji.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:kf6qfg:registerasync__entry__method:kf6qfg:registerasync__action_35_try_catch_35__linear",
          "from": "method:kf6qfg:registerasync__entry",
          "to": "method:kf6qfg:registerasync__action_35_try_catch_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_35_try_catch_35__linear__method:kf6qfg:registerasync__action_35_registerasync_try_35_0__try",
          "from": "method:kf6qfg:registerasync__action_35_try_catch_35__linear",
          "to": "method:kf6qfg:registerasync__action_35_registerasync_try_35_0__try",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:kf6qfg:registerasync__action_35_registerasync_try_35_0__try__method:kf6qfg:registerasync__action_37_registerasync_await_37_1__await",
          "from": "method:kf6qfg:registerasync__action_35_registerasync_try_35_0__try",
          "to": "method:kf6qfg:registerasync__action_37_registerasync_await_37_1__await",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:kf6qfg:registerasync__action_37_registerasync_await_37_1__await__method:kf6qfg:registerasync__action_37_external_call_37__linear",
          "from": "method:kf6qfg:registerasync__action_37_registerasync_await_37_1__await",
          "to": "method:kf6qfg:registerasync__action_37_external_call_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_37_external_call_37__linear__method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return",
          "from": "method:kf6qfg:registerasync__action_37_external_call_37__linear",
          "to": "method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return__method:kf6qfg:registerasync__action_38_branch_38__condition",
          "from": "method:kf6qfg:registerasync__action_38_registerasync_return_38_2__return",
          "to": "method:kf6qfg:registerasync__action_38_branch_38__condition",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__condition__method:kf6qfg:registerasync__action_38_branch_38__true",
          "from": "method:kf6qfg:registerasync__action_38_branch_38__condition",
          "to": "method:kf6qfg:registerasync__action_38_branch_38__true",
          "kind": "condition-true",
          "label": "ok",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__condition__method:kf6qfg:registerasync__action_38_branch_38__false",
          "from": "method:kf6qfg:registerasync__action_38_branch_38__condition",
          "to": "method:kf6qfg:registerasync__action_38_branch_38__false",
          "kind": "condition-false",
          "label": "fail",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__true__method:kf6qfg:registerasync__action_38_branch_38__merge",
          "from": "method:kf6qfg:registerasync__action_38_branch_38__true",
          "to": "method:kf6qfg:registerasync__action_38_branch_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__false__method:kf6qfg:registerasync__action_38_branch_38__merge",
          "from": "method:kf6qfg:registerasync__action_38_branch_38__false",
          "to": "method:kf6qfg:registerasync__action_38_branch_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:kf6qfg:registerasync__action_38_branch_38__merge__method:kf6qfg:registerasync__action_40_registerasync_catch_40_3__catch",
          "from": "method:kf6qfg:registerasync__action_38_branch_38__merge",
          "to": "method:kf6qfg:registerasync__action_40_registerasync_catch_40_3__catch",
          "kind": "exception",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:kf6qfg:registerasync__action_40_registerasync_catch_40_3__catch__method:kf6qfg:registerasync__action_42_registerasync_return_42_4__return",
          "from": "method:kf6qfg:registerasync__action_40_registerasync_catch_40_3__catch",
          "to": "method:kf6qfg:registerasync__action_42_registerasync_return_42_4__return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:kf6qfg:registerasync__action_38_branch_38__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 33,
        "end": 44
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 33,
          "summary": "Control-flow fragment extracted for method RegisterAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:b6asoe:loginasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:b6asoe:loginasync",
      "ownerSymbolName": "LoginAsync",
      "entryNodeId": "method:b6asoe:loginasync__entry",
      "exitNodeIds": [
        "method:b6asoe:loginasync__action_62_loginasync_return_62_6__return",
        "method:b6asoe:loginasync__action_94_loginasync_return_94_21__return",
        "method:b6asoe:loginasync__action_94_return_94__return",
        "method:b6asoe:loginasync__action_96_loginasync_return_96_22__return",
        "method:b6asoe:loginasync__action_100_loginasync_return_100_24__return"
      ],
      "nodes": [
        {
          "id": "method:b6asoe:loginasync__entry",
          "kind": "entry",
          "label": "LoginAsync entry",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Performs login against backend, stores tokens, invalidates auth state, fetches profile and persists profile metadata; returns success/failure."
        },
        {
          "id": "method:b6asoe:loginasync__action_48_try_catch_48__linear",
          "kind": "statement",
          "label": "Entire login flow guarded",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Top-level try/catch returns network error Result.Fail on exception"
        },
        {
          "id": "method:b6asoe:loginasync__action_48_loginasync_try_48_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:b6asoe:loginasync__action_50_loginasync_await_50_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"identity/login\", new { email, password });"
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__true",
          "kind": "branch-true",
          "label": "process tokens and profile",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__false",
          "kind": "branch-false",
          "label": "return invalid credentials",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_56_try_catch_56__linear",
          "kind": "statement",
          "label": "Parse JSON response",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Catches JsonException and returns Result.Fail for server response parsing error"
        },
        {
          "id": "method:b6asoe:loginasync__action_56_loginasync_try_56_3__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:b6asoe:loginasync__action_58_loginasync_await_58_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "result = await response.Content.ReadFromJsonAsync<LoginResponse>();"
        },
        {
          "id": "method:b6asoe:loginasync__action_60_loginasync_catch_60_5__catch",
          "kind": "catch",
          "label": "catch System.Text.Json.JsonException ex",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (System.Text.Json.JsonException ex)"
        },
        {
          "id": "method:b6asoe:loginasync__action_62_loginasync_return_62_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Błąd przetwarzania odpowiedzi serwera.\").CausedBy(ex));"
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__condition",
          "kind": "condition",
          "label": "result != null && !string.IsNullOrEmpty(result.AccessToken)",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__true",
          "kind": "branch-true",
          "label": "save tokens",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__false",
          "kind": "branch-false",
          "label": "skip token persistence",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition",
          "kind": "condition",
          "label": "result != null && !string.IsNullOrEmpty(result.AccessToken)",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (result != null && !string.IsNullOrEmpty(result.AccessToken))"
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_67_loginasync_await_67_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(TokenKey, result.AccessToken);"
        },
        {
          "id": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "TokenKey, result.AccessToken"
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(result.RefreshToken)",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(result.RefreshToken))"
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_70_loginasync_await_70_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(RefreshTokenKey, result.RefreshToken);"
        },
        {
          "id": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "RefreshTokenKey, result.RefreshToken"
        },
        {
          "id": "method:b6asoe:loginasync__action_74_state_change_74__linear",
          "kind": "statement",
          "label": "Invalidate auth state and notify listeners",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Clears provider cache and invokes OnStateInvalidated"
        },
        {
          "id": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.ClearCache",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "cast _authStateProvider and call ClearCache"
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_await_75_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition",
          "kind": "condition",
          "label": "OnStateInvalidated != null) await OnStateInvalidated.Invoke(",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__true",
          "kind": "branch-true",
          "label": "true",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__false",
          "kind": "branch-false",
          "label": "false",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "OnStateInvalidated.Invoke",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "invoke event if not null"
        },
        {
          "id": "method:b6asoe:loginasync__action_77_loginasync_await_77_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var profileResult = await GetProfileAsync();"
        },
        {
          "id": "method:b6asoe:loginasync__action_77_orchestration_77__linear",
          "kind": "statement",
          "label": "Fetch and persist profile after login",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Calls GetProfileAsync and on success persists email/tenant/roles, notifies auth provider; fallback notification if profile fetch fails"
        },
        {
          "id": "method:b6asoe:loginasync__call_77_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "no parameters"
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition",
          "kind": "condition",
          "label": "profileResult.IsSuccess",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (profileResult.IsSuccess)"
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__true",
          "kind": "branch-true",
          "label": "true",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__false",
          "kind": "branch-false",
          "label": "false",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_81_loginasync_await_81_15__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserEmail, profile.Email);"
        },
        {
          "id": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail, profile.Email"
        },
        {
          "id": "method:b6asoe:loginasync__action_82_loginasync_await_82_16__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserTenant, profile.TenantId.ToString());"
        },
        {
          "id": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant, profile.TenantId.ToString()"
        },
        {
          "id": "method:b6asoe:loginasync__action_85_loginasync_await_85_17__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserRoles, rolesStr);"
        },
        {
          "id": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles, rolesStr"
        },
        {
          "id": "method:b6asoe:loginasync__action_87_loginasync_notification_87_18__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83,
          "detail": "(_authStateProvider as NexusAuthenticationStateProvider)?.NotifyUserAuthentication(profile.Email, profile.TenantId.ToString(), rolesStr);"
        },
        {
          "id": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "profile.Email, profile.TenantId.ToString(), rolesStr (or fallback email/unknown)"
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "kind": "statement",
          "label": "merge",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_91_loginasync_notification_91_20__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83,
          "detail": "(_authStateProvider as NexusAuthenticationStateProvider)?.NotifyUserAuthentication(email, \"unknown\", \"\");"
        },
        {
          "id": "method:b6asoe:loginasync__action_94_loginasync_return_94_21__return",
          "kind": "return",
          "label": "Returns result",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:b6asoe:loginasync__action_94_return_94__return",
          "kind": "return",
          "label": "Return success/failure",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on processed login, Result.Fail(...) on bad credentials"
        },
        {
          "id": "method:b6asoe:loginasync__action_96_loginasync_return_96_22__return",
          "kind": "return",
          "label": "Returns result",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Nieprawidłowy e-mail lub hasło.\");"
        },
        {
          "id": "method:b6asoe:loginasync__action_98_loginasync_catch_98_23__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:b6asoe:loginasync__action_100_loginasync_return_100_24__return",
          "kind": "return",
          "label": "Returns result",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Błąd połączenia z serwerem.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:b6asoe:loginasync__entry__method:b6asoe:loginasync__action_48_try_catch_48__linear",
          "from": "method:b6asoe:loginasync__entry",
          "to": "method:b6asoe:loginasync__action_48_try_catch_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_48_try_catch_48__linear__method:b6asoe:loginasync__action_48_loginasync_try_48_0__try",
          "from": "method:b6asoe:loginasync__action_48_try_catch_48__linear",
          "to": "method:b6asoe:loginasync__action_48_loginasync_try_48_0__try",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_48_loginasync_try_48_0__try__method:b6asoe:loginasync__action_50_loginasync_await_50_1__await",
          "from": "method:b6asoe:loginasync__action_48_loginasync_try_48_0__try",
          "to": "method:b6asoe:loginasync__action_50_loginasync_await_50_1__await",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_50_loginasync_await_50_1__await__method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition",
          "from": "method:b6asoe:loginasync__action_50_loginasync_await_50_1__await",
          "to": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition__method:b6asoe:loginasync__action_52_loginasync_branch_52_2__true",
          "from": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition",
          "to": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition__method:b6asoe:loginasync__action_52_loginasync_branch_52_2__false",
          "from": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__condition",
          "to": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__true__method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "from": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__true",
          "to": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__false__method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "from": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__false",
          "to": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge__method:b6asoe:loginasync__action_52_branch_52__condition",
          "from": "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
          "to": "method:b6asoe:loginasync__action_52_branch_52__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__condition__method:b6asoe:loginasync__action_52_branch_52__true",
          "from": "method:b6asoe:loginasync__action_52_branch_52__condition",
          "to": "method:b6asoe:loginasync__action_52_branch_52__true",
          "kind": "condition-true",
          "label": "process tokens and profile",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__condition__method:b6asoe:loginasync__action_52_branch_52__false",
          "from": "method:b6asoe:loginasync__action_52_branch_52__condition",
          "to": "method:b6asoe:loginasync__action_52_branch_52__false",
          "kind": "condition-false",
          "label": "return invalid credentials",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__true__method:b6asoe:loginasync__action_52_branch_52__merge",
          "from": "method:b6asoe:loginasync__action_52_branch_52__true",
          "to": "method:b6asoe:loginasync__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__false__method:b6asoe:loginasync__action_52_branch_52__merge",
          "from": "method:b6asoe:loginasync__action_52_branch_52__false",
          "to": "method:b6asoe:loginasync__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_52_branch_52__merge__method:b6asoe:loginasync__action_56_try_catch_56__linear",
          "from": "method:b6asoe:loginasync__action_52_branch_52__merge",
          "to": "method:b6asoe:loginasync__action_56_try_catch_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_56_try_catch_56__linear__method:b6asoe:loginasync__action_56_loginasync_try_56_3__try",
          "from": "method:b6asoe:loginasync__action_56_try_catch_56__linear",
          "to": "method:b6asoe:loginasync__action_56_loginasync_try_56_3__try",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_56_loginasync_try_56_3__try__method:b6asoe:loginasync__action_58_loginasync_await_58_4__await",
          "from": "method:b6asoe:loginasync__action_56_loginasync_try_56_3__try",
          "to": "method:b6asoe:loginasync__action_58_loginasync_await_58_4__await",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_58_loginasync_await_58_4__await__method:b6asoe:loginasync__action_60_loginasync_catch_60_5__catch",
          "from": "method:b6asoe:loginasync__action_58_loginasync_await_58_4__await",
          "to": "method:b6asoe:loginasync__action_60_loginasync_catch_60_5__catch",
          "kind": "exception",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:b6asoe:loginasync__action_60_loginasync_catch_60_5__catch__method:b6asoe:loginasync__action_62_loginasync_return_62_6__return",
          "from": "method:b6asoe:loginasync__action_60_loginasync_catch_60_5__catch",
          "to": "method:b6asoe:loginasync__action_62_loginasync_return_62_6__return",
          "kind": "return",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_62_loginasync_return_62_6__return__method:b6asoe:loginasync__action_65_guard_clause_65__condition",
          "from": "method:b6asoe:loginasync__action_62_loginasync_return_62_6__return",
          "to": "method:b6asoe:loginasync__action_65_guard_clause_65__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__condition__method:b6asoe:loginasync__action_65_guard_clause_65__true",
          "from": "method:b6asoe:loginasync__action_65_guard_clause_65__condition",
          "to": "method:b6asoe:loginasync__action_65_guard_clause_65__true",
          "kind": "condition-true",
          "label": "save tokens",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__condition__method:b6asoe:loginasync__action_65_guard_clause_65__false",
          "from": "method:b6asoe:loginasync__action_65_guard_clause_65__condition",
          "to": "method:b6asoe:loginasync__action_65_guard_clause_65__false",
          "kind": "condition-false",
          "label": "skip token persistence",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__true__method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "from": "method:b6asoe:loginasync__action_65_guard_clause_65__true",
          "to": "method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__false__method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "from": "method:b6asoe:loginasync__action_65_guard_clause_65__false",
          "to": "method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_65_guard_clause_65__merge__method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition",
          "from": "method:b6asoe:loginasync__action_65_guard_clause_65__merge",
          "to": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition__method:b6asoe:loginasync__action_65_loginasync_branch_65_7__true",
          "from": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition",
          "to": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition__method:b6asoe:loginasync__action_65_loginasync_branch_65_7__false",
          "from": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__condition",
          "to": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__true__method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "from": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__true",
          "to": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__false__method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "from": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__false",
          "to": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge__method:b6asoe:loginasync__action_67_loginasync_await_67_8__await",
          "from": "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
          "to": "method:b6asoe:loginasync__action_67_loginasync_await_67_8__await",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_67_loginasync_await_67_8__await__call_method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString",
          "from": "method:b6asoe:loginasync__action_67_loginasync_await_67_8__await",
          "to": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "TokenKey, result.AccessToken",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString__method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition",
          "from": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString",
          "to": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition__method:b6asoe:loginasync__action_68_loginasync_branch_68_9__true",
          "from": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition",
          "to": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition__method:b6asoe:loginasync__action_68_loginasync_branch_68_9__false",
          "from": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__condition",
          "to": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__true__method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "from": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__true",
          "to": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__false__method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "from": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__false",
          "to": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge__method:b6asoe:loginasync__action_70_loginasync_await_70_10__await",
          "from": "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
          "to": "method:b6asoe:loginasync__action_70_loginasync_await_70_10__await",
          "kind": "next",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_70_loginasync_await_70_10__await__call_method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString",
          "from": "method:b6asoe:loginasync__action_70_loginasync_await_70_10__await",
          "to": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "RefreshTokenKey, result.RefreshToken",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString__method:b6asoe:loginasync__action_74_state_change_74__linear",
          "from": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString",
          "to": "method:b6asoe:loginasync__action_74_state_change_74__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_74_state_change_74__linear__call_method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache",
          "from": "method:b6asoe:loginasync__action_74_state_change_74__linear",
          "to": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "cast _authStateProvider and call ClearCache",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache__method:b6asoe:loginasync__action_75_loginasync_await_75_12__await",
          "from": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache",
          "to": "method:b6asoe:loginasync__action_75_loginasync_await_75_12__await",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_await_75_12__await__method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition",
          "from": "method:b6asoe:loginasync__action_75_loginasync_await_75_12__await",
          "to": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition__method:b6asoe:loginasync__action_75_loginasync_branch_75_11__true",
          "from": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition",
          "to": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__true",
          "kind": "condition-true",
          "label": "true",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition__method:b6asoe:loginasync__action_75_loginasync_branch_75_11__false",
          "from": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__condition",
          "to": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__false",
          "kind": "condition-false",
          "label": "false",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__true__method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "from": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__true",
          "to": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__false__method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "from": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__false",
          "to": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge__call_method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke",
          "from": "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
          "to": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "invoke event if not null",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke__method:b6asoe:loginasync__action_77_loginasync_await_77_13__await",
          "from": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke",
          "to": "method:b6asoe:loginasync__action_77_loginasync_await_77_13__await",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_77_loginasync_await_77_13__await__method:b6asoe:loginasync__action_77_orchestration_77__linear",
          "from": "method:b6asoe:loginasync__action_77_loginasync_await_77_13__await",
          "to": "method:b6asoe:loginasync__action_77_orchestration_77__linear",
          "kind": "next",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_77_orchestration_77__linear__call_method:b6asoe:loginasync__call_77_GetProfileAsync",
          "from": "method:b6asoe:loginasync__action_77_orchestration_77__linear",
          "to": "method:b6asoe:loginasync__call_77_GetProfileAsync",
          "kind": "call",
          "label": "no parameters",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_77_GetProfileAsync__method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition",
          "from": "method:b6asoe:loginasync__call_77_GetProfileAsync",
          "to": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition__method:b6asoe:loginasync__action_78_loginasync_branch_78_14__true",
          "from": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition",
          "to": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__true",
          "kind": "condition-true",
          "label": "true",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition__method:b6asoe:loginasync__action_78_loginasync_branch_78_14__false",
          "from": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__condition",
          "to": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__false",
          "kind": "condition-false",
          "label": "false",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__true__method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "from": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__true",
          "to": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__false__method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "from": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__false",
          "to": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge__method:b6asoe:loginasync__action_81_loginasync_await_81_15__await",
          "from": "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
          "to": "method:b6asoe:loginasync__action_81_loginasync_await_81_15__await",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_81_loginasync_await_81_15__await__call_method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString",
          "from": "method:b6asoe:loginasync__action_81_loginasync_await_81_15__await",
          "to": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail, profile.Email",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString__method:b6asoe:loginasync__action_82_loginasync_await_82_16__await",
          "from": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString",
          "to": "method:b6asoe:loginasync__action_82_loginasync_await_82_16__await",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_82_loginasync_await_82_16__await__call_method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString",
          "from": "method:b6asoe:loginasync__action_82_loginasync_await_82_16__await",
          "to": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant, profile.TenantId.ToString()",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString__method:b6asoe:loginasync__action_85_loginasync_await_85_17__await",
          "from": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString",
          "to": "method:b6asoe:loginasync__action_85_loginasync_await_85_17__await",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6asoe:loginasync__action_85_loginasync_await_85_17__await__call_method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString",
          "from": "method:b6asoe:loginasync__action_85_loginasync_await_85_17__await",
          "to": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles, rolesStr",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString__method:b6asoe:loginasync__action_87_loginasync_notification_87_18__linear",
          "from": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString",
          "to": "method:b6asoe:loginasync__action_87_loginasync_notification_87_18__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:b6asoe:loginasync__action_87_loginasync_notification_87_18__linear__call_method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "from": "method:b6asoe:loginasync__action_87_loginasync_notification_87_18__linear",
          "to": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "profile.Email, profile.TenantId.ToString(), rolesStr (or fallback email/unknown)",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication__method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition",
          "from": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "to": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition",
          "kind": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition__method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__true",
          "from": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition",
          "to": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition__method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__false",
          "from": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__condition",
          "to": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__true__method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "from": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__true",
          "to": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__false__method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "from": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__false",
          "to": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge__method:b6asoe:loginasync__action_91_loginasync_notification_91_20__linear",
          "from": "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge",
          "to": "method:b6asoe:loginasync__action_91_loginasync_notification_91_20__linear",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:b6asoe:loginasync__action_91_loginasync_notification_91_20__linear__method:b6asoe:loginasync__action_94_loginasync_return_94_21__return",
          "from": "method:b6asoe:loginasync__action_91_loginasync_notification_91_20__linear",
          "to": "method:b6asoe:loginasync__action_94_loginasync_return_94_21__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_94_loginasync_return_94_21__return__method:b6asoe:loginasync__action_94_return_94__return",
          "from": "method:b6asoe:loginasync__action_94_loginasync_return_94_21__return",
          "to": "method:b6asoe:loginasync__action_94_return_94__return",
          "kind": "return",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_94_return_94__return__method:b6asoe:loginasync__action_96_loginasync_return_96_22__return",
          "from": "method:b6asoe:loginasync__action_94_return_94__return",
          "to": "method:b6asoe:loginasync__action_96_loginasync_return_96_22__return",
          "kind": "return",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6asoe:loginasync__action_96_loginasync_return_96_22__return__method:b6asoe:loginasync__action_98_loginasync_catch_98_23__catch",
          "from": "method:b6asoe:loginasync__action_96_loginasync_return_96_22__return",
          "to": "method:b6asoe:loginasync__action_98_loginasync_catch_98_23__catch",
          "kind": "exception",
          "line": 98,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:b6asoe:loginasync__action_98_loginasync_catch_98_23__catch__method:b6asoe:loginasync__action_100_loginasync_return_100_24__return",
          "from": "method:b6asoe:loginasync__action_98_loginasync_catch_98_23__catch",
          "to": "method:b6asoe:loginasync__action_100_loginasync_return_100_24__return",
          "kind": "return",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:b6asoe:loginasync__call_67_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:b6asoe:loginasync__call_70_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache__jump_unknown_NexusAuthenticationStateProvider_ClearCache",
          "fromNodeId": "method:b6asoe:loginasync__call_74_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.ClearCache",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.ClearCache in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke__jump_NexusReader_UI_Shared_Services_IdentityService_cs_OnStateInvalidated_Invoke",
          "fromNodeId": "method:b6asoe:loginasync__call_75_OnStateInvalidated_Invoke",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "OnStateInvalidated.Invoke",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target OnStateInvalidated.Invoke in NexusReader.UI.Shared/Services/IdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_77_GetProfileAsync__jump_NexusReader_UI_Shared_Services_IdentityService_cs_GetProfileAsync",
          "fromNodeId": "method:b6asoe:loginasync__call_77_GetProfileAsync",
          "kind": "call-target",
          "targetNodeId": "method:1u6514u:getprofileasync",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "GetProfileAsync",
          "line": 77,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target GetProfileAsync resolved to NexusReader.UI.Shared/Services/IdentityService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:b6asoe:loginasync__call_81_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:b6asoe:loginasync__call_82_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:b6asoe:loginasync__call_85_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication__jump_unknown_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "fromNodeId": "method:b6asoe:loginasync__call_87_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:b6asoe:loginasync__action_52_loginasync_branch_52_2__merge",
        "method:b6asoe:loginasync__action_52_branch_52__merge",
        "method:b6asoe:loginasync__action_65_guard_clause_65__merge",
        "method:b6asoe:loginasync__action_65_loginasync_branch_65_7__merge",
        "method:b6asoe:loginasync__action_68_loginasync_branch_68_9__merge",
        "method:b6asoe:loginasync__action_75_loginasync_branch_75_11__merge",
        "method:b6asoe:loginasync__action_78_loginasync_branch_78_14__merge",
        "method:b6asoe:loginasync__action_89_loginasync_fallback_89_19__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 46,
        "end": 102
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 46,
          "summary": "Control-flow fragment extracted for method LoginAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1i33wis:logoutasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:1i33wis:logoutasync",
      "ownerSymbolName": "LogoutAsync",
      "entryNodeId": "method:1i33wis:logoutasync__entry",
      "exitNodeIds": [
        "method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return",
        "method:1i33wis:logoutasync__action_122_return_122__return",
        "method:1i33wis:logoutasync__action_126_logoutasync_return_126_12__return"
      ],
      "nodes": [
        {
          "id": "method:1i33wis:logoutasync__entry",
          "kind": "entry",
          "label": "LogoutAsync entry",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Clears cached profile and, on browser, erases stored tokens/profile metadata; notifies auth provider and triggers state invalidation."
        },
        {
          "id": "method:1i33wis:logoutasync__action_106_try_catch_106__linear",
          "kind": "statement",
          "label": "Logout guarded",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Catches exceptions and returns Result.Fail when logout fails"
        },
        {
          "id": "method:1i33wis:logoutasync__action_106_logoutasync_try_106_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1i33wis:logoutasync__action_108_state_change_108__linear",
          "kind": "statement",
          "label": "Clear cached profile and storage keys",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "_cachedProfile = null and, on browser, clears stored tokens and profile metadata"
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition",
          "kind": "condition",
          "label": "System.OperatingSystem.IsBrowser()",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (System.OperatingSystem.IsBrowser())"
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_111_logoutasync_await_111_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(TokenKey, \"\");"
        },
        {
          "id": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "TokenKey, empty string"
        },
        {
          "id": "method:1i33wis:logoutasync__action_112_logoutasync_await_112_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(RefreshTokenKey, \"\");"
        },
        {
          "id": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "RefreshTokenKey, empty string"
        },
        {
          "id": "method:1i33wis:logoutasync__action_113_logoutasync_await_113_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserEmail, \"\");"
        },
        {
          "id": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail, empty string"
        },
        {
          "id": "method:1i33wis:logoutasync__action_114_logoutasync_await_114_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserTenant, \"\");"
        },
        {
          "id": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant, empty string"
        },
        {
          "id": "method:1i33wis:logoutasync__action_115_logoutasync_await_115_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserRoles, \"\");"
        },
        {
          "id": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles, empty string"
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_await_118_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_notify_118__linear",
          "kind": "statement",
          "label": "Notify auth provider and listeners",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Invokes OnStateInvalidated and calls provider ClearCache/NotifyUserLogout"
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition",
          "kind": "condition",
          "label": "OnStateInvalidated != null) await OnStateInvalidated.Invoke(",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "OnStateInvalidated.Invoke",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "invoke event if not null"
        },
        {
          "id": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.ClearCache",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "cast _authStateProvider and call ClearCache"
        },
        {
          "id": "method:1i33wis:logoutasync__action_120_logoutasync_notification_120_9__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83,
          "detail": "(_authStateProvider as NexusAuthenticationStateProvider)?.NotifyUserLogout();"
        },
        {
          "id": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.NotifyUserLogout",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "cast _authStateProvider and call NotifyUserLogout"
        },
        {
          "id": "method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return",
          "kind": "return",
          "label": "Returns result",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1i33wis:logoutasync__action_122_return_122__return",
          "kind": "return",
          "label": "Return success",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on success"
        },
        {
          "id": "method:1i33wis:logoutasync__action_124_logoutasync_catch_124_11__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1i33wis:logoutasync__action_126_logoutasync_return_126_12__return",
          "kind": "return",
          "label": "Returns result",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Błąd podczas wylogowywania.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1i33wis:logoutasync__entry__method:1i33wis:logoutasync__action_106_try_catch_106__linear",
          "from": "method:1i33wis:logoutasync__entry",
          "to": "method:1i33wis:logoutasync__action_106_try_catch_106__linear",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1i33wis:logoutasync__action_106_try_catch_106__linear__method:1i33wis:logoutasync__action_106_logoutasync_try_106_0__try",
          "from": "method:1i33wis:logoutasync__action_106_try_catch_106__linear",
          "to": "method:1i33wis:logoutasync__action_106_logoutasync_try_106_0__try",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1i33wis:logoutasync__action_106_logoutasync_try_106_0__try__method:1i33wis:logoutasync__action_108_state_change_108__linear",
          "from": "method:1i33wis:logoutasync__action_106_logoutasync_try_106_0__try",
          "to": "method:1i33wis:logoutasync__action_108_state_change_108__linear",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1i33wis:logoutasync__action_108_state_change_108__linear__method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition",
          "from": "method:1i33wis:logoutasync__action_108_state_change_108__linear",
          "to": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition__method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__true",
          "from": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition",
          "to": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition__method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__false",
          "from": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__condition",
          "to": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__true__method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "from": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__true",
          "to": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__false__method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "from": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__false",
          "to": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge__method:1i33wis:logoutasync__action_111_logoutasync_await_111_2__await",
          "from": "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
          "to": "method:1i33wis:logoutasync__action_111_logoutasync_await_111_2__await",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_111_logoutasync_await_111_2__await__call_method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString",
          "from": "method:1i33wis:logoutasync__action_111_logoutasync_await_111_2__await",
          "to": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "TokenKey, empty string",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString__method:1i33wis:logoutasync__action_112_logoutasync_await_112_3__await",
          "from": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString",
          "to": "method:1i33wis:logoutasync__action_112_logoutasync_await_112_3__await",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_112_logoutasync_await_112_3__await__call_method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString",
          "from": "method:1i33wis:logoutasync__action_112_logoutasync_await_112_3__await",
          "to": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "RefreshTokenKey, empty string",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString__method:1i33wis:logoutasync__action_113_logoutasync_await_113_4__await",
          "from": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString",
          "to": "method:1i33wis:logoutasync__action_113_logoutasync_await_113_4__await",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_113_logoutasync_await_113_4__await__call_method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString",
          "from": "method:1i33wis:logoutasync__action_113_logoutasync_await_113_4__await",
          "to": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail, empty string",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString__method:1i33wis:logoutasync__action_114_logoutasync_await_114_5__await",
          "from": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString",
          "to": "method:1i33wis:logoutasync__action_114_logoutasync_await_114_5__await",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_114_logoutasync_await_114_5__await__call_method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString",
          "from": "method:1i33wis:logoutasync__action_114_logoutasync_await_114_5__await",
          "to": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant, empty string",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString__method:1i33wis:logoutasync__action_115_logoutasync_await_115_6__await",
          "from": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString",
          "to": "method:1i33wis:logoutasync__action_115_logoutasync_await_115_6__await",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_115_logoutasync_await_115_6__await__call_method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString",
          "from": "method:1i33wis:logoutasync__action_115_logoutasync_await_115_6__await",
          "to": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles, empty string",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString__method:1i33wis:logoutasync__action_118_logoutasync_await_118_8__await",
          "from": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_await_118_8__await",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_await_118_8__await__method:1i33wis:logoutasync__action_118_notify_118__linear",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_await_118_8__await",
          "to": "method:1i33wis:logoutasync__action_118_notify_118__linear",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_notify_118__linear__method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition",
          "from": "method:1i33wis:logoutasync__action_118_notify_118__linear",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition__method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__true",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition__method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__false",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__condition",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__true__method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__true",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__false__method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__false",
          "to": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge__call_method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke",
          "from": "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge",
          "to": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "invoke event if not null",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke__call_method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache",
          "from": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke",
          "to": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "cast _authStateProvider and call ClearCache",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache__method:1i33wis:logoutasync__action_120_logoutasync_notification_120_9__linear",
          "from": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache",
          "to": "method:1i33wis:logoutasync__action_120_logoutasync_notification_120_9__linear",
          "kind": "next",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:1i33wis:logoutasync__action_120_logoutasync_notification_120_9__linear__call_method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout",
          "from": "method:1i33wis:logoutasync__action_120_logoutasync_notification_120_9__linear",
          "to": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout",
          "kind": "call",
          "label": "cast _authStateProvider and call NotifyUserLogout",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout__method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return",
          "from": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout",
          "to": "method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return",
          "kind": "return",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return__method:1i33wis:logoutasync__action_122_return_122__return",
          "from": "method:1i33wis:logoutasync__action_122_logoutasync_return_122_10__return",
          "to": "method:1i33wis:logoutasync__action_122_return_122__return",
          "kind": "return",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1i33wis:logoutasync__action_122_return_122__return__method:1i33wis:logoutasync__action_124_logoutasync_catch_124_11__catch",
          "from": "method:1i33wis:logoutasync__action_122_return_122__return",
          "to": "method:1i33wis:logoutasync__action_124_logoutasync_catch_124_11__catch",
          "kind": "exception",
          "line": 124,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1i33wis:logoutasync__action_124_logoutasync_catch_124_11__catch__method:1i33wis:logoutasync__action_126_logoutasync_return_126_12__return",
          "from": "method:1i33wis:logoutasync__action_124_logoutasync_catch_124_11__catch",
          "to": "method:1i33wis:logoutasync__action_126_logoutasync_return_126_12__return",
          "kind": "return",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:1i33wis:logoutasync__call_111_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 111,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:1i33wis:logoutasync__call_112_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:1i33wis:logoutasync__call_113_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 113,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:1i33wis:logoutasync__call_114_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:1i33wis:logoutasync__call_115_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke__jump_NexusReader_UI_Shared_Services_IdentityService_cs_OnStateInvalidated_Invoke",
          "fromNodeId": "method:1i33wis:logoutasync__call_118_OnStateInvalidated_Invoke",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "OnStateInvalidated.Invoke",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target OnStateInvalidated.Invoke in NexusReader.UI.Shared/Services/IdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache__jump_unknown_NexusAuthenticationStateProvider_ClearCache",
          "fromNodeId": "method:1i33wis:logoutasync__call_119_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.ClearCache",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.ClearCache in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout__jump_unknown_NexusAuthenticationStateProvider_NotifyUserLogout",
          "fromNodeId": "method:1i33wis:logoutasync__call_120_NexusAuthenticationStateProvider_NotifyUserLogout",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.NotifyUserLogout",
          "line": 120,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.NotifyUserLogout in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1i33wis:logoutasync__action_109_logoutasync_branch_109_1__merge",
        "method:1i33wis:logoutasync__action_118_logoutasync_branch_118_7__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 104,
        "end": 128
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 104,
          "summary": "Control-flow fragment extracted for method LogoutAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1u6514u:getprofileasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:1u6514u:getprofileasync",
      "ownerSymbolName": "GetProfileAsync",
      "entryNodeId": "method:1u6514u:getprofileasync__entry",
      "exitNodeIds": [
        "method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return",
        "method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return",
        "method:1u6514u:getprofileasync__action_145_getprofileasync_return_145_6__return"
      ],
      "nodes": [
        {
          "id": "method:1u6514u:getprofileasync__entry",
          "kind": "entry",
          "label": "GetProfileAsync entry",
          "line": 130,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Public cached-profile accessor: returns cached profile, reuses an in-flight profile task if present, otherwise triggers background fetch and returns its result wrapped in Result."
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition",
          "kind": "condition",
          "label": "_cachedProfile != null",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "If cached, returns Result.Ok(_cachedProfile)"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__true",
          "kind": "branch-true",
          "label": "return cached",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "kind": "statement",
          "label": "merge",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition",
          "kind": "condition",
          "label": "_cachedProfile != null",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (_cachedProfile != null)"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(_cachedProfile);"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition",
          "kind": "condition",
          "label": "_profileTask != null",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Awaits existing _profileTask and translates null->fail"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__true",
          "kind": "branch-true",
          "label": "await existing task",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__false",
          "kind": "branch-false",
          "label": "start new fetch",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "kind": "statement",
          "label": "merge",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition",
          "kind": "condition",
          "label": "_profileTask != null",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (_profileTask != null)"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_139_getprofileasync_await_139_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var p = await _profileTask;"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return p != null ? Result.Ok(p) : Result.Fail(\"Nie znaleziono profilu.\");"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_143_orchestration_143__linear",
          "kind": "statement",
          "label": "Start internal profile fetch",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Sets _profileTask to GetProfileInternalAsync and awaits it, returning success or failure Result"
        },
        {
          "id": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync",
          "kind": "call",
          "label": "GetProfileInternalAsync",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "no parameters (starts internal fetch task)"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_144_getprofileasync_await_144_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var result = await _profileTask;"
        },
        {
          "id": "method:1u6514u:getprofileasync__action_145_getprofileasync_return_145_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 145,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return result != null ? Result.Ok(result) : Result.Fail(\"Błąd podczas pobierania profilu.\");"
        }
      ],
      "edges": [
        {
          "id": "method:1u6514u:getprofileasync__entry__method:1u6514u:getprofileasync__action_132_guard_clause_132__condition",
          "from": "method:1u6514u:getprofileasync__entry",
          "to": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition__method:1u6514u:getprofileasync__action_132_guard_clause_132__true",
          "from": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition",
          "to": "method:1u6514u:getprofileasync__action_132_guard_clause_132__true",
          "kind": "condition-true",
          "label": "return cached",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition__method:1u6514u:getprofileasync__action_132_guard_clause_132__false",
          "from": "method:1u6514u:getprofileasync__action_132_guard_clause_132__condition",
          "to": "method:1u6514u:getprofileasync__action_132_guard_clause_132__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__true__method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "from": "method:1u6514u:getprofileasync__action_132_guard_clause_132__true",
          "to": "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__false__method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "from": "method:1u6514u:getprofileasync__action_132_guard_clause_132__false",
          "to": "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge__method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition",
          "from": "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
          "to": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition__method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__true",
          "from": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition",
          "to": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition__method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__false",
          "from": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__condition",
          "to": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__true__method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "from": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__true",
          "to": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__false__method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "from": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__false",
          "to": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge__method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return",
          "from": "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
          "to": "method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return",
          "kind": "return",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return__method:1u6514u:getprofileasync__action_137_guard_clause_137__condition",
          "from": "method:1u6514u:getprofileasync__action_134_getprofileasync_return_134_1__return",
          "to": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition__method:1u6514u:getprofileasync__action_137_guard_clause_137__true",
          "from": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition",
          "to": "method:1u6514u:getprofileasync__action_137_guard_clause_137__true",
          "kind": "condition-true",
          "label": "await existing task",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition__method:1u6514u:getprofileasync__action_137_guard_clause_137__false",
          "from": "method:1u6514u:getprofileasync__action_137_guard_clause_137__condition",
          "to": "method:1u6514u:getprofileasync__action_137_guard_clause_137__false",
          "kind": "condition-false",
          "label": "start new fetch",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__true__method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "from": "method:1u6514u:getprofileasync__action_137_guard_clause_137__true",
          "to": "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__false__method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "from": "method:1u6514u:getprofileasync__action_137_guard_clause_137__false",
          "to": "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge__method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition",
          "from": "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
          "to": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition__method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__true",
          "from": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition",
          "to": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition__method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__false",
          "from": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__condition",
          "to": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__true__method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "from": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__true",
          "to": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__false__method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "from": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__false",
          "to": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge__method:1u6514u:getprofileasync__action_139_getprofileasync_await_139_3__await",
          "from": "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge",
          "to": "method:1u6514u:getprofileasync__action_139_getprofileasync_await_139_3__await",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1u6514u:getprofileasync__action_139_getprofileasync_await_139_3__await__method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return",
          "from": "method:1u6514u:getprofileasync__action_139_getprofileasync_await_139_3__await",
          "to": "method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return",
          "kind": "return",
          "line": 140,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return__method:1u6514u:getprofileasync__action_143_orchestration_143__linear",
          "from": "method:1u6514u:getprofileasync__action_140_getprofileasync_return_140_4__return",
          "to": "method:1u6514u:getprofileasync__action_143_orchestration_143__linear",
          "kind": "next",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1u6514u:getprofileasync__action_143_orchestration_143__linear__call_method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync",
          "from": "method:1u6514u:getprofileasync__action_143_orchestration_143__linear",
          "to": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync",
          "kind": "call",
          "label": "no parameters (starts internal fetch task)",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync__method:1u6514u:getprofileasync__action_144_getprofileasync_await_144_5__await",
          "from": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync",
          "to": "method:1u6514u:getprofileasync__action_144_getprofileasync_await_144_5__await",
          "kind": "next",
          "line": 144,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1u6514u:getprofileasync__action_144_getprofileasync_await_144_5__await__method:1u6514u:getprofileasync__action_145_getprofileasync_return_145_6__return",
          "from": "method:1u6514u:getprofileasync__action_144_getprofileasync_await_144_5__await",
          "to": "method:1u6514u:getprofileasync__action_145_getprofileasync_return_145_6__return",
          "kind": "return",
          "line": 145,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync__jump_NexusReader_UI_Shared_Services_IdentityService_cs_GetProfileInternalAsync",
          "fromNodeId": "method:1u6514u:getprofileasync__call_143_GetProfileInternalAsync",
          "kind": "call-target",
          "targetNodeId": "method:nyrl9z:getprofileinternalasync",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "GetProfileInternalAsync",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target GetProfileInternalAsync resolved to NexusReader.UI.Shared/Services/IdentityService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1u6514u:getprofileasync__action_132_guard_clause_132__merge",
        "method:1u6514u:getprofileasync__action_132_getprofileasync_branch_132_0__merge",
        "method:1u6514u:getprofileasync__action_137_guard_clause_137__merge",
        "method:1u6514u:getprofileasync__action_137_getprofileasync_branch_137_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 130,
        "end": 146
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 130,
          "summary": "Control-flow fragment extracted for method GetProfileAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:nyrl9z:getprofileinternalasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:nyrl9z:getprofileinternalasync",
      "ownerSymbolName": "GetProfileInternalAsync",
      "entryNodeId": "method:nyrl9z:getprofileinternalasync__entry",
      "exitNodeIds": [
        "method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return",
        "method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return",
        "method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return",
        "method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return",
        "method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return",
        "method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return",
        "method:nyrl9z:getprofileinternalasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:nyrl9z:getprofileinternalasync__entry",
          "kind": "entry",
          "label": "GetProfileInternalAsync entry",
          "line": 150,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Performs the actual HTTP profile fetch with basic rate-limiting, updates cache/storage and notifies auth provider; handles unauthorized by logging out."
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition",
          "kind": "condition",
          "label": "System.OperatingSystem.IsBrowser()",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns null when not running in browser"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__true",
          "kind": "branch-true",
          "label": "return null",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "kind": "statement",
          "label": "merge",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition",
          "kind": "condition",
          "label": "!System.OperatingSystem.IsBrowser()",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (!System.OperatingSystem.IsBrowser())"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_rate_limit_157__linear",
          "kind": "statement",
          "label": "Throttle repeated fetches",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Prevents fetching more often than every 5 seconds"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition",
          "kind": "condition",
          "label": "DateTime.UtcNow - _lastFetchAttempt < TimeSpan.FromSeconds(5)",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (DateTime.UtcNow - _lastFetchAttempt < TimeSpan.FromSeconds(5))"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_162_state_change_162__linear",
          "kind": "statement",
          "label": "Update last fetch timestamp",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "_lastFetchAttempt = DateTime.UtcNow"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_163_getprofileinternalasync_try_163_4__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_165_getprofileinternalasync_await_165_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.GetAsync(\"identity/profile\");"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_165_external_call_165__linear",
          "kind": "http-call",
          "label": "GET profile",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "HttpClient.GetAsync('identity/profile') (framework call omitted from calls list)"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition",
          "kind": "condition",
          "label": "response.StatusCode == Unauthorized",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "On 401 calls LogoutAsync and returns null"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__true",
          "kind": "branch-true",
          "label": "logout and return null",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "kind": "statement",
          "label": "merge",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition",
          "kind": "condition",
          "label": "response.StatusCode == System.Net.HttpStatusCode.Unauthorized",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_169_getprofileinternalasync_await_169_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await LogoutAsync();"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync",
          "kind": "call",
          "label": "LogoutAsync",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "no parameters (called on 401)"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 170,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Parses JSON to UserProfileDto, caches it, saves email/tenant/roles and notifies auth provider"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__true",
          "kind": "branch-true",
          "label": "true",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__false",
          "kind": "branch-false",
          "label": "false",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "kind": "statement",
          "label": "merge",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__true",
          "kind": "branch-true",
          "label": "true",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__false",
          "kind": "branch-false",
          "label": "false",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_175_getprofileinternalasync_await_175_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 175,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var profile = await response.Content.ReadFromJsonAsync<UserProfileDto>();"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition",
          "kind": "condition",
          "label": "profile != null",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (profile != null)"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__true",
          "kind": "branch-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__false",
          "kind": "branch-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_179_getprofileinternalasync_await_179_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserEmail, profile.Email);"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail, profile.Email"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_180_getprofileinternalasync_await_180_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 180,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserTenant, profile.TenantId.ToString());"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 180,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant, profile.TenantId.ToString()"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_183_getprofileinternalasync_await_183_14__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserRoles, rolesStr);"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles, rolesStr"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_185_getprofileinternalasync_notification_185_15__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83,
          "detail": "(_authStateProvider as NexusAuthenticationStateProvider)?.NotifyUserAuthentication(profile.Email, profile.TenantId.ToString(), rolesStr);"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "profile.Email, profile.TenantId.ToString(), rolesStr"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return",
          "kind": "return",
          "label": "Returns result",
          "line": 187,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return profile;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return",
          "kind": "return",
          "label": "Returns result",
          "line": 190,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_192_try_catch_192__linear",
          "kind": "statement",
          "label": "Swallow fetch/parsing errors",
          "line": 192,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Catches any exception and returns null"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_192_getprofileinternalasync_catch_192_18__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 192,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 194,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return null;"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_196_getprofileinternalasync_finally_196_20__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_198_finally_198__finally",
          "kind": "finally",
          "label": "Reset in-flight task marker",
          "line": 198,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "_profileTask = null"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:nyrl9z:getprofileinternalasync__entry__method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition",
          "from": "method:nyrl9z:getprofileinternalasync__entry",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition__method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__true",
          "kind": "condition-true",
          "label": "return null",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition__method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__true__method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__false__method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge__method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition__method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition__method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__true__method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__false__method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "kind": "next",
          "line": 152,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge__method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return",
          "from": "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return",
          "kind": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return__method:nyrl9z:getprofileinternalasync__action_157_rate_limit_157__linear",
          "from": "method:nyrl9z:getprofileinternalasync__action_154_getprofileinternalasync_return_154_1__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_rate_limit_157__linear",
          "kind": "next",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_rate_limit_157__linear__method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_rate_limit_157__linear",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition",
          "kind": "next",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition__method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition__method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__true__method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "kind": "next",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__false__method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "kind": "next",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge__method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return",
          "from": "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return",
          "kind": "return",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return__method:nyrl9z:getprofileinternalasync__action_162_state_change_162__linear",
          "from": "method:nyrl9z:getprofileinternalasync__action_159_getprofileinternalasync_return_159_3__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_162_state_change_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_162_state_change_162__linear__method:nyrl9z:getprofileinternalasync__action_163_getprofileinternalasync_try_163_4__try",
          "from": "method:nyrl9z:getprofileinternalasync__action_162_state_change_162__linear",
          "to": "method:nyrl9z:getprofileinternalasync__action_163_getprofileinternalasync_try_163_4__try",
          "kind": "next",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_163_getprofileinternalasync_try_163_4__try__method:nyrl9z:getprofileinternalasync__action_165_getprofileinternalasync_await_165_5__await",
          "from": "method:nyrl9z:getprofileinternalasync__action_163_getprofileinternalasync_try_163_4__try",
          "to": "method:nyrl9z:getprofileinternalasync__action_165_getprofileinternalasync_await_165_5__await",
          "kind": "next",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_165_getprofileinternalasync_await_165_5__await__method:nyrl9z:getprofileinternalasync__action_165_external_call_165__linear",
          "from": "method:nyrl9z:getprofileinternalasync__action_165_getprofileinternalasync_await_165_5__await",
          "to": "method:nyrl9z:getprofileinternalasync__action_165_external_call_165__linear",
          "kind": "next",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_165_external_call_165__linear__method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_165_external_call_165__linear",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition__method:nyrl9z:getprofileinternalasync__action_167_branch_167__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__true",
          "kind": "condition-true",
          "label": "logout and return null",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition__method:nyrl9z:getprofileinternalasync__action_167_branch_167__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__true__method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__false__method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge__method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition__method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition__method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__true__method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__false__method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "kind": "next",
          "line": 167,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge__method:nyrl9z:getprofileinternalasync__action_169_getprofileinternalasync_await_169_7__await",
          "from": "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_169_getprofileinternalasync_await_169_7__await",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_169_getprofileinternalasync_await_169_7__await__call_method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync",
          "from": "method:nyrl9z:getprofileinternalasync__action_169_getprofileinternalasync_await_169_7__await",
          "to": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync",
          "kind": "call",
          "label": "no parameters (called on 401)",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync__method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return",
          "from": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync",
          "to": "method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return",
          "kind": "return",
          "line": 170,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return__method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_170_getprofileinternalasync_return_170_8__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition__method:nyrl9z:getprofileinternalasync__action_173_branch_173__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__true",
          "kind": "condition-true",
          "label": "true",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition__method:nyrl9z:getprofileinternalasync__action_173_branch_173__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__false",
          "kind": "condition-false",
          "label": "false",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__true__method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__false__method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge__method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition__method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__true",
          "kind": "condition-true",
          "label": "true",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition__method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__false",
          "kind": "condition-false",
          "label": "false",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__true__method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__false__method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "kind": "next",
          "line": 173,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge__method:nyrl9z:getprofileinternalasync__action_175_getprofileinternalasync_await_175_10__await",
          "from": "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_175_getprofileinternalasync_await_175_10__await",
          "kind": "next",
          "line": 175,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_175_getprofileinternalasync_await_175_10__await__method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition",
          "from": "method:nyrl9z:getprofileinternalasync__action_175_getprofileinternalasync_await_175_10__await",
          "to": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition__method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__true",
          "from": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__true",
          "kind": "condition-true",
          "label": "true",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition__method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__false",
          "from": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__condition",
          "to": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__false",
          "kind": "condition-false",
          "label": "false",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__true__method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__true",
          "to": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__false__method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "from": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__false",
          "to": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge__method:nyrl9z:getprofileinternalasync__action_179_getprofileinternalasync_await_179_12__await",
          "from": "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge",
          "to": "method:nyrl9z:getprofileinternalasync__action_179_getprofileinternalasync_await_179_12__await",
          "kind": "next",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_179_getprofileinternalasync_await_179_12__await__call_method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString",
          "from": "method:nyrl9z:getprofileinternalasync__action_179_getprofileinternalasync_await_179_12__await",
          "to": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail, profile.Email",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString__method:nyrl9z:getprofileinternalasync__action_180_getprofileinternalasync_await_180_13__await",
          "from": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString",
          "to": "method:nyrl9z:getprofileinternalasync__action_180_getprofileinternalasync_await_180_13__await",
          "kind": "next",
          "line": 180,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_180_getprofileinternalasync_await_180_13__await__call_method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString",
          "from": "method:nyrl9z:getprofileinternalasync__action_180_getprofileinternalasync_await_180_13__await",
          "to": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant, profile.TenantId.ToString()",
          "line": 180,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString__method:nyrl9z:getprofileinternalasync__action_183_getprofileinternalasync_await_183_14__await",
          "from": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString",
          "to": "method:nyrl9z:getprofileinternalasync__action_183_getprofileinternalasync_await_183_14__await",
          "kind": "next",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_183_getprofileinternalasync_await_183_14__await__call_method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString",
          "from": "method:nyrl9z:getprofileinternalasync__action_183_getprofileinternalasync_await_183_14__await",
          "to": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles, rolesStr",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString__method:nyrl9z:getprofileinternalasync__action_185_getprofileinternalasync_notification_185_15__linear",
          "from": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString",
          "to": "method:nyrl9z:getprofileinternalasync__action_185_getprofileinternalasync_notification_185_15__linear",
          "kind": "next",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_185_getprofileinternalasync_notification_185_15__linear__call_method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "from": "method:nyrl9z:getprofileinternalasync__action_185_getprofileinternalasync_notification_185_15__linear",
          "to": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "profile.Email, profile.TenantId.ToString(), rolesStr",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication__method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return",
          "from": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "to": "method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return",
          "kind": "return",
          "line": 187,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return__method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return",
          "from": "method:nyrl9z:getprofileinternalasync__action_187_getprofileinternalasync_return_187_16__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return",
          "kind": "return",
          "line": 190,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return__method:nyrl9z:getprofileinternalasync__action_192_try_catch_192__linear",
          "from": "method:nyrl9z:getprofileinternalasync__action_190_getprofileinternalasync_return_190_17__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_192_try_catch_192__linear",
          "kind": "next",
          "line": 192,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_192_try_catch_192__linear__method:nyrl9z:getprofileinternalasync__action_192_getprofileinternalasync_catch_192_18__catch",
          "from": "method:nyrl9z:getprofileinternalasync__action_192_try_catch_192__linear",
          "to": "method:nyrl9z:getprofileinternalasync__action_192_getprofileinternalasync_catch_192_18__catch",
          "kind": "exception",
          "line": 192,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_192_getprofileinternalasync_catch_192_18__catch__method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return",
          "from": "method:nyrl9z:getprofileinternalasync__action_192_getprofileinternalasync_catch_192_18__catch",
          "to": "method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return",
          "kind": "return",
          "line": 194,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return__method:nyrl9z:getprofileinternalasync__action_196_getprofileinternalasync_finally_196_20__finally",
          "from": "method:nyrl9z:getprofileinternalasync__action_194_getprofileinternalasync_return_194_19__return",
          "to": "method:nyrl9z:getprofileinternalasync__action_196_getprofileinternalasync_finally_196_20__finally",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_196_getprofileinternalasync_finally_196_20__finally__method:nyrl9z:getprofileinternalasync__action_198_finally_198__finally",
          "from": "method:nyrl9z:getprofileinternalasync__action_196_getprofileinternalasync_finally_196_20__finally",
          "to": "method:nyrl9z:getprofileinternalasync__action_198_finally_198__finally",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__action_198_finally_198__finally__implicit_return",
          "from": "method:nyrl9z:getprofileinternalasync__action_198_finally_198__finally",
          "to": "method:nyrl9z:getprofileinternalasync__implicit_return",
          "kind": "return",
          "line": 200,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync__jump_NexusReader_UI_Shared_Services_IdentityService_cs_LogoutAsync",
          "fromNodeId": "method:nyrl9z:getprofileinternalasync__call_169_LogoutAsync",
          "kind": "call-target",
          "targetNodeId": "method:1i33wis:logoutasync",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "LogoutAsync",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target LogoutAsync resolved to NexusReader.UI.Shared/Services/IdentityService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nyrl9z:getprofileinternalasync__call_179_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 179,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nyrl9z:getprofileinternalasync__call_180_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 180,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nyrl9z:getprofileinternalasync__call_183_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 183,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication__jump_unknown_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "fromNodeId": "method:nyrl9z:getprofileinternalasync__call_185_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 185,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:nyrl9z:getprofileinternalasync__action_152_guard_clause_152__merge",
        "method:nyrl9z:getprofileinternalasync__action_152_getprofileinternalasync_branch_152_0__merge",
        "method:nyrl9z:getprofileinternalasync__action_157_getprofileinternalasync_branch_157_2__merge",
        "method:nyrl9z:getprofileinternalasync__action_167_branch_167__merge",
        "method:nyrl9z:getprofileinternalasync__action_167_getprofileinternalasync_branch_167_6__merge",
        "method:nyrl9z:getprofileinternalasync__action_173_branch_173__merge",
        "method:nyrl9z:getprofileinternalasync__action_173_getprofileinternalasync_branch_173_9__merge",
        "method:nyrl9z:getprofileinternalasync__action_176_getprofileinternalasync_branch_176_11__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 150,
        "end": 200
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 150,
          "summary": "Control-flow fragment extracted for method GetProfileInternalAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:nb75z9:refreshtokenasync__fragment",
      "ownerFileId": "file:b8uv8h:identityservice-cs",
      "ownerSymbolId": "method:nb75z9:refreshtokenasync",
      "ownerSymbolName": "RefreshTokenAsync",
      "entryNodeId": "method:nb75z9:refreshtokenasync__entry",
      "exitNodeIds": [
        "method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return",
        "method:nb75z9:refreshtokenasync__action_241_return_241__return",
        "method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return",
        "method:nb75z9:refreshtokenasync__action_248_refreshtokenasync_return_248_21__return"
      ],
      "nodes": [
        {
          "id": "method:nb75z9:refreshtokenasync__entry",
          "kind": "entry",
          "label": "RefreshTokenAsync entry",
          "line": 202,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.99,
          "detail": "Attempts to refresh access token using stored refresh token, persists new tokens, invalidates auth state and refreshes profile information."
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_204_try_catch_204__linear",
          "kind": "statement",
          "label": "Refresh guarded",
          "line": 204,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Catches exceptions and returns Result.Fail with caused-by error"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_204_refreshtokenasync_try_204_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 204,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_206_refreshtokenasync_await_206_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var result = await _storageService.GetSecureString(RefreshTokenKey);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "INativeStorageService.GetSecureString",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "RefreshTokenKey"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(refreshToken)",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Fail when no stored refresh token"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "kind": "statement",
          "label": "merge",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(refreshToken)) return Result.Fail(\"Brak tokena odświeżania.\"",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(refreshToken)) return Result.Fail(\"Brak tokena odświeżania.\");"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_211_refreshtokenasync_await_211_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 211,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"identity/refresh\", new { refreshToken });"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_211_external_call_211__linear",
          "kind": "http-call",
          "label": "POST refresh",
          "line": 211,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Calls HttpClient.PostAsJsonAsync to 'identity/refresh' (framework call omitted from calls list)"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode and loginResult.AccessToken present",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__true",
          "kind": "branch-true",
          "label": "persist tokens and refresh profile",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__false",
          "kind": "branch-false",
          "label": "return session expired",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "kind": "statement",
          "label": "merge",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__true",
          "kind": "branch-true",
          "label": "true",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__false",
          "kind": "branch-false",
          "label": "false",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_215_refreshtokenasync_await_215_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 215,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var loginResult = await response.Content.ReadFromJsonAsync<LoginResponse>();"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition",
          "kind": "condition",
          "label": "loginResult != null && !string.IsNullOrEmpty(loginResult.AccessToken)",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (loginResult != null && !string.IsNullOrEmpty(loginResult.AccessToken))"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_218_refreshtokenasync_await_218_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(TokenKey, loginResult.AccessToken);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_218_state_change_218__linear",
          "kind": "statement",
          "label": "Persist new tokens and invalidate state",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Saves new access/refresh tokens, clears cached profile, clears provider cache and invokes OnStateInvalidated"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "TokenKey, loginResult.AccessToken"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(loginResult.RefreshToken)",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(loginResult.RefreshToken))"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__true",
          "kind": "branch-true",
          "label": "true",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__false",
          "kind": "branch-false",
          "label": "false",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_221_refreshtokenasync_await_221_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(RefreshTokenKey, loginResult.RefreshToken);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "RefreshTokenKey, loginResult.RefreshToken"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.ClearCache",
          "line": 225,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "cast _authStateProvider and call ClearCache"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_await_226_11__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition",
          "kind": "condition",
          "label": "OnStateInvalidated != null) await OnStateInvalidated.Invoke(",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (OnStateInvalidated != null) await OnStateInvalidated.Invoke();"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "OnStateInvalidated.Invoke",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "invoke event if not null"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_228_refreshtokenasync_await_228_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "var profileResult = await GetProfileAsync();"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_228_orchestration_228__linear",
          "kind": "statement",
          "label": "Refresh profile after token renewal",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Calls GetProfileAsync and persists profile metadata on success"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync",
          "kind": "call",
          "label": "GetProfileAsync",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "no parameters"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition",
          "kind": "condition",
          "label": "profileResult.IsSuccess",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78,
          "detail": "if (profileResult.IsSuccess)"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__true",
          "kind": "branch-true",
          "label": "true",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__false",
          "kind": "branch-false",
          "label": "false",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "kind": "statement",
          "label": "merge",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_232_refreshtokenasync_await_232_14__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserEmail, profile.Email);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail, profile.Email"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_233_refreshtokenasync_await_233_15__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 233,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserTenant, profile.TenantId.ToString());"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 233,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant, profile.TenantId.ToString()"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_236_refreshtokenasync_await_236_16__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81,
          "detail": "await _storageService.SaveSecureString(StorageKeys.UserRoles, rolesStr);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "INativeStorageService.SaveSecureString",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles, rolesStr"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_238_refreshtokenasync_notification_238_17__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83,
          "detail": "(_authStateProvider as NexusAuthenticationStateProvider)?.NotifyUserAuthentication(profile.Email, profile.TenantId.ToString(), rolesStr);"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88,
          "detail": "profile.Email, profile.TenantId.ToString(), rolesStr"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return",
          "kind": "return",
          "label": "Returns result",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_241_return_241__return",
          "kind": "return",
          "label": "Return final result",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Ok() on success, Result.Fail on failure"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return",
          "kind": "return",
          "label": "Returns result",
          "line": 244,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Sesja wygasła.\");"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_246_refreshtokenasync_catch_246_20__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 246,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_248_refreshtokenasync_return_248_21__return",
          "kind": "return",
          "label": "Returns result",
          "line": 248,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Błąd odświeżania sesji.\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:nb75z9:refreshtokenasync__entry__method:nb75z9:refreshtokenasync__action_204_try_catch_204__linear",
          "from": "method:nb75z9:refreshtokenasync__entry",
          "to": "method:nb75z9:refreshtokenasync__action_204_try_catch_204__linear",
          "kind": "next",
          "line": 204,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_204_try_catch_204__linear__method:nb75z9:refreshtokenasync__action_204_refreshtokenasync_try_204_0__try",
          "from": "method:nb75z9:refreshtokenasync__action_204_try_catch_204__linear",
          "to": "method:nb75z9:refreshtokenasync__action_204_refreshtokenasync_try_204_0__try",
          "kind": "next",
          "line": 204,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_204_refreshtokenasync_try_204_0__try__method:nb75z9:refreshtokenasync__action_206_refreshtokenasync_await_206_1__await",
          "from": "method:nb75z9:refreshtokenasync__action_204_refreshtokenasync_try_204_0__try",
          "to": "method:nb75z9:refreshtokenasync__action_206_refreshtokenasync_await_206_1__await",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_206_refreshtokenasync_await_206_1__await__call_method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_206_refreshtokenasync_await_206_1__await",
          "to": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "RefreshTokenKey",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString__method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition",
          "from": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString",
          "to": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition__method:nb75z9:refreshtokenasync__action_209_guard_clause_209__true",
          "from": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition",
          "to": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition__method:nb75z9:refreshtokenasync__action_209_guard_clause_209__false",
          "from": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__condition",
          "to": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__true__method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "from": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__true",
          "to": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__false__method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "from": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__false",
          "to": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge__method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition",
          "from": "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
          "to": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition__method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__true",
          "from": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition",
          "to": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition__method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__false",
          "from": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__condition",
          "to": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__true__method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "from": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__true",
          "to": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__false__method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "from": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__false",
          "to": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "kind": "next",
          "line": 209,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge__method:nb75z9:refreshtokenasync__action_211_refreshtokenasync_await_211_3__await",
          "from": "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
          "to": "method:nb75z9:refreshtokenasync__action_211_refreshtokenasync_await_211_3__await",
          "kind": "next",
          "line": 211,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_211_refreshtokenasync_await_211_3__await__method:nb75z9:refreshtokenasync__action_211_external_call_211__linear",
          "from": "method:nb75z9:refreshtokenasync__action_211_refreshtokenasync_await_211_3__await",
          "to": "method:nb75z9:refreshtokenasync__action_211_external_call_211__linear",
          "kind": "next",
          "line": 211,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_211_external_call_211__linear__method:nb75z9:refreshtokenasync__action_213_branch_213__condition",
          "from": "method:nb75z9:refreshtokenasync__action_211_external_call_211__linear",
          "to": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition__method:nb75z9:refreshtokenasync__action_213_branch_213__true",
          "from": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition",
          "to": "method:nb75z9:refreshtokenasync__action_213_branch_213__true",
          "kind": "condition-true",
          "label": "persist tokens and refresh profile",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition__method:nb75z9:refreshtokenasync__action_213_branch_213__false",
          "from": "method:nb75z9:refreshtokenasync__action_213_branch_213__condition",
          "to": "method:nb75z9:refreshtokenasync__action_213_branch_213__false",
          "kind": "condition-false",
          "label": "return session expired",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__true__method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "from": "method:nb75z9:refreshtokenasync__action_213_branch_213__true",
          "to": "method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__false__method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "from": "method:nb75z9:refreshtokenasync__action_213_branch_213__false",
          "to": "method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_branch_213__merge__method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition",
          "from": "method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
          "to": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition__method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__true",
          "from": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition",
          "to": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__true",
          "kind": "condition-true",
          "label": "true",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition__method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__false",
          "from": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__condition",
          "to": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__false",
          "kind": "condition-false",
          "label": "false",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__true__method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "from": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__true",
          "to": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__false__method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "from": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__false",
          "to": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "kind": "next",
          "line": 213,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge__method:nb75z9:refreshtokenasync__action_215_refreshtokenasync_await_215_5__await",
          "from": "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
          "to": "method:nb75z9:refreshtokenasync__action_215_refreshtokenasync_await_215_5__await",
          "kind": "next",
          "line": 215,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_215_refreshtokenasync_await_215_5__await__method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition",
          "from": "method:nb75z9:refreshtokenasync__action_215_refreshtokenasync_await_215_5__await",
          "to": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition__method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__true",
          "from": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition",
          "to": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition__method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__false",
          "from": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__condition",
          "to": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__true__method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "from": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__true",
          "to": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__false__method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "from": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__false",
          "to": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge__method:nb75z9:refreshtokenasync__action_218_refreshtokenasync_await_218_7__await",
          "from": "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
          "to": "method:nb75z9:refreshtokenasync__action_218_refreshtokenasync_await_218_7__await",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_218_refreshtokenasync_await_218_7__await__method:nb75z9:refreshtokenasync__action_218_state_change_218__linear",
          "from": "method:nb75z9:refreshtokenasync__action_218_refreshtokenasync_await_218_7__await",
          "to": "method:nb75z9:refreshtokenasync__action_218_state_change_218__linear",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_218_state_change_218__linear__call_method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_218_state_change_218__linear",
          "to": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "TokenKey, loginResult.AccessToken",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString__method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition",
          "from": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString",
          "to": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition",
          "kind": "next",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition__method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__true",
          "from": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition",
          "to": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__true",
          "kind": "condition-true",
          "label": "true",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition__method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__false",
          "from": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__condition",
          "to": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__false",
          "kind": "condition-false",
          "label": "false",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__true__method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "from": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__true",
          "to": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "kind": "next",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__false__method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "from": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__false",
          "to": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "kind": "next",
          "line": 219,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge__method:nb75z9:refreshtokenasync__action_221_refreshtokenasync_await_221_9__await",
          "from": "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
          "to": "method:nb75z9:refreshtokenasync__action_221_refreshtokenasync_await_221_9__await",
          "kind": "next",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_221_refreshtokenasync_await_221_9__await__call_method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_221_refreshtokenasync_await_221_9__await",
          "to": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "RefreshTokenKey, loginResult.RefreshToken",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString__call_method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache",
          "from": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString",
          "to": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call",
          "label": "cast _authStateProvider and call ClearCache",
          "line": 225,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_await_226_11__await",
          "from": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_await_226_11__await",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_await_226_11__await__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_await_226_11__await",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__true",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__false",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__condition",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__true__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__true",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__false__method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__false",
          "to": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge__call_method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke",
          "from": "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
          "to": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke",
          "kind": "call",
          "label": "invoke event if not null",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke__method:nb75z9:refreshtokenasync__action_228_refreshtokenasync_await_228_12__await",
          "from": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke",
          "to": "method:nb75z9:refreshtokenasync__action_228_refreshtokenasync_await_228_12__await",
          "kind": "next",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_228_refreshtokenasync_await_228_12__await__method:nb75z9:refreshtokenasync__action_228_orchestration_228__linear",
          "from": "method:nb75z9:refreshtokenasync__action_228_refreshtokenasync_await_228_12__await",
          "to": "method:nb75z9:refreshtokenasync__action_228_orchestration_228__linear",
          "kind": "next",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_228_orchestration_228__linear__call_method:nb75z9:refreshtokenasync__call_228_GetProfileAsync",
          "from": "method:nb75z9:refreshtokenasync__action_228_orchestration_228__linear",
          "to": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync",
          "kind": "call",
          "label": "no parameters",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync__method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition",
          "from": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync",
          "to": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition",
          "kind": "next",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition__method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__true",
          "from": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition",
          "to": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__true",
          "kind": "condition-true",
          "label": "true",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition__method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__false",
          "from": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__condition",
          "to": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__false",
          "kind": "condition-false",
          "label": "false",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__true__method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "from": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__true",
          "to": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "kind": "next",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__false__method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "from": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__false",
          "to": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "kind": "next",
          "line": 229,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge__method:nb75z9:refreshtokenasync__action_232_refreshtokenasync_await_232_14__await",
          "from": "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge",
          "to": "method:nb75z9:refreshtokenasync__action_232_refreshtokenasync_await_232_14__await",
          "kind": "next",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_232_refreshtokenasync_await_232_14__await__call_method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_232_refreshtokenasync_await_232_14__await",
          "to": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail, profile.Email",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString__method:nb75z9:refreshtokenasync__action_233_refreshtokenasync_await_233_15__await",
          "from": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString",
          "to": "method:nb75z9:refreshtokenasync__action_233_refreshtokenasync_await_233_15__await",
          "kind": "next",
          "line": 233,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_233_refreshtokenasync_await_233_15__await__call_method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_233_refreshtokenasync_await_233_15__await",
          "to": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant, profile.TenantId.ToString()",
          "line": 233,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString__method:nb75z9:refreshtokenasync__action_236_refreshtokenasync_await_236_16__await",
          "from": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString",
          "to": "method:nb75z9:refreshtokenasync__action_236_refreshtokenasync_await_236_16__await",
          "kind": "next",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_236_refreshtokenasync_await_236_16__await__call_method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString",
          "from": "method:nb75z9:refreshtokenasync__action_236_refreshtokenasync_await_236_16__await",
          "to": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles, rolesStr",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString__method:nb75z9:refreshtokenasync__action_238_refreshtokenasync_notification_238_17__linear",
          "from": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString",
          "to": "method:nb75z9:refreshtokenasync__action_238_refreshtokenasync_notification_238_17__linear",
          "kind": "next",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_238_refreshtokenasync_notification_238_17__linear__call_method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "from": "method:nb75z9:refreshtokenasync__action_238_refreshtokenasync_notification_238_17__linear",
          "to": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call",
          "label": "profile.Email, profile.TenantId.ToString(), rolesStr",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication__method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return",
          "from": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "to": "method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return",
          "kind": "return",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return__method:nb75z9:refreshtokenasync__action_241_return_241__return",
          "from": "method:nb75z9:refreshtokenasync__action_241_refreshtokenasync_return_241_18__return",
          "to": "method:nb75z9:refreshtokenasync__action_241_return_241__return",
          "kind": "return",
          "line": 241,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_241_return_241__return__method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return",
          "from": "method:nb75z9:refreshtokenasync__action_241_return_241__return",
          "to": "method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return",
          "kind": "return",
          "line": 244,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return__method:nb75z9:refreshtokenasync__action_246_refreshtokenasync_catch_246_20__catch",
          "from": "method:nb75z9:refreshtokenasync__action_244_refreshtokenasync_return_244_19__return",
          "to": "method:nb75z9:refreshtokenasync__action_246_refreshtokenasync_catch_246_20__catch",
          "kind": "exception",
          "line": 246,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nb75z9:refreshtokenasync__action_246_refreshtokenasync_catch_246_20__catch__method:nb75z9:refreshtokenasync__action_248_refreshtokenasync_return_248_21__return",
          "from": "method:nb75z9:refreshtokenasync__action_246_refreshtokenasync_catch_246_20__catch",
          "to": "method:nb75z9:refreshtokenasync__action_248_refreshtokenasync_return_248_21__return",
          "kind": "return",
          "line": 248,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString__jump_unknown_INativeStorageService_GetSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_206_INativeStorageService_GetSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.GetSecureString",
          "line": 206,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.GetSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_218_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 218,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_221_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 221,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache__jump_unknown_NexusAuthenticationStateProvider_ClearCache",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_225_NexusAuthenticationStateProvider_ClearCache",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.ClearCache",
          "line": 225,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.ClearCache in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke__jump_NexusReader_UI_Shared_Services_IdentityService_cs_OnStateInvalidated_Invoke",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_226_OnStateInvalidated_Invoke",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "OnStateInvalidated.Invoke",
          "line": 226,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target OnStateInvalidated.Invoke in NexusReader.UI.Shared/Services/IdentityService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync__jump_NexusReader_UI_Shared_Services_IdentityService_cs_GetProfileAsync",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_228_GetProfileAsync",
          "kind": "call-target",
          "targetNodeId": "method:1u6514u:getprofileasync",
          "targetPath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "targetHint": "GetProfileAsync",
          "line": 228,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target GetProfileAsync resolved to NexusReader.UI.Shared/Services/IdentityService.cs.",
          "status": "resolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_232_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 232,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_233_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 233,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString__jump_unknown_INativeStorageService_SaveSecureString",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_236_INativeStorageService_SaveSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.SaveSecureString",
          "line": 236,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target INativeStorageService.SaveSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication__jump_unknown_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "fromNodeId": "method:nb75z9:refreshtokenasync__call_238_NexusAuthenticationStateProvider_NotifyUserAuthentication",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "NexusAuthenticationStateProvider.NotifyUserAuthentication",
          "line": 238,
          "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "reason": "Call target NexusAuthenticationStateProvider.NotifyUserAuthentication in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:nb75z9:refreshtokenasync__action_209_guard_clause_209__merge",
        "method:nb75z9:refreshtokenasync__action_209_refreshtokenasync_guard_clause_209_2__merge",
        "method:nb75z9:refreshtokenasync__action_213_branch_213__merge",
        "method:nb75z9:refreshtokenasync__action_213_refreshtokenasync_branch_213_4__merge",
        "method:nb75z9:refreshtokenasync__action_216_refreshtokenasync_branch_216_6__merge",
        "method:nb75z9:refreshtokenasync__action_219_refreshtokenasync_branch_219_8__merge",
        "method:nb75z9:refreshtokenasync__action_226_refreshtokenasync_branch_226_10__merge",
        "method:nb75z9:refreshtokenasync__action_229_refreshtokenasync_branch_229_13__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 202,
        "end": 250
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IdentityService.cs",
          "line": 202,
          "summary": "Control-flow fragment extracted for method RefreshTokenAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:aocpxz:isfocusmodeactive__fragment",
      "ownerFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "ownerSymbolId": "method:aocpxz:isfocusmodeactive",
      "ownerSymbolName": "IsFocusModeActive",
      "entryNodeId": "method:aocpxz:isfocusmodeactive__entry",
      "exitNodeIds": [
        "method:aocpxz:isfocusmodeactive__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:aocpxz:isfocusmodeactive__entry",
          "kind": "entry",
          "label": "IsFocusModeActive entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.99,
          "detail": "Property getter that indicates whether focus mode is currently active."
        },
        {
          "id": "method:aocpxz:isfocusmodeactive__action_5_declaration_only_5__linear",
          "kind": "statement",
          "label": "Read-only property declaration",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7,
          "detail": "Interface exposes a read-only boolean property; no implementation here."
        },
        {
          "id": "method:aocpxz:isfocusmodeactive__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:aocpxz:isfocusmodeactive__entry__method:aocpxz:isfocusmodeactive__action_5_declaration_only_5__linear",
          "from": "method:aocpxz:isfocusmodeactive__entry",
          "to": "method:aocpxz:isfocusmodeactive__action_5_declaration_only_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:aocpxz:isfocusmodeactive__action_5_declaration_only_5__linear__implicit_return",
          "from": "method:aocpxz:isfocusmodeactive__action_5_declaration_only_5__linear",
          "to": "method:aocpxz:isfocusmodeactive__implicit_return",
          "kind": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 5,
        "end": 5
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method IsFocusModeActive.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:dzihxd:onfocusmodechanged__fragment",
      "ownerFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "ownerSymbolId": "method:dzihxd:onfocusmodechanged",
      "ownerSymbolName": "OnFocusModeChanged",
      "entryNodeId": "method:dzihxd:onfocusmodechanged__entry",
      "exitNodeIds": [
        "method:dzihxd:onfocusmodechanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:dzihxd:onfocusmodechanged__entry",
          "kind": "entry",
          "label": "OnFocusModeChanged entry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.99,
          "detail": "Event raised when focus mode changes, subscribers receive an asynchronous notification."
        },
        {
          "id": "method:dzihxd:onfocusmodechanged__action_6_declaration_only_6__linear",
          "kind": "statement",
          "label": "Event declaration",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7,
          "detail": "Interface declares an async event; implementation is responsible for invocation and subscription semantics."
        },
        {
          "id": "method:dzihxd:onfocusmodechanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:dzihxd:onfocusmodechanged__entry__method:dzihxd:onfocusmodechanged__action_6_declaration_only_6__linear",
          "from": "method:dzihxd:onfocusmodechanged__entry",
          "to": "method:dzihxd:onfocusmodechanged__action_6_declaration_only_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:dzihxd:onfocusmodechanged__action_6_declaration_only_6__linear__implicit_return",
          "from": "method:dzihxd:onfocusmodechanged__action_6_declaration_only_6__linear",
          "to": "method:dzihxd:onfocusmodechanged__implicit_return",
          "kind": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 6,
        "end": 6
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 6,
          "summary": "Control-flow fragment extracted for method OnFocusModeChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:fpl7t6:initializeasync__fragment",
      "ownerFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "ownerSymbolId": "method:fpl7t6:initializeasync",
      "ownerSymbolName": "InitializeAsync",
      "entryNodeId": "method:fpl7t6:initializeasync__entry",
      "exitNodeIds": [
        "method:fpl7t6:initializeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:fpl7t6:initializeasync__entry",
          "kind": "entry",
          "label": "InitializeAsync entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously initializes the focus mode service (e.g., load persisted state or perform startup tasks)."
        },
        {
          "id": "method:fpl7t6:initializeasync__action_7_declaration_only_7__linear",
          "kind": "statement",
          "label": "Initialization contract",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7,
          "detail": "Interface method; concrete implementation may perform persistence reads, setup, or raise OnFocusModeChanged."
        },
        {
          "id": "method:fpl7t6:initializeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:fpl7t6:initializeasync__entry__method:fpl7t6:initializeasync__action_7_declaration_only_7__linear",
          "from": "method:fpl7t6:initializeasync__entry",
          "to": "method:fpl7t6:initializeasync__action_7_declaration_only_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fpl7t6:initializeasync__action_7_declaration_only_7__linear__implicit_return",
          "from": "method:fpl7t6:initializeasync__action_7_declaration_only_7__linear",
          "to": "method:fpl7t6:initializeasync__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method InitializeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17j6y8x:toggleasync__fragment",
      "ownerFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "ownerSymbolId": "method:17j6y8x:toggleasync",
      "ownerSymbolName": "ToggleAsync",
      "entryNodeId": "method:17j6y8x:toggleasync__entry",
      "exitNodeIds": [
        "method:17j6y8x:toggleasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:17j6y8x:toggleasync__entry",
          "kind": "entry",
          "label": "ToggleAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously toggles the focus mode state and typically notifies subscribers."
        },
        {
          "id": "method:17j6y8x:toggleasync__action_8_declaration_only_8__linear",
          "kind": "statement",
          "label": "Toggle contract",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7,
          "detail": "Interface method; concrete implementation likely flips state, persists it, and triggers OnFocusModeChanged."
        },
        {
          "id": "method:17j6y8x:toggleasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:17j6y8x:toggleasync__entry__method:17j6y8x:toggleasync__action_8_declaration_only_8__linear",
          "from": "method:17j6y8x:toggleasync__entry",
          "to": "method:17j6y8x:toggleasync__action_8_declaration_only_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17j6y8x:toggleasync__action_8_declaration_only_8__linear__implicit_return",
          "from": "method:17j6y8x:toggleasync__action_8_declaration_only_8__linear",
          "to": "method:17j6y8x:toggleasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method ToggleAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:n5kc06:currentgraphdata__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:n5kc06:currentgraphdata",
      "ownerSymbolName": "CurrentGraphData",
      "entryNodeId": "method:n5kc06:currentgraphdata__entry",
      "exitNodeIds": [
        "method:n5kc06:currentgraphdata__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:n5kc06:currentgraphdata__entry",
          "kind": "entry",
          "label": "CurrentGraphData entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Read-only property exposing the current graph data held by the service."
        },
        {
          "id": "method:n5kc06:currentgraphdata__action_7_property_7__linear",
          "kind": "statement",
          "label": "read-only state",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Getter-only property; implementation is expected to return current GraphDataDto or null."
        },
        {
          "id": "method:n5kc06:currentgraphdata__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:n5kc06:currentgraphdata__entry__method:n5kc06:currentgraphdata__action_7_property_7__linear",
          "from": "method:n5kc06:currentgraphdata__entry",
          "to": "method:n5kc06:currentgraphdata__action_7_property_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:n5kc06:currentgraphdata__action_7_property_7__linear__implicit_return",
          "from": "method:n5kc06:currentgraphdata__action_7_property_7__linear",
          "to": "method:n5kc06:currentgraphdata__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method CurrentGraphData.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:cho50r:activenodeid__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:cho50r:activenodeid",
      "ownerSymbolName": "ActiveNodeId",
      "entryNodeId": "method:cho50r:activenodeid__entry",
      "exitNodeIds": [
        "method:cho50r:activenodeid__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:cho50r:activenodeid__entry",
          "kind": "entry",
          "label": "ActiveNodeId entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Read-only property exposing the currently active/selected node id."
        },
        {
          "id": "method:cho50r:activenodeid__action_8_property_8__linear",
          "kind": "statement",
          "label": "read-only state",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Getter-only property; implementation is expected to return the active node id or null."
        },
        {
          "id": "method:cho50r:activenodeid__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:cho50r:activenodeid__entry__method:cho50r:activenodeid__action_8_property_8__linear",
          "from": "method:cho50r:activenodeid__entry",
          "to": "method:cho50r:activenodeid__action_8_property_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:cho50r:activenodeid__action_8_property_8__linear__implicit_return",
          "from": "method:cho50r:activenodeid__action_8_property_8__linear",
          "to": "method:cho50r:activenodeid__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method ActiveNodeId.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10q1pr:isloading__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:10q1pr:isloading",
      "ownerSymbolName": "IsLoading",
      "entryNodeId": "method:10q1pr:isloading__entry",
      "exitNodeIds": [
        "method:10q1pr:isloading__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10q1pr:isloading__entry",
          "kind": "entry",
          "label": "IsLoading entry",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Read-only flag indicating whether the graph is currently loading."
        },
        {
          "id": "method:10q1pr:isloading__action_9_property_9__linear",
          "kind": "statement",
          "label": "read-only state",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Getter-only boolean; implementations expose loading state."
        },
        {
          "id": "method:10q1pr:isloading__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10q1pr:isloading__entry__method:10q1pr:isloading__action_9_property_9__linear",
          "from": "method:10q1pr:isloading__entry",
          "to": "method:10q1pr:isloading__action_9_property_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10q1pr:isloading__action_9_property_9__linear__implicit_return",
          "from": "method:10q1pr:isloading__action_9_property_9__linear",
          "to": "method:10q1pr:isloading__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method IsLoading.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:88y0cc:ongraphupdated__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:88y0cc:ongraphupdated",
      "ownerSymbolName": "OnGraphUpdated",
      "entryNodeId": "method:88y0cc:ongraphupdated__entry",
      "exitNodeIds": [
        "method:88y0cc:ongraphupdated__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:88y0cc:ongraphupdated__entry",
          "kind": "entry",
          "label": "OnGraphUpdated entry",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Event raised when the graph data has been updated."
        },
        {
          "id": "method:88y0cc:ongraphupdated__action_11_event_11__linear",
          "kind": "statement",
          "label": "notification",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Event delegate to notify subscribers after graph updates."
        },
        {
          "id": "method:88y0cc:ongraphupdated__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:88y0cc:ongraphupdated__entry__method:88y0cc:ongraphupdated__action_11_event_11__linear",
          "from": "method:88y0cc:ongraphupdated__entry",
          "to": "method:88y0cc:ongraphupdated__action_11_event_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:88y0cc:ongraphupdated__action_11_event_11__linear__implicit_return",
          "from": "method:88y0cc:ongraphupdated__action_11_event_11__linear",
          "to": "method:88y0cc:ongraphupdated__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method OnGraphUpdated.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1d2tbk0:onactivenodechanged__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:1d2tbk0:onactivenodechanged",
      "ownerSymbolName": "OnActiveNodeChanged",
      "entryNodeId": "method:1d2tbk0:onactivenodechanged__entry",
      "exitNodeIds": [
        "method:1d2tbk0:onactivenodechanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1d2tbk0:onactivenodechanged__entry",
          "kind": "entry",
          "label": "OnActiveNodeChanged entry",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Event raised when the active node changes, providing the new node id."
        },
        {
          "id": "method:1d2tbk0:onactivenodechanged__action_12_event_12__linear",
          "kind": "statement",
          "label": "notification with payload",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Event delegate to notify subscribers with new active node id."
        },
        {
          "id": "method:1d2tbk0:onactivenodechanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1d2tbk0:onactivenodechanged__entry__method:1d2tbk0:onactivenodechanged__action_12_event_12__linear",
          "from": "method:1d2tbk0:onactivenodechanged__entry",
          "to": "method:1d2tbk0:onactivenodechanged__action_12_event_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1d2tbk0:onactivenodechanged__action_12_event_12__linear__implicit_return",
          "from": "method:1d2tbk0:onactivenodechanged__action_12_event_12__linear",
          "to": "method:1d2tbk0:onactivenodechanged__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method OnActiveNodeChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1qc1jbv:onloadingchanged__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:1qc1jbv:onloadingchanged",
      "ownerSymbolName": "OnLoadingChanged",
      "entryNodeId": "method:1qc1jbv:onloadingchanged__entry",
      "exitNodeIds": [
        "method:1qc1jbv:onloadingchanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1qc1jbv:onloadingchanged__entry",
          "kind": "entry",
          "label": "OnLoadingChanged entry",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Event raised when the loading state changes, providing the new boolean state."
        },
        {
          "id": "method:1qc1jbv:onloadingchanged__action_13_event_13__linear",
          "kind": "statement",
          "label": "notification with payload",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Event delegate to notify subscribers about loading state changes."
        },
        {
          "id": "method:1qc1jbv:onloadingchanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1qc1jbv:onloadingchanged__entry__method:1qc1jbv:onloadingchanged__action_13_event_13__linear",
          "from": "method:1qc1jbv:onloadingchanged__entry",
          "to": "method:1qc1jbv:onloadingchanged__action_13_event_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1qc1jbv:onloadingchanged__action_13_event_13__linear__implicit_return",
          "from": "method:1qc1jbv:onloadingchanged__action_13_event_13__linear",
          "to": "method:1qc1jbv:onloadingchanged__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method OnLoadingChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1gtjcaz:updategraph__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:1gtjcaz:updategraph",
      "ownerSymbolName": "UpdateGraph",
      "entryNodeId": "method:1gtjcaz:updategraph__entry",
      "exitNodeIds": [
        "method:1gtjcaz:updategraph__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1gtjcaz:updategraph__entry",
          "kind": "entry",
          "label": "UpdateGraph entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously replace or update the current graph data with newData and notify listeners."
        },
        {
          "id": "method:1gtjcaz:updategraph__action_15_state_change_15__linear",
          "kind": "statement",
          "label": "update graph data",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Contract expects implementations to set CurrentGraphData to newData."
        },
        {
          "id": "method:1gtjcaz:updategraph__action_15_event_publish_15__linear",
          "kind": "publish-event",
          "label": "raise OnGraphUpdated",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Implementation should trigger OnGraphUpdated after updating state."
        },
        {
          "id": "method:1gtjcaz:updategraph__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1gtjcaz:updategraph__entry__method:1gtjcaz:updategraph__action_15_state_change_15__linear",
          "from": "method:1gtjcaz:updategraph__entry",
          "to": "method:1gtjcaz:updategraph__action_15_state_change_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gtjcaz:updategraph__action_15_state_change_15__linear__method:1gtjcaz:updategraph__action_15_event_publish_15__linear",
          "from": "method:1gtjcaz:updategraph__action_15_state_change_15__linear",
          "to": "method:1gtjcaz:updategraph__action_15_event_publish_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gtjcaz:updategraph__action_15_event_publish_15__linear__implicit_return",
          "from": "method:1gtjcaz:updategraph__action_15_event_publish_15__linear",
          "to": "method:1gtjcaz:updategraph__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 15,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method UpdateGraph.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:p6r8md:setactivenode__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:p6r8md:setactivenode",
      "ownerSymbolName": "SetActiveNode",
      "entryNodeId": "method:p6r8md:setactivenode__entry",
      "exitNodeIds": [
        "method:p6r8md:setactivenode__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:p6r8md:setactivenode__entry",
          "kind": "entry",
          "label": "SetActiveNode entry",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously set the active node by id and notify subscribers of the change."
        },
        {
          "id": "method:p6r8md:setactivenode__action_16_state_change_16__linear",
          "kind": "statement",
          "label": "set active node",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Contract expects implementations to update ActiveNodeId to nodeId."
        },
        {
          "id": "method:p6r8md:setactivenode__action_16_event_publish_16__linear",
          "kind": "publish-event",
          "label": "raise OnActiveNodeChanged",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Implementation should trigger OnActiveNodeChanged with nodeId after change."
        },
        {
          "id": "method:p6r8md:setactivenode__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:p6r8md:setactivenode__entry__method:p6r8md:setactivenode__action_16_state_change_16__linear",
          "from": "method:p6r8md:setactivenode__entry",
          "to": "method:p6r8md:setactivenode__action_16_state_change_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:p6r8md:setactivenode__action_16_state_change_16__linear__method:p6r8md:setactivenode__action_16_event_publish_16__linear",
          "from": "method:p6r8md:setactivenode__action_16_state_change_16__linear",
          "to": "method:p6r8md:setactivenode__action_16_event_publish_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:p6r8md:setactivenode__action_16_event_publish_16__linear__implicit_return",
          "from": "method:p6r8md:setactivenode__action_16_event_publish_16__linear",
          "to": "method:p6r8md:setactivenode__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 16,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method SetActiveNode.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:x4s1g:setloading__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:x4s1g:setloading",
      "ownerSymbolName": "SetLoading",
      "entryNodeId": "method:x4s1g:setloading__entry",
      "exitNodeIds": [
        "method:x4s1g:setloading__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:x4s1g:setloading__entry",
          "kind": "entry",
          "label": "SetLoading entry",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously set the loading flag and notify listeners."
        },
        {
          "id": "method:x4s1g:setloading__action_17_state_change_17__linear",
          "kind": "statement",
          "label": "set loading flag",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Contract expects implementations to set IsLoading to isLoading."
        },
        {
          "id": "method:x4s1g:setloading__action_17_event_publish_17__linear",
          "kind": "publish-event",
          "label": "raise OnLoadingChanged",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Implementation should trigger OnLoadingChanged with the new boolean value."
        },
        {
          "id": "method:x4s1g:setloading__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:x4s1g:setloading__entry__method:x4s1g:setloading__action_17_state_change_17__linear",
          "from": "method:x4s1g:setloading__entry",
          "to": "method:x4s1g:setloading__action_17_state_change_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:x4s1g:setloading__action_17_state_change_17__linear__method:x4s1g:setloading__action_17_event_publish_17__linear",
          "from": "method:x4s1g:setloading__action_17_state_change_17__linear",
          "to": "method:x4s1g:setloading__action_17_event_publish_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:x4s1g:setloading__action_17_event_publish_17__linear__implicit_return",
          "from": "method:x4s1g:setloading__action_17_event_publish_17__linear",
          "to": "method:x4s1g:setloading__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 17,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method SetLoading.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1uy10ke:clear__fragment",
      "ownerFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "ownerSymbolId": "method:1uy10ke:clear",
      "ownerSymbolName": "Clear",
      "entryNodeId": "method:1uy10ke:clear__entry",
      "exitNodeIds": [
        "method:1uy10ke:clear__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1uy10ke:clear__entry",
          "kind": "entry",
          "label": "Clear entry",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously clear the current graph state (reset data, active node, loading) and notify subscribers."
        },
        {
          "id": "method:1uy10ke:clear__action_18_event_publish_18__linear",
          "kind": "publish-event",
          "label": "raise related events",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing."
        },
        {
          "id": "method:1uy10ke:clear__action_18_state_change_18__linear",
          "kind": "statement",
          "label": "clear state",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "Implementation should clear CurrentGraphData and ActiveNodeId and reset IsLoading."
        },
        {
          "id": "method:1uy10ke:clear__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1uy10ke:clear__entry__method:1uy10ke:clear__action_18_event_publish_18__linear",
          "from": "method:1uy10ke:clear__entry",
          "to": "method:1uy10ke:clear__action_18_event_publish_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uy10ke:clear__action_18_event_publish_18__linear__method:1uy10ke:clear__action_18_state_change_18__linear",
          "from": "method:1uy10ke:clear__action_18_event_publish_18__linear",
          "to": "method:1uy10ke:clear__action_18_state_change_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uy10ke:clear__action_18_state_change_18__linear__implicit_return",
          "from": "method:1uy10ke:clear__action_18_state_change_18__linear",
          "to": "method:1uy10ke:clear__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 18,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method Clear.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:vdmrat:currentquizblockid__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:vdmrat:currentquizblockid",
      "ownerSymbolName": "CurrentQuizBlockId",
      "entryNodeId": "method:vdmrat:currentquizblockid__entry",
      "exitNodeIds": [
        "method:vdmrat:currentquizblockid__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:vdmrat:currentquizblockid__entry",
          "kind": "entry",
          "label": "CurrentQuizBlockId entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Read-only property exposing the current quiz block identifier."
        },
        {
          "id": "method:vdmrat:currentquizblockid__action_7_property_get_7__linear",
          "kind": "statement",
          "label": "Expose current quiz block id",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Getter-only property; no implementation here (interface)."
        },
        {
          "id": "method:vdmrat:currentquizblockid__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:vdmrat:currentquizblockid__entry__method:vdmrat:currentquizblockid__action_7_property_get_7__linear",
          "from": "method:vdmrat:currentquizblockid__entry",
          "to": "method:vdmrat:currentquizblockid__action_7_property_get_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:vdmrat:currentquizblockid__action_7_property_get_7__linear__implicit_return",
          "from": "method:vdmrat:currentquizblockid__action_7_property_get_7__linear",
          "to": "method:vdmrat:currentquizblockid__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method CurrentQuizBlockId.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:dz8xj4:currentquiz__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:dz8xj4:currentquiz",
      "ownerSymbolName": "CurrentQuiz",
      "entryNodeId": "method:dz8xj4:currentquiz__entry",
      "exitNodeIds": [
        "method:dz8xj4:currentquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:dz8xj4:currentquiz__entry",
          "kind": "entry",
          "label": "CurrentQuiz entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Read-only property exposing the current Quiz DTO."
        },
        {
          "id": "method:dz8xj4:currentquiz__action_8_property_get_8__linear",
          "kind": "statement",
          "label": "Expose current quiz",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Getter-only property returning QuizDto; implemented by consumers."
        },
        {
          "id": "method:dz8xj4:currentquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:dz8xj4:currentquiz__entry__method:dz8xj4:currentquiz__action_8_property_get_8__linear",
          "from": "method:dz8xj4:currentquiz__entry",
          "to": "method:dz8xj4:currentquiz__action_8_property_get_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:dz8xj4:currentquiz__action_8_property_get_8__linear__implicit_return",
          "from": "method:dz8xj4:currentquiz__action_8_property_get_8__linear",
          "to": "method:dz8xj4:currentquiz__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method CurrentQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1iqnx8z:ishydrating__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:1iqnx8z:ishydrating",
      "ownerSymbolName": "IsHydrating",
      "entryNodeId": "method:1iqnx8z:ishydrating__entry",
      "exitNodeIds": [
        "method:1iqnx8z:ishydrating__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1iqnx8z:ishydrating__entry",
          "kind": "entry",
          "label": "IsHydrating entry",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Read-only property indicating whether the service is currently hydrating state."
        },
        {
          "id": "method:1iqnx8z:ishydrating__action_9_property_get_9__linear",
          "kind": "statement",
          "label": "Expose hydration-in-progress flag",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Getter-only boolean flag."
        },
        {
          "id": "method:1iqnx8z:ishydrating__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1iqnx8z:ishydrating__entry__method:1iqnx8z:ishydrating__action_9_property_get_9__linear",
          "from": "method:1iqnx8z:ishydrating__entry",
          "to": "method:1iqnx8z:ishydrating__action_9_property_get_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1iqnx8z:ishydrating__action_9_property_get_9__linear__implicit_return",
          "from": "method:1iqnx8z:ishydrating__action_9_property_get_9__linear",
          "to": "method:1iqnx8z:ishydrating__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method IsHydrating.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pu32eo:hasnewquiz__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:1pu32eo:hasnewquiz",
      "ownerSymbolName": "HasNewQuiz",
      "entryNodeId": "method:1pu32eo:hasnewquiz__entry",
      "exitNodeIds": [
        "method:1pu32eo:hasnewquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pu32eo:hasnewquiz__entry",
          "kind": "entry",
          "label": "HasNewQuiz entry",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Read-only property indicating whether there is a new/unseen quiz."
        },
        {
          "id": "method:1pu32eo:hasnewquiz__action_10_property_get_10__linear",
          "kind": "statement",
          "label": "Expose 'new quiz' indicator",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Getter-only boolean flag."
        },
        {
          "id": "method:1pu32eo:hasnewquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pu32eo:hasnewquiz__entry__method:1pu32eo:hasnewquiz__action_10_property_get_10__linear",
          "from": "method:1pu32eo:hasnewquiz__entry",
          "to": "method:1pu32eo:hasnewquiz__action_10_property_get_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pu32eo:hasnewquiz__action_10_property_get_10__linear__implicit_return",
          "from": "method:1pu32eo:hasnewquiz__action_10_property_get_10__linear",
          "to": "method:1pu32eo:hasnewquiz__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method HasNewQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1s6rrbj:onquizrequested__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:1s6rrbj:onquizrequested",
      "ownerSymbolName": "OnQuizRequested",
      "entryNodeId": "method:1s6rrbj:onquizrequested__entry",
      "exitNodeIds": [
        "method:1s6rrbj:onquizrequested__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1s6rrbj:onquizrequested__entry",
          "kind": "entry",
          "label": "OnQuizRequested entry",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Event raised when a quiz is requested (carries blockId), consumers can subscribe to handle requests."
        },
        {
          "id": "method:1s6rrbj:onquizrequested__action_12_event_declaration_12__linear",
          "kind": "statement",
          "label": "Quiz requested event",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Event signature expects an async handler taking a string blockId."
        },
        {
          "id": "method:1s6rrbj:onquizrequested__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1s6rrbj:onquizrequested__entry__method:1s6rrbj:onquizrequested__action_12_event_declaration_12__linear",
          "from": "method:1s6rrbj:onquizrequested__entry",
          "to": "method:1s6rrbj:onquizrequested__action_12_event_declaration_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1s6rrbj:onquizrequested__action_12_event_declaration_12__linear__implicit_return",
          "from": "method:1s6rrbj:onquizrequested__action_12_event_declaration_12__linear",
          "to": "method:1s6rrbj:onquizrequested__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method OnQuizRequested.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pa87x9:onquizupdated__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:1pa87x9:onquizupdated",
      "ownerSymbolName": "OnQuizUpdated",
      "entryNodeId": "method:1pa87x9:onquizupdated__entry",
      "exitNodeIds": [
        "method:1pa87x9:onquizupdated__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pa87x9:onquizupdated__entry",
          "kind": "entry",
          "label": "OnQuizUpdated entry",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Event raised when the quiz state is updated, consumers can subscribe to react to updates."
        },
        {
          "id": "method:1pa87x9:onquizupdated__action_13_event_declaration_13__linear",
          "kind": "statement",
          "label": "Quiz updated event",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Event signature expects an async handler with no arguments."
        },
        {
          "id": "method:1pa87x9:onquizupdated__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pa87x9:onquizupdated__entry__method:1pa87x9:onquizupdated__action_13_event_declaration_13__linear",
          "from": "method:1pa87x9:onquizupdated__entry",
          "to": "method:1pa87x9:onquizupdated__action_13_event_declaration_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pa87x9:onquizupdated__action_13_event_declaration_13__linear__implicit_return",
          "from": "method:1pa87x9:onquizupdated__action_13_event_declaration_13__linear",
          "to": "method:1pa87x9:onquizupdated__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method OnQuizUpdated.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:tuoc3y:requestquiz__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:tuoc3y:requestquiz",
      "ownerSymbolName": "RequestQuiz",
      "entryNodeId": "method:tuoc3y:requestquiz__entry",
      "exitNodeIds": [
        "method:tuoc3y:requestquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:tuoc3y:requestquiz__entry",
          "kind": "entry",
          "label": "RequestQuiz entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Async contract to request loading or activation of a quiz by block id."
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_async_contract_15__linear",
          "kind": "statement",
          "label": "Request quiz operation",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Interface method — implementation expected to trigger fetch/notifications and possibly raise OnQuizRequested."
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition",
          "kind": "condition",
          "label": "blockId required (string)",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Implementations should validate blockId before proceeding (implicit by signature)."
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__true",
          "kind": "branch-true",
          "label": "invalid",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "kind": "statement",
          "label": "merge",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:tuoc3y:requestquiz__entry__method:tuoc3y:requestquiz__action_15_async_contract_15__linear",
          "from": "method:tuoc3y:requestquiz__entry",
          "to": "method:tuoc3y:requestquiz__action_15_async_contract_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_async_contract_15__linear__method:tuoc3y:requestquiz__action_15_guard_clause_15__condition",
          "from": "method:tuoc3y:requestquiz__action_15_async_contract_15__linear",
          "to": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition__method:tuoc3y:requestquiz__action_15_guard_clause_15__true",
          "from": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition",
          "to": "method:tuoc3y:requestquiz__action_15_guard_clause_15__true",
          "kind": "condition-true",
          "label": "invalid",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition__method:tuoc3y:requestquiz__action_15_guard_clause_15__false",
          "from": "method:tuoc3y:requestquiz__action_15_guard_clause_15__condition",
          "to": "method:tuoc3y:requestquiz__action_15_guard_clause_15__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__true__method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "from": "method:tuoc3y:requestquiz__action_15_guard_clause_15__true",
          "to": "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__false__method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "from": "method:tuoc3y:requestquiz__action_15_guard_clause_15__false",
          "to": "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge__implicit_return",
          "from": "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge",
          "to": "method:tuoc3y:requestquiz__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:tuoc3y:requestquiz__action_15_guard_clause_15__merge"
      ],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 15,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method RequestQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:5hhpkw:setquiz__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:5hhpkw:setquiz",
      "ownerSymbolName": "SetQuiz",
      "entryNodeId": "method:5hhpkw:setquiz__entry",
      "exitNodeIds": [
        "method:5hhpkw:setquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:5hhpkw:setquiz__entry",
          "kind": "entry",
          "label": "SetQuiz entry",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Async contract to set or clear the current quiz and associated block id."
        },
        {
          "id": "method:5hhpkw:setquiz__action_16_async_contract_16__linear",
          "kind": "statement",
          "label": "Set or clear quiz state",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Implementations should update internal state and likely raise OnQuizUpdated."
        },
        {
          "id": "method:5hhpkw:setquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:5hhpkw:setquiz__entry__method:5hhpkw:setquiz__action_16_async_contract_16__linear",
          "from": "method:5hhpkw:setquiz__entry",
          "to": "method:5hhpkw:setquiz__action_16_async_contract_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:5hhpkw:setquiz__action_16_async_contract_16__linear__implicit_return",
          "from": "method:5hhpkw:setquiz__action_16_async_contract_16__linear",
          "to": "method:5hhpkw:setquiz__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 16,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method SetQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:pd4yo:sethydrating__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:pd4yo:sethydrating",
      "ownerSymbolName": "SetHydrating",
      "entryNodeId": "method:pd4yo:sethydrating__entry",
      "exitNodeIds": [
        "method:pd4yo:sethydrating__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:pd4yo:sethydrating__entry",
          "kind": "entry",
          "label": "SetHydrating entry",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Async contract to set the hydrating flag (state loading indicator)."
        },
        {
          "id": "method:pd4yo:sethydrating__action_17_async_contract_17__linear",
          "kind": "statement",
          "label": "Toggle hydration flag",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Implementations will mark hydrating state, possibly affecting consumers."
        },
        {
          "id": "method:pd4yo:sethydrating__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:pd4yo:sethydrating__entry__method:pd4yo:sethydrating__action_17_async_contract_17__linear",
          "from": "method:pd4yo:sethydrating__entry",
          "to": "method:pd4yo:sethydrating__action_17_async_contract_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pd4yo:sethydrating__action_17_async_contract_17__linear__implicit_return",
          "from": "method:pd4yo:sethydrating__action_17_async_contract_17__linear",
          "to": "method:pd4yo:sethydrating__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 17,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method SetHydrating.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:2bqrkc:markquizasseen__fragment",
      "ownerFileId": "file:savadk:iquizstateservice-cs",
      "ownerSymbolId": "method:2bqrkc:markquizasseen",
      "ownerSymbolName": "MarkQuizAsSeen",
      "entryNodeId": "method:2bqrkc:markquizasseen__entry",
      "exitNodeIds": [
        "method:2bqrkc:markquizasseen__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:2bqrkc:markquizasseen__entry",
          "kind": "entry",
          "label": "MarkQuizAsSeen entry",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.99,
          "detail": "Async contract to mark the current quiz as seen/read by the user."
        },
        {
          "id": "method:2bqrkc:markquizasseen__action_18_async_contract_18__linear",
          "kind": "statement",
          "label": "Mark quiz seen",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7,
          "detail": "Implementations should update 'HasNewQuiz' state and persist or notify as appropriate."
        },
        {
          "id": "method:2bqrkc:markquizasseen__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:2bqrkc:markquizasseen__entry__method:2bqrkc:markquizasseen__action_18_async_contract_18__linear",
          "from": "method:2bqrkc:markquizasseen__entry",
          "to": "method:2bqrkc:markquizasseen__action_18_async_contract_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2bqrkc:markquizasseen__action_18_async_contract_18__linear__implicit_return",
          "from": "method:2bqrkc:markquizasseen__action_18_async_contract_18__linear",
          "to": "method:2bqrkc:markquizasseen__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 18,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method MarkQuizAsSeen.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mhcg2e:onnodeselected__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:mhcg2e:onnodeselected",
      "ownerSymbolName": "OnNodeSelected",
      "entryNodeId": "method:mhcg2e:onnodeselected__entry",
      "exitNodeIds": [
        "method:mhcg2e:onnodeselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mhcg2e:onnodeselected__entry",
          "kind": "entry",
          "label": "OnNodeSelected entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Event fired when a node is selected; subscribers receive the selected nodeId."
        },
        {
          "id": "method:mhcg2e:onnodeselected__action_5_event_declaration_5__linear",
          "kind": "statement",
          "label": "Node selection event",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Event for subscribers to handle node selection notifications."
        },
        {
          "id": "method:mhcg2e:onnodeselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mhcg2e:onnodeselected__entry__method:mhcg2e:onnodeselected__action_5_event_declaration_5__linear",
          "from": "method:mhcg2e:onnodeselected__entry",
          "to": "method:mhcg2e:onnodeselected__action_5_event_declaration_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mhcg2e:onnodeselected__action_5_event_declaration_5__linear__implicit_return",
          "from": "method:mhcg2e:onnodeselected__action_5_event_declaration_5__linear",
          "to": "method:mhcg2e:onnodeselected__implicit_return",
          "kind": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 5,
        "end": 5
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method OnNodeSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ecn87d:onscrolltoblockrequested__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:ecn87d:onscrolltoblockrequested",
      "ownerSymbolName": "OnScrollToBlockRequested",
      "entryNodeId": "method:ecn87d:onscrolltoblockrequested__entry",
      "exitNodeIds": [
        "method:ecn87d:onscrolltoblockrequested__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ecn87d:onscrolltoblockrequested__entry",
          "kind": "entry",
          "label": "OnScrollToBlockRequested entry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Event fired to request scrolling to a specific blockId."
        },
        {
          "id": "method:ecn87d:onscrolltoblockrequested__action_6_event_declaration_6__linear",
          "kind": "statement",
          "label": "Scroll-to-block event",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Event for subscribers to scroll the UI to the given blockId."
        },
        {
          "id": "method:ecn87d:onscrolltoblockrequested__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ecn87d:onscrolltoblockrequested__entry__method:ecn87d:onscrolltoblockrequested__action_6_event_declaration_6__linear",
          "from": "method:ecn87d:onscrolltoblockrequested__entry",
          "to": "method:ecn87d:onscrolltoblockrequested__action_6_event_declaration_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ecn87d:onscrolltoblockrequested__action_6_event_declaration_6__linear__implicit_return",
          "from": "method:ecn87d:onscrolltoblockrequested__action_6_event_declaration_6__linear",
          "to": "method:ecn87d:onscrolltoblockrequested__implicit_return",
          "kind": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 6,
        "end": 6
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 6,
          "summary": "Control-flow fragment extracted for method OnScrollToBlockRequested.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:15b21oe:onhighlightblockrequested__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:15b21oe:onhighlightblockrequested",
      "ownerSymbolName": "OnHighlightBlockRequested",
      "entryNodeId": "method:15b21oe:onhighlightblockrequested__entry",
      "exitNodeIds": [
        "method:15b21oe:onhighlightblockrequested__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:15b21oe:onhighlightblockrequested__entry",
          "kind": "entry",
          "label": "OnHighlightBlockRequested entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Event fired to request highlighting of a specific blockId."
        },
        {
          "id": "method:15b21oe:onhighlightblockrequested__action_7_event_declaration_7__linear",
          "kind": "statement",
          "label": "Highlight-block event",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Event for subscribers to highlight the given blockId in the UI."
        },
        {
          "id": "method:15b21oe:onhighlightblockrequested__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:15b21oe:onhighlightblockrequested__entry__method:15b21oe:onhighlightblockrequested__action_7_event_declaration_7__linear",
          "from": "method:15b21oe:onhighlightblockrequested__entry",
          "to": "method:15b21oe:onhighlightblockrequested__action_7_event_declaration_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15b21oe:onhighlightblockrequested__action_7_event_declaration_7__linear__implicit_return",
          "from": "method:15b21oe:onhighlightblockrequested__action_7_event_declaration_7__linear",
          "to": "method:15b21oe:onhighlightblockrequested__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method OnHighlightBlockRequested.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:18zc3my:ontextselected__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:18zc3my:ontextselected",
      "ownerSymbolName": "OnTextSelected",
      "entryNodeId": "method:18zc3my:ontextselected__entry",
      "exitNodeIds": [
        "method:18zc3my:ontextselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:18zc3my:ontextselected__entry",
          "kind": "entry",
          "label": "OnTextSelected entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Event fired when text is selected; subscribers receive the text, blockId, and coordinates."
        },
        {
          "id": "method:18zc3my:ontextselected__action_8_event_declaration_8__linear",
          "kind": "statement",
          "label": "Text selection event",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Event for subscribers to react to text selection with coordinates and block context."
        },
        {
          "id": "method:18zc3my:ontextselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:18zc3my:ontextselected__entry__method:18zc3my:ontextselected__action_8_event_declaration_8__linear",
          "from": "method:18zc3my:ontextselected__entry",
          "to": "method:18zc3my:ontextselected__action_8_event_declaration_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18zc3my:ontextselected__action_8_event_declaration_8__linear__implicit_return",
          "from": "method:18zc3my:ontextselected__action_8_event_declaration_8__linear",
          "to": "method:18zc3my:ontextselected__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method OnTextSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1r1tcl2:notifynodeselected__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:1r1tcl2:notifynodeselected",
      "ownerSymbolName": "NotifyNodeSelected",
      "entryNodeId": "method:1r1tcl2:notifynodeselected__entry",
      "exitNodeIds": [
        "method:1r1tcl2:notifynodeselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1r1tcl2:notifynodeselected__entry",
          "kind": "entry",
          "label": "NotifyNodeSelected entry",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Declares an async method to notify that a node was selected (intended to trigger or forward OnNodeSelected)."
        },
        {
          "id": "method:1r1tcl2:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.83,
          "detail": "Task NotifyNodeSelected(string nodeId);"
        },
        {
          "id": "method:1r1tcl2:notifynodeselected__action_10_orchestration_declaration_10__linear",
          "kind": "statement",
          "label": "Notification method",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Interface method for implementors to notify subscribers about node selection."
        },
        {
          "id": "method:1r1tcl2:notifynodeselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1r1tcl2:notifynodeselected__entry__method:1r1tcl2:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "from": "method:1r1tcl2:notifynodeselected__entry",
          "to": "method:1r1tcl2:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:1r1tcl2:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear__method:1r1tcl2:notifynodeselected__action_10_orchestration_declaration_10__linear",
          "from": "method:1r1tcl2:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "to": "method:1r1tcl2:notifynodeselected__action_10_orchestration_declaration_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1r1tcl2:notifynodeselected__action_10_orchestration_declaration_10__linear__implicit_return",
          "from": "method:1r1tcl2:notifynodeselected__action_10_orchestration_declaration_10__linear",
          "to": "method:1r1tcl2:notifynodeselected__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method NotifyNodeSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:iyd7fv:requestscrolltoblock__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:iyd7fv:requestscrolltoblock",
      "ownerSymbolName": "RequestScrollToBlock",
      "entryNodeId": "method:iyd7fv:requestscrolltoblock__entry",
      "exitNodeIds": [
        "method:iyd7fv:requestscrolltoblock__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:iyd7fv:requestscrolltoblock__entry",
          "kind": "entry",
          "label": "RequestScrollToBlock entry",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Declares an async request to scroll the UI to a block (intended to trigger OnScrollToBlockRequested)."
        },
        {
          "id": "method:iyd7fv:requestscrolltoblock__action_11_orchestration_declaration_11__linear",
          "kind": "statement",
          "label": "Scroll request method",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Interface method for implementors to request UI scrolling to a block."
        },
        {
          "id": "method:iyd7fv:requestscrolltoblock__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:iyd7fv:requestscrolltoblock__entry__method:iyd7fv:requestscrolltoblock__action_11_orchestration_declaration_11__linear",
          "from": "method:iyd7fv:requestscrolltoblock__entry",
          "to": "method:iyd7fv:requestscrolltoblock__action_11_orchestration_declaration_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:iyd7fv:requestscrolltoblock__action_11_orchestration_declaration_11__linear__implicit_return",
          "from": "method:iyd7fv:requestscrolltoblock__action_11_orchestration_declaration_11__linear",
          "to": "method:iyd7fv:requestscrolltoblock__implicit_return",
          "kind": "return",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 11,
        "end": 11
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 11,
          "summary": "Control-flow fragment extracted for method RequestScrollToBlock.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lb2q26:requesthighlightblock__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:1lb2q26:requesthighlightblock",
      "ownerSymbolName": "RequestHighlightBlock",
      "entryNodeId": "method:1lb2q26:requesthighlightblock__entry",
      "exitNodeIds": [
        "method:1lb2q26:requesthighlightblock__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lb2q26:requesthighlightblock__entry",
          "kind": "entry",
          "label": "RequestHighlightBlock entry",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Declares an async request to highlight a block (intended to trigger OnHighlightBlockRequested)."
        },
        {
          "id": "method:1lb2q26:requesthighlightblock__action_12_orchestration_declaration_12__linear",
          "kind": "statement",
          "label": "Highlight request method",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Interface method for implementors to request UI highlighting of a block."
        },
        {
          "id": "method:1lb2q26:requesthighlightblock__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lb2q26:requesthighlightblock__entry__method:1lb2q26:requesthighlightblock__action_12_orchestration_declaration_12__linear",
          "from": "method:1lb2q26:requesthighlightblock__entry",
          "to": "method:1lb2q26:requesthighlightblock__action_12_orchestration_declaration_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lb2q26:requesthighlightblock__action_12_orchestration_declaration_12__linear__implicit_return",
          "from": "method:1lb2q26:requesthighlightblock__action_12_orchestration_declaration_12__linear",
          "to": "method:1lb2q26:requesthighlightblock__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method RequestHighlightBlock.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:p2mw02:notifytextselected__fragment",
      "ownerFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "ownerSymbolId": "method:p2mw02:notifytextselected",
      "ownerSymbolName": "NotifyTextSelected",
      "entryNodeId": "method:p2mw02:notifytextselected__entry",
      "exitNodeIds": [
        "method:p2mw02:notifytextselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:p2mw02:notifytextselected__entry",
          "kind": "entry",
          "label": "NotifyTextSelected entry",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Declares an async method to notify that text was selected, providing text, block context, and coordinates."
        },
        {
          "id": "method:p2mw02:notifytextselected__action_13_orchestration_declaration_13__linear",
          "kind": "statement",
          "label": "Text selection notification method",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "Interface method for implementors to notify subscribers about text selection."
        },
        {
          "id": "method:p2mw02:notifytextselected__action_13_notifytextselected_notification_13_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.83,
          "detail": "Task NotifyTextSelected(string text, string blockId, SelectionCoordinates coords);"
        },
        {
          "id": "method:p2mw02:notifytextselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:p2mw02:notifytextselected__entry__method:p2mw02:notifytextselected__action_13_orchestration_declaration_13__linear",
          "from": "method:p2mw02:notifytextselected__entry",
          "to": "method:p2mw02:notifytextselected__action_13_orchestration_declaration_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:p2mw02:notifytextselected__action_13_orchestration_declaration_13__linear__method:p2mw02:notifytextselected__action_13_notifytextselected_notification_13_0__linear",
          "from": "method:p2mw02:notifytextselected__action_13_orchestration_declaration_13__linear",
          "to": "method:p2mw02:notifytextselected__action_13_notifytextselected_notification_13_0__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:p2mw02:notifytextselected__action_13_notifytextselected_notification_13_0__linear__implicit_return",
          "from": "method:p2mw02:notifytextselected__action_13_notifytextselected_notification_13_0__linear",
          "to": "method:p2mw02:notifytextselected__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method NotifyTextSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:vlhvyc:currentebookid__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:vlhvyc:currentebookid",
      "ownerSymbolName": "CurrentEbookId",
      "entryNodeId": "method:vlhvyc:currentebookid__entry",
      "exitNodeIds": [
        "method:vlhvyc:currentebookid__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:vlhvyc:currentebookid__entry",
          "kind": "entry",
          "label": "CurrentEbookId entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Exposes the current ebook identifier."
        },
        {
          "id": "method:vlhvyc:currentebookid__action_5_property_get_5__linear",
          "kind": "statement",
          "label": "Expose current ebook id",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Getter for the active ebook GUID"
        },
        {
          "id": "method:vlhvyc:currentebookid__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:vlhvyc:currentebookid__entry__method:vlhvyc:currentebookid__action_5_property_get_5__linear",
          "from": "method:vlhvyc:currentebookid__entry",
          "to": "method:vlhvyc:currentebookid__action_5_property_get_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:vlhvyc:currentebookid__action_5_property_get_5__linear__implicit_return",
          "from": "method:vlhvyc:currentebookid__action_5_property_get_5__linear",
          "to": "method:vlhvyc:currentebookid__implicit_return",
          "kind": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 5,
        "end": 5
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method CurrentEbookId.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:xv5ikh:currentchapterindex__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:xv5ikh:currentchapterindex",
      "ownerSymbolName": "CurrentChapterIndex",
      "entryNodeId": "method:xv5ikh:currentchapterindex__entry",
      "exitNodeIds": [
        "method:xv5ikh:currentchapterindex__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:xv5ikh:currentchapterindex__entry",
          "kind": "entry",
          "label": "CurrentChapterIndex entry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Exposes the current chapter index within the active ebook."
        },
        {
          "id": "method:xv5ikh:currentchapterindex__action_6_property_get_6__linear",
          "kind": "statement",
          "label": "Expose current chapter index",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Getter for the active chapter index"
        },
        {
          "id": "method:xv5ikh:currentchapterindex__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:xv5ikh:currentchapterindex__entry__method:xv5ikh:currentchapterindex__action_6_property_get_6__linear",
          "from": "method:xv5ikh:currentchapterindex__entry",
          "to": "method:xv5ikh:currentchapterindex__action_6_property_get_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:xv5ikh:currentchapterindex__action_6_property_get_6__linear__implicit_return",
          "from": "method:xv5ikh:currentchapterindex__action_6_property_get_6__linear",
          "to": "method:xv5ikh:currentchapterindex__implicit_return",
          "kind": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 6,
        "end": 6
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 6,
          "summary": "Control-flow fragment extracted for method CurrentChapterIndex.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:l33fvs:totalchapters__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:l33fvs:totalchapters",
      "ownerSymbolName": "TotalChapters",
      "entryNodeId": "method:l33fvs:totalchapters__entry",
      "exitNodeIds": [
        "method:l33fvs:totalchapters__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:l33fvs:totalchapters__entry",
          "kind": "entry",
          "label": "TotalChapters entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Exposes the total number of chapters for the active ebook."
        },
        {
          "id": "method:l33fvs:totalchapters__action_7_property_get_7__linear",
          "kind": "statement",
          "label": "Expose total chapters",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Getter for total chapter count"
        },
        {
          "id": "method:l33fvs:totalchapters__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:l33fvs:totalchapters__entry__method:l33fvs:totalchapters__action_7_property_get_7__linear",
          "from": "method:l33fvs:totalchapters__entry",
          "to": "method:l33fvs:totalchapters__action_7_property_get_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l33fvs:totalchapters__action_7_property_get_7__linear__implicit_return",
          "from": "method:l33fvs:totalchapters__action_7_property_get_7__linear",
          "to": "method:l33fvs:totalchapters__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method TotalChapters.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:wxhxya:chaptertitle__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:wxhxya:chaptertitle",
      "ownerSymbolName": "ChapterTitle",
      "entryNodeId": "method:wxhxya:chaptertitle__entry",
      "exitNodeIds": [
        "method:wxhxya:chaptertitle__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:wxhxya:chaptertitle__entry",
          "kind": "entry",
          "label": "ChapterTitle entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Exposes the title of the current chapter."
        },
        {
          "id": "method:wxhxya:chaptertitle__action_8_property_get_8__linear",
          "kind": "statement",
          "label": "Expose chapter title",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Getter for current chapter title"
        },
        {
          "id": "method:wxhxya:chaptertitle__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:wxhxya:chaptertitle__entry__method:wxhxya:chaptertitle__action_8_property_get_8__linear",
          "from": "method:wxhxya:chaptertitle__entry",
          "to": "method:wxhxya:chaptertitle__action_8_property_get_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wxhxya:chaptertitle__action_8_property_get_8__linear__implicit_return",
          "from": "method:wxhxya:chaptertitle__action_8_property_get_8__linear",
          "to": "method:wxhxya:chaptertitle__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method ChapterTitle.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1d0xirt:onnavigationchanged__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:1d0xirt:onnavigationchanged",
      "ownerSymbolName": "OnNavigationChanged",
      "entryNodeId": "method:1d0xirt:onnavigationchanged__entry",
      "exitNodeIds": [
        "method:1d0xirt:onnavigationchanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1d0xirt:onnavigationchanged__entry",
          "kind": "entry",
          "label": "OnNavigationChanged entry",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Event invoked when navigation state changes to notify subscribers (async)."
        },
        {
          "id": "method:1d0xirt:onnavigationchanged__action_10_event_declaration_10__linear",
          "kind": "statement",
          "label": "Navigation changed event",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Consumers subscribe to be notified (Func<Task> signature)"
        },
        {
          "id": "method:1d0xirt:onnavigationchanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1d0xirt:onnavigationchanged__entry__method:1d0xirt:onnavigationchanged__action_10_event_declaration_10__linear",
          "from": "method:1d0xirt:onnavigationchanged__entry",
          "to": "method:1d0xirt:onnavigationchanged__action_10_event_declaration_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1d0xirt:onnavigationchanged__action_10_event_declaration_10__linear__implicit_return",
          "from": "method:1d0xirt:onnavigationchanged__action_10_event_declaration_10__linear",
          "to": "method:1d0xirt:onnavigationchanged__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method OnNavigationChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:orf66k:gotochapter__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:orf66k:gotochapter",
      "ownerSymbolName": "GoToChapter",
      "entryNodeId": "method:orf66k:gotochapter__entry",
      "exitNodeIds": [
        "method:orf66k:gotochapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:orf66k:gotochapter__entry",
          "kind": "entry",
          "label": "GoToChapter entry",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Navigate to a specific chapter index and notify interested subscribers."
        },
        {
          "id": "method:orf66k:gotochapter__action_12_orchestration_12__linear",
          "kind": "statement",
          "label": "Navigate to specified chapter",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Implementations will change chapter state and typically raise OnNavigationChanged"
        },
        {
          "id": "method:orf66k:gotochapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:orf66k:gotochapter__entry__method:orf66k:gotochapter__action_12_orchestration_12__linear",
          "from": "method:orf66k:gotochapter__entry",
          "to": "method:orf66k:gotochapter__action_12_orchestration_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:orf66k:gotochapter__action_12_orchestration_12__linear__implicit_return",
          "from": "method:orf66k:gotochapter__action_12_orchestration_12__linear",
          "to": "method:orf66k:gotochapter__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method GoToChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1dvbk1u:gotonextchapter__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:1dvbk1u:gotonextchapter",
      "ownerSymbolName": "GoToNextChapter",
      "entryNodeId": "method:1dvbk1u:gotonextchapter__entry",
      "exitNodeIds": [
        "method:1dvbk1u:gotonextchapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1dvbk1u:gotonextchapter__entry",
          "kind": "entry",
          "label": "GoToNextChapter entry",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Advance navigation to the next chapter and notify subscribers."
        },
        {
          "id": "method:1dvbk1u:gotonextchapter__action_13_orchestration_13__linear",
          "kind": "statement",
          "label": "Advance to next chapter",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Implementations increment chapter index and raise OnNavigationChanged"
        },
        {
          "id": "method:1dvbk1u:gotonextchapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1dvbk1u:gotonextchapter__entry__method:1dvbk1u:gotonextchapter__action_13_orchestration_13__linear",
          "from": "method:1dvbk1u:gotonextchapter__entry",
          "to": "method:1dvbk1u:gotonextchapter__action_13_orchestration_13__linear",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1dvbk1u:gotonextchapter__action_13_orchestration_13__linear__implicit_return",
          "from": "method:1dvbk1u:gotonextchapter__action_13_orchestration_13__linear",
          "to": "method:1dvbk1u:gotonextchapter__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 13,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 13,
          "summary": "Control-flow fragment extracted for method GoToNextChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:12odud7:gotopreviouschapter__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:12odud7:gotopreviouschapter",
      "ownerSymbolName": "GoToPreviousChapter",
      "entryNodeId": "method:12odud7:gotopreviouschapter__entry",
      "exitNodeIds": [
        "method:12odud7:gotopreviouschapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:12odud7:gotopreviouschapter__entry",
          "kind": "entry",
          "label": "GoToPreviousChapter entry",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Move navigation to the previous chapter and notify subscribers."
        },
        {
          "id": "method:12odud7:gotopreviouschapter__action_14_orchestration_14__linear",
          "kind": "statement",
          "label": "Move to previous chapter",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Implementations decrement chapter index and raise OnNavigationChanged"
        },
        {
          "id": "method:12odud7:gotopreviouschapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:12odud7:gotopreviouschapter__entry__method:12odud7:gotopreviouschapter__action_14_orchestration_14__linear",
          "from": "method:12odud7:gotopreviouschapter__entry",
          "to": "method:12odud7:gotopreviouschapter__action_14_orchestration_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:12odud7:gotopreviouschapter__action_14_orchestration_14__linear__implicit_return",
          "from": "method:12odud7:gotopreviouschapter__action_14_orchestration_14__linear",
          "to": "method:12odud7:gotopreviouschapter__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method GoToPreviousChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4hij31:updatemetadataasync__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:4hij31:updatemetadataasync",
      "ownerSymbolName": "UpdateMetadataAsync",
      "entryNodeId": "method:4hij31:updatemetadataasync__entry",
      "exitNodeIds": [
        "method:4hij31:updatemetadataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4hij31:updatemetadataasync__entry",
          "kind": "entry",
          "label": "UpdateMetadataAsync entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Update chapter-related metadata (current index, total chapters, title) asynchronously."
        },
        {
          "id": "method:4hij31:updatemetadataasync__action_15_state_update_15__linear",
          "kind": "statement",
          "label": "Update reader metadata",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Implementations persist/update metadata and may notify observers"
        },
        {
          "id": "method:4hij31:updatemetadataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4hij31:updatemetadataasync__entry__method:4hij31:updatemetadataasync__action_15_state_update_15__linear",
          "from": "method:4hij31:updatemetadataasync__entry",
          "to": "method:4hij31:updatemetadataasync__action_15_state_update_15__linear",
          "kind": "next",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4hij31:updatemetadataasync__action_15_state_update_15__linear__implicit_return",
          "from": "method:4hij31:updatemetadataasync__action_15_state_update_15__linear",
          "to": "method:4hij31:updatemetadataasync__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 15,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method UpdateMetadataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1la3caq:navigatetobook__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:1la3caq:navigatetobook",
      "ownerSymbolName": "NavigateToBook",
      "entryNodeId": "method:1la3caq:navigatetobook__entry",
      "exitNodeIds": [
        "method:1la3caq:navigatetobook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1la3caq:navigatetobook__entry",
          "kind": "entry",
          "label": "NavigateToBook entry",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Navigate to the reader UI for a specific book and record its ebook ID (triggers routing)."
        },
        {
          "id": "method:1la3caq:navigatetobook__action_20_navigation_20__linear",
          "kind": "statement",
          "label": "Route to reader for book",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Should perform browser routing/navigation and set CurrentEbookId"
        },
        {
          "id": "method:1la3caq:navigatetobook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1la3caq:navigatetobook__entry__method:1la3caq:navigatetobook__action_20_navigation_20__linear",
          "from": "method:1la3caq:navigatetobook__entry",
          "to": "method:1la3caq:navigatetobook__action_20_navigation_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1la3caq:navigatetobook__action_20_navigation_20__linear__implicit_return",
          "from": "method:1la3caq:navigatetobook__action_20_navigation_20__linear",
          "to": "method:1la3caq:navigatetobook__implicit_return",
          "kind": "return",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 20,
        "end": 20
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method NavigateToBook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4o7htd:setbook__fragment",
      "ownerFileId": "file:wgkae9:ireadernavigationservice-cs",
      "ownerSymbolId": "method:4o7htd:setbook",
      "ownerSymbolName": "SetBook",
      "entryNodeId": "method:4o7htd:setbook__entry",
      "exitNodeIds": [
        "method:4o7htd:setbook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4o7htd:setbook__entry",
          "kind": "entry",
          "label": "SetBook entry",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Set the active book context (ID and optional chapter) without performing browser routing."
        },
        {
          "id": "method:4o7htd:setbook__action_25_state_update_25__linear",
          "kind": "statement",
          "label": "Set active book context without routing",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Sets CurrentEbookId and CurrentChapterIndex but does not trigger navigation/routing"
        },
        {
          "id": "method:4o7htd:setbook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4o7htd:setbook__entry__method:4o7htd:setbook__action_25_state_update_25__linear",
          "from": "method:4o7htd:setbook__entry",
          "to": "method:4o7htd:setbook__action_25_state_update_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4o7htd:setbook__action_25_state_update_25__linear__implicit_return",
          "from": "method:4o7htd:setbook__action_25_state_update_25__linear",
          "to": "method:4o7htd:setbook__implicit_return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 25,
        "end": 25
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method SetBook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10p42fw:initializeasync__fragment",
      "ownerFileId": "file:l3weg3:isyncservice-cs",
      "ownerSymbolId": "method:10p42fw:initializeasync",
      "ownerSymbolName": "InitializeAsync",
      "entryNodeId": "method:10p42fw:initializeasync__entry",
      "exitNodeIds": [
        "method:10p42fw:initializeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10p42fw:initializeasync__entry",
          "kind": "entry",
          "label": "InitializeAsync entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.99,
          "detail": "Initializes the sync service (e.g., prepare connections or state) and returns success/failure as a FluentResults.Result."
        },
        {
          "id": "method:10p42fw:initializeasync__action_7_contract_7__linear",
          "kind": "statement",
          "label": "initialization entrypoint",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7,
          "detail": "Interface method representing an async initialize operation returning FluentResults.Result"
        },
        {
          "id": "method:10p42fw:initializeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10p42fw:initializeasync__entry__method:10p42fw:initializeasync__action_7_contract_7__linear",
          "from": "method:10p42fw:initializeasync__entry",
          "to": "method:10p42fw:initializeasync__action_7_contract_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10p42fw:initializeasync__action_7_contract_7__linear__implicit_return",
          "from": "method:10p42fw:initializeasync__action_7_contract_7__linear",
          "to": "method:10p42fw:initializeasync__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method InitializeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1op2ws5:updateprogressasync__fragment",
      "ownerFileId": "file:l3weg3:isyncservice-cs",
      "ownerSymbolId": "method:1op2ws5:updateprogressasync",
      "ownerSymbolName": "UpdateProgressAsync",
      "entryNodeId": "method:1op2ws5:updateprogressasync__entry",
      "exitNodeIds": [
        "method:1op2ws5:updateprogressasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1op2ws5:updateprogressasync__entry",
          "kind": "entry",
          "label": "UpdateProgressAsync entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.99,
          "detail": "Reports progress/state for a given ebook and page, returning a Result indicating success or failure."
        },
        {
          "id": "method:1op2ws5:updateprogressasync__action_8_contract_8__linear",
          "kind": "statement",
          "label": "progress reporting",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7,
          "detail": "Interface method used to send progress updates (likely triggers persistence or external notifications in implementations)"
        },
        {
          "id": "method:1op2ws5:updateprogressasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1op2ws5:updateprogressasync__entry__method:1op2ws5:updateprogressasync__action_8_contract_8__linear",
          "from": "method:1op2ws5:updateprogressasync__entry",
          "to": "method:1op2ws5:updateprogressasync__action_8_contract_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1op2ws5:updateprogressasync__action_8_contract_8__linear__implicit_return",
          "from": "method:1op2ws5:updateprogressasync__action_8_contract_8__linear",
          "to": "method:1op2ws5:updateprogressasync__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 8,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method UpdateProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:pqi00v:onprogressreceived__fragment",
      "ownerFileId": "file:l3weg3:isyncservice-cs",
      "ownerSymbolId": "method:pqi00v:onprogressreceived",
      "ownerSymbolName": "OnProgressReceived",
      "entryNodeId": "method:pqi00v:onprogressreceived__entry",
      "exitNodeIds": [
        "method:pqi00v:onprogressreceived__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:pqi00v:onprogressreceived__entry",
          "kind": "entry",
          "label": "OnProgressReceived entry",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.99,
          "detail": "Event invoked when progress is received; subscribers are called with a page id and timestamp."
        },
        {
          "id": "method:pqi00v:onprogressreceived__action_9_event_declaration_9__linear",
          "kind": "statement",
          "label": "progress event",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7,
          "detail": "Event delegate Func<string, DateTime, Task> declared for consumers to handle incoming progress notifications"
        },
        {
          "id": "method:pqi00v:onprogressreceived__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:pqi00v:onprogressreceived__entry__method:pqi00v:onprogressreceived__action_9_event_declaration_9__linear",
          "from": "method:pqi00v:onprogressreceived__entry",
          "to": "method:pqi00v:onprogressreceived__action_9_event_declaration_9__linear",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:pqi00v:onprogressreceived__action_9_event_declaration_9__linear__implicit_return",
          "from": "method:pqi00v:onprogressreceived__action_9_event_declaration_9__linear",
          "to": "method:pqi00v:onprogressreceived__implicit_return",
          "kind": "return",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 9
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method OnProgressReceived.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:163m6av:disposeasync__fragment",
      "ownerFileId": "file:l3weg3:isyncservice-cs",
      "ownerSymbolId": "method:163m6av:disposeasync",
      "ownerSymbolName": "DisposeAsync",
      "entryNodeId": "method:163m6av:disposeasync__entry",
      "exitNodeIds": [
        "method:163m6av:disposeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:163m6av:disposeasync__entry",
          "kind": "entry",
          "label": "DisposeAsync entry",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.99,
          "detail": "Asynchronously disposes or tears down the sync service resources."
        },
        {
          "id": "method:163m6av:disposeasync__action_10_contract_10__linear",
          "kind": "statement",
          "label": "dispose/teardown",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7,
          "detail": "Interface method for async disposal of resources held by an implementation"
        },
        {
          "id": "method:163m6av:disposeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:163m6av:disposeasync__entry__method:163m6av:disposeasync__action_10_contract_10__linear",
          "from": "method:163m6av:disposeasync__entry",
          "to": "method:163m6av:disposeasync__action_10_contract_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:163m6av:disposeasync__action_10_contract_10__linear__implicit_return",
          "from": "method:163m6av:disposeasync__action_10_contract_10__linear",
          "to": "method:163m6av:disposeasync__implicit_return",
          "kind": "return",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 10,
        "end": 10
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ISyncService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xxkfgr:islightmode__fragment",
      "ownerFileId": "file:vbuljf:ithemeservice-cs",
      "ownerSymbolId": "method:1xxkfgr:islightmode",
      "ownerSymbolName": "IsLightMode",
      "entryNodeId": "method:1xxkfgr:islightmode__entry",
      "exitNodeIds": [
        "method:1xxkfgr:islightmode__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1xxkfgr:islightmode__entry",
          "kind": "entry",
          "label": "IsLightMode entry",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.99,
          "detail": "Exposes whether the UI is currently in light mode."
        },
        {
          "id": "method:1xxkfgr:islightmode__action_5_property_5__linear",
          "kind": "statement",
          "label": "read-only theme mode",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.7,
          "detail": "bool getter indicating light/dark mode"
        },
        {
          "id": "method:1xxkfgr:islightmode__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1xxkfgr:islightmode__entry__method:1xxkfgr:islightmode__action_5_property_5__linear",
          "from": "method:1xxkfgr:islightmode__entry",
          "to": "method:1xxkfgr:islightmode__action_5_property_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xxkfgr:islightmode__action_5_property_5__linear__implicit_return",
          "from": "method:1xxkfgr:islightmode__action_5_property_5__linear",
          "to": "method:1xxkfgr:islightmode__implicit_return",
          "kind": "return",
          "line": 5,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 5,
        "end": 5
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 5,
          "summary": "Control-flow fragment extracted for method IsLightMode.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1fw96o1:onthemechanged__fragment",
      "ownerFileId": "file:vbuljf:ithemeservice-cs",
      "ownerSymbolId": "method:1fw96o1:onthemechanged",
      "ownerSymbolName": "OnThemeChanged",
      "entryNodeId": "method:1fw96o1:onthemechanged__entry",
      "exitNodeIds": [
        "method:1fw96o1:onthemechanged__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1fw96o1:onthemechanged__entry",
          "kind": "entry",
          "label": "OnThemeChanged entry",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.99,
          "detail": "Event invoked when the theme changes to notify subscribers."
        },
        {
          "id": "method:1fw96o1:onthemechanged__action_6_event_declaration_6__linear",
          "kind": "statement",
          "label": "Theme change notification",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.7,
          "detail": "Event of type Func<Task>? intended for subscribers to react to theme changes"
        },
        {
          "id": "method:1fw96o1:onthemechanged__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1fw96o1:onthemechanged__entry__method:1fw96o1:onthemechanged__action_6_event_declaration_6__linear",
          "from": "method:1fw96o1:onthemechanged__entry",
          "to": "method:1fw96o1:onthemechanged__action_6_event_declaration_6__linear",
          "kind": "next",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fw96o1:onthemechanged__action_6_event_declaration_6__linear__implicit_return",
          "from": "method:1fw96o1:onthemechanged__action_6_event_declaration_6__linear",
          "to": "method:1fw96o1:onthemechanged__implicit_return",
          "kind": "return",
          "line": 6,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 6,
        "end": 6
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 6,
          "summary": "Control-flow fragment extracted for method OnThemeChanged.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:dw3sqb:toggletheme__fragment",
      "ownerFileId": "file:vbuljf:ithemeservice-cs",
      "ownerSymbolId": "method:dw3sqb:toggletheme",
      "ownerSymbolName": "ToggleTheme",
      "entryNodeId": "method:dw3sqb:toggletheme__entry",
      "exitNodeIds": [
        "method:dw3sqb:toggletheme__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:dw3sqb:toggletheme__entry",
          "kind": "entry",
          "label": "ToggleTheme entry",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.99,
          "detail": "Toggles the current theme between light and dark modes (declaration only)."
        },
        {
          "id": "method:dw3sqb:toggletheme__body",
          "kind": "statement",
          "label": "Toggles the current theme between light and dark modes (declaration only).",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.75
        },
        {
          "id": "method:dw3sqb:toggletheme__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:dw3sqb:toggletheme__entry_body",
          "from": "method:dw3sqb:toggletheme__entry",
          "to": "method:dw3sqb:toggletheme__body",
          "kind": "next",
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 7,
          "confidence": 0.75
        },
        {
          "id": "method:dw3sqb:toggletheme__body__implicit_return",
          "from": "method:dw3sqb:toggletheme__body",
          "to": "method:dw3sqb:toggletheme__implicit_return",
          "kind": "return",
          "line": 7,
          "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 7,
        "end": 7
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/IThemeService.cs",
          "line": 7,
          "summary": "Control-flow fragment extracted for method ToggleTheme.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1b2nffa:knowledgecoordinator__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1b2nffa:knowledgecoordinator",
      "ownerSymbolName": "KnowledgeCoordinator",
      "entryNodeId": "method:1b2nffa:knowledgecoordinator__entry",
      "exitNodeIds": [
        "method:1b2nffa:knowledgecoordinator__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1b2nffa:knowledgecoordinator__entry",
          "kind": "entry",
          "label": "KnowledgeCoordinator entry",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Constructs the coordinator, stores injected services and subscribes to node-selection events from the interaction service."
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__action_34_assignment_34__linear",
          "kind": "statement",
          "label": "Store injected services",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "assign constructor args to private fields"
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__action_41_event_subscribe_41__linear",
          "kind": "statement",
          "label": "Subscribe to node selection",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "_interactionService.OnNodeSelected += HandleNodeSelected"
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call",
          "label": "IReaderInteractionService.OnNodeSelected += HandleNodeSelected",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "event handler HandleNodeSelected"
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1b2nffa:knowledgecoordinator__entry__method:1b2nffa:knowledgecoordinator__action_34_assignment_34__linear",
          "from": "method:1b2nffa:knowledgecoordinator__entry",
          "to": "method:1b2nffa:knowledgecoordinator__action_34_assignment_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__action_34_assignment_34__linear__method:1b2nffa:knowledgecoordinator__action_41_event_subscribe_41__linear",
          "from": "method:1b2nffa:knowledgecoordinator__action_34_assignment_34__linear",
          "to": "method:1b2nffa:knowledgecoordinator__action_41_event_subscribe_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__action_41_event_subscribe_41__linear__call_method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "from": "method:1b2nffa:knowledgecoordinator__action_41_event_subscribe_41__linear",
          "to": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call",
          "label": "event handler HandleNodeSelected",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected__implicit_return",
          "from": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "to": "method:1b2nffa:knowledgecoordinator__implicit_return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected__jump_unknown_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "fromNodeId": "method:1b2nffa:knowledgecoordinator__call_41_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IReaderInteractionService.OnNodeSelected += HandleNodeSelected",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IReaderInteractionService.OnNodeSelected += HandleNodeSelected in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 26,
        "end": 42
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 26,
          "summary": "Control-flow fragment extracted for method KnowledgeCoordinator.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:t1zuul:handlenodeselected__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:t1zuul:handlenodeselected",
      "ownerSymbolName": "HandleNodeSelected",
      "entryNodeId": "method:t1zuul:handlenodeselected__entry",
      "exitNodeIds": [
        "method:t1zuul:handlenodeselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:t1zuul:handlenodeselected__entry",
          "kind": "entry",
          "label": "HandleNodeSelected entry",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Handles a node selection event from UI: resolves a target block id (preferring connected 'current' block), then requests scrolling and highlighting of that block."
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData",
          "kind": "call",
          "label": "IKnowledgeGraphService.CurrentGraphData",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "none (property read)"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition",
          "kind": "condition",
          "label": "graph != null",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "if graph exists, search nodes and links"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__true",
          "kind": "branch-true",
          "label": "skip resolution",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__false",
          "kind": "branch-false",
          "label": "resolve connected block",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "kind": "statement",
          "label": "merge",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition",
          "kind": "condition",
          "label": "graph != null",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (graph != null)"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_51_handlenodeselected_repository_read_51_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "var selectedNode = graph.Nodes.FirstOrDefault(n => n.Id == nodeId);"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__condition",
          "kind": "condition",
          "label": "selectedNode.Group == \"concept\"",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "if a concept node, search links for a connected 'current' node and set targetBlockId"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__true",
          "kind": "branch-true",
          "label": "search connected links",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__false",
          "kind": "branch-false",
          "label": "use nodeId as block",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition",
          "kind": "condition",
          "label": "selectedNode != null && selectedNode.Group == \"concept\"",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (selectedNode != null && selectedNode.Group == \"concept\")"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_55_handlenodeselected_repository_read_55_3__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "var connectedLinks = graph.Links.Where(l => l.Source == nodeId || l.Target == nodeId).ToList();"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic_",
          "kind": "call",
          "label": "HandleNodeSelected (internal loop logic)",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "iterates graph.Links to find connected 'current' node"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "kind": "loop-entry",
          "label": "var link in connectedLinks",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "foreach (var link in connectedLinks)"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body",
          "kind": "loop-body",
          "label": "foreach (var link in connectedLinks)",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "kind": "loop-entry",
          "label": "Iterate links",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "foreach link in connectedLinks inspect other node"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_body",
          "kind": "loop-body",
          "label": "foreach link in connectedLinks inspect other node",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_59_handlenodeselected_repository_read_59_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "var otherNode = graph.Nodes.FirstOrDefault(n => n.Id == otherId);"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition",
          "kind": "condition",
          "label": "otherNode != null && otherNode.Group == \"current\"",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (otherNode != null && otherNode.Group == \"current\")"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(targetBlockId)",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(targetBlockId))"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_71_handlenodeselected_await_71_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _interactionService.RequestScrollToBlock(targetBlockId);"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_71_external_call_71__linear",
          "kind": "http-call",
          "label": "Scroll and highlight",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "calls interaction service to scroll and highlight target block"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock",
          "kind": "call",
          "label": "IReaderInteractionService.RequestScrollToBlock",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "targetBlockId"
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_72_handlenodeselected_await_72_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _interactionService.RequestHighlightBlock(targetBlockId);"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock",
          "kind": "call",
          "label": "IReaderInteractionService.RequestHighlightBlock",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "targetBlockId"
        },
        {
          "id": "method:t1zuul:handlenodeselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:t1zuul:handlenodeselected__entry__call_method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData",
          "from": "method:t1zuul:handlenodeselected__entry",
          "to": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData",
          "kind": "call",
          "label": "none (property read)",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData__method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition",
          "from": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData",
          "to": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition__method:t1zuul:handlenodeselected__action_49_guard_clause_49__true",
          "from": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition",
          "to": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__true",
          "kind": "condition-true",
          "label": "skip resolution",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition__method:t1zuul:handlenodeselected__action_49_guard_clause_49__false",
          "from": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__condition",
          "to": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__false",
          "kind": "condition-false",
          "label": "resolve connected block",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__true__method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "from": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__true",
          "to": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__false__method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "from": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__false",
          "to": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge__method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition",
          "from": "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
          "to": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition__method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__true",
          "from": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition",
          "to": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition__method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__false",
          "from": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__condition",
          "to": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__true__method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "from": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__true",
          "to": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__false__method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "from": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__false",
          "to": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge__method:t1zuul:handlenodeselected__action_51_handlenodeselected_repository_read_51_1__linear",
          "from": "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
          "to": "method:t1zuul:handlenodeselected__action_51_handlenodeselected_repository_read_51_1__linear",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_51_handlenodeselected_repository_read_51_1__linear__method:t1zuul:handlenodeselected__action_52_branch_52__condition",
          "from": "method:t1zuul:handlenodeselected__action_51_handlenodeselected_repository_read_51_1__linear",
          "to": "method:t1zuul:handlenodeselected__action_52_branch_52__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__condition__method:t1zuul:handlenodeselected__action_52_branch_52__true",
          "from": "method:t1zuul:handlenodeselected__action_52_branch_52__condition",
          "to": "method:t1zuul:handlenodeselected__action_52_branch_52__true",
          "kind": "condition-true",
          "label": "search connected links",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__condition__method:t1zuul:handlenodeselected__action_52_branch_52__false",
          "from": "method:t1zuul:handlenodeselected__action_52_branch_52__condition",
          "to": "method:t1zuul:handlenodeselected__action_52_branch_52__false",
          "kind": "condition-false",
          "label": "use nodeId as block",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__true__method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "from": "method:t1zuul:handlenodeselected__action_52_branch_52__true",
          "to": "method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__false__method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "from": "method:t1zuul:handlenodeselected__action_52_branch_52__false",
          "to": "method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_branch_52__merge__method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition",
          "from": "method:t1zuul:handlenodeselected__action_52_branch_52__merge",
          "to": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition__method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__true",
          "from": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition",
          "to": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition__method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__false",
          "from": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__condition",
          "to": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__true__method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "from": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__true",
          "to": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__false__method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "from": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__false",
          "to": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge__method:t1zuul:handlenodeselected__action_55_handlenodeselected_repository_read_55_3__linear",
          "from": "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
          "to": "method:t1zuul:handlenodeselected__action_55_handlenodeselected_repository_read_55_3__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_55_handlenodeselected_repository_read_55_3__linear__call_method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic_",
          "from": "method:t1zuul:handlenodeselected__action_55_handlenodeselected_repository_read_55_3__linear",
          "to": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic_",
          "kind": "call",
          "label": "iterates graph.Links to find connected 'current' node",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic___method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "from": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic_",
          "to": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry__method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body",
          "from": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "to": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body",
          "kind": "loop-body",
          "label": "var link in connectedLinks",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body__method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "from": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body",
          "to": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry__method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_exit",
          "from": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
          "to": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_exit__method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "from": "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_exit",
          "to": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry__method:t1zuul:handlenodeselected__action_56_loop_56__loop_body",
          "from": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "to": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_body__method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "from": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_body",
          "to": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry__method:t1zuul:handlenodeselected__action_56_loop_56__loop_exit",
          "from": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry",
          "to": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_exit__method:t1zuul:handlenodeselected__action_59_handlenodeselected_repository_read_59_5__linear",
          "from": "method:t1zuul:handlenodeselected__action_56_loop_56__loop_exit",
          "to": "method:t1zuul:handlenodeselected__action_59_handlenodeselected_repository_read_59_5__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_59_handlenodeselected_repository_read_59_5__linear__method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition",
          "from": "method:t1zuul:handlenodeselected__action_59_handlenodeselected_repository_read_59_5__linear",
          "to": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition__method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__true",
          "from": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition",
          "to": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition__method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__false",
          "from": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__condition",
          "to": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__true__method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "from": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__true",
          "to": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__false__method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "from": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__false",
          "to": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge__method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition",
          "from": "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
          "to": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition__method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__true",
          "from": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition",
          "to": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition__method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__false",
          "from": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__condition",
          "to": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__true__method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "from": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__true",
          "to": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__false__method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "from": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__false",
          "to": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge__method:t1zuul:handlenodeselected__action_71_handlenodeselected_await_71_8__await",
          "from": "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge",
          "to": "method:t1zuul:handlenodeselected__action_71_handlenodeselected_await_71_8__await",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_71_handlenodeselected_await_71_8__await__method:t1zuul:handlenodeselected__action_71_external_call_71__linear",
          "from": "method:t1zuul:handlenodeselected__action_71_handlenodeselected_await_71_8__await",
          "to": "method:t1zuul:handlenodeselected__action_71_external_call_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_71_external_call_71__linear__call_method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock",
          "from": "method:t1zuul:handlenodeselected__action_71_external_call_71__linear",
          "to": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock",
          "kind": "call",
          "label": "targetBlockId",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock__method:t1zuul:handlenodeselected__action_72_handlenodeselected_await_72_9__await",
          "from": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock",
          "to": "method:t1zuul:handlenodeselected__action_72_handlenodeselected_await_72_9__await",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:t1zuul:handlenodeselected__action_72_handlenodeselected_await_72_9__await__call_method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock",
          "from": "method:t1zuul:handlenodeselected__action_72_handlenodeselected_await_72_9__await",
          "to": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock",
          "kind": "call",
          "label": "targetBlockId",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock__implicit_return",
          "from": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock",
          "to": "method:t1zuul:handlenodeselected__implicit_return",
          "kind": "return",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData__jump_unknown_IKnowledgeGraphService_CurrentGraphData",
          "fromNodeId": "method:t1zuul:handlenodeselected__call_48_IKnowledgeGraphService_CurrentGraphData",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.CurrentGraphData",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.CurrentGraphData in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic___jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_HandleNodeSelected_internal_loop_logic_",
          "fromNodeId": "method:t1zuul:handlenodeselected__call_55_HandleNodeSelected_internal_loop_logic_",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "HandleNodeSelected (internal loop logic)",
          "line": 55,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target HandleNodeSelected (internal loop logic) in NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock__jump_unknown_IReaderInteractionService_RequestScrollToBlock",
          "fromNodeId": "method:t1zuul:handlenodeselected__call_71_IReaderInteractionService_RequestScrollToBlock",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IReaderInteractionService.RequestScrollToBlock",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IReaderInteractionService.RequestScrollToBlock in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock__jump_unknown_IReaderInteractionService_RequestHighlightBlock",
          "fromNodeId": "method:t1zuul:handlenodeselected__call_72_IReaderInteractionService_RequestHighlightBlock",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IReaderInteractionService.RequestHighlightBlock",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IReaderInteractionService.RequestHighlightBlock in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_body__method:t1zuul:handlenodeselected__action_56_handlenodeselected_loop_56_4__loop_entry",
        "method:t1zuul:handlenodeselected__action_56_loop_56__loop_body__method:t1zuul:handlenodeselected__action_56_loop_56__loop_entry"
      ],
      "mergeNodeIds": [
        "method:t1zuul:handlenodeselected__action_49_guard_clause_49__merge",
        "method:t1zuul:handlenodeselected__action_49_handlenodeselected_branch_49_0__merge",
        "method:t1zuul:handlenodeselected__action_52_branch_52__merge",
        "method:t1zuul:handlenodeselected__action_52_handlenodeselected_branch_52_2__merge",
        "method:t1zuul:handlenodeselected__action_60_handlenodeselected_branch_60_6__merge",
        "method:t1zuul:handlenodeselected__action_69_handlenodeselected_branch_69_7__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 44,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 44,
          "summary": "Control-flow fragment extracted for method HandleNodeSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1x9gjeq:processfullpageasync__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1x9gjeq:processfullpageasync",
      "ownerSymbolName": "ProcessFullPageAsync",
      "entryNodeId": "method:1x9gjeq:processfullpageasync__entry",
      "exitNodeIds": [
        "method:1x9gjeq:processfullpageasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1x9gjeq:processfullpageasync__entry",
          "kind": "entry",
          "label": "ProcessFullPageAsync entry",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Given full page content, clears and sets graph loading, requests graph data from knowledge service, updates the graph, invokes OnGraphUpdated event, and triggers success vibration; errors are logged."
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(fullContent)",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "returns immediately if no content"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__true",
          "kind": "branch-true",
          "label": "return",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "kind": "statement",
          "label": "merge",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrWhiteSpace(fullContent)",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrWhiteSpace(fullContent)) return;"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_80_log_80__linear",
          "kind": "statement",
          "label": "Start generating graph",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "LogGeneratingGraph(tenantId)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph",
          "kind": "call",
          "label": "LogGeneratingGraph",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "tenantId"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_82_processfullpageasync_await_82_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _graphService.Clear();"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_82_state_change_82__linear",
          "kind": "statement",
          "label": "Graph service reset & loading",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "Clear() and SetLoading(true) on graph service"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear",
          "kind": "call",
          "label": "IKnowledgeGraphService.Clear",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_83_processfullpageasync_await_83_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _graphService.SetLoading(true);"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading",
          "kind": "call",
          "label": "IKnowledgeGraphService.SetLoading",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "true"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_85_try_catch_85__linear",
          "kind": "statement",
          "label": "Exception handling",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "catch exceptions and log via LogGraphError"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_85_processfullpageasync_try_85_3__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_87_processfullpageasync_await_87_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "var result = await _knowledgeService.GetGraphDataAsync(fullContent, tenantId);"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_87_external_call_87__linear",
          "kind": "http-call",
          "label": "Request graph data",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetGraphDataAsync",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "fullContent, tenantId"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition",
          "kind": "condition",
          "label": "result.IsSuccess && packet.Graph != null",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "on success update graph, invoke event, vibrate"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__true",
          "kind": "branch-true",
          "label": "update graph & notify",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "kind": "statement",
          "label": "merge",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition",
          "kind": "condition",
          "label": "packet.Graph != null",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (packet.Graph != null)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_93_processfullpageasync_await_93_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _graphService.UpdateGraph(packet.Graph);"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph",
          "kind": "call",
          "label": "IKnowledgeGraphService.UpdateGraph",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "packet.Graph"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_event_invoke_94__linear",
          "kind": "statement",
          "label": "Raise OnGraphUpdated",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "await OnGraphUpdated.Invoke(packet.Graph) if subscribers exist"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition",
          "kind": "condition",
          "label": "OnGraphUpdated != null",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (OnGraphUpdated != null)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__true",
          "kind": "branch-true",
          "label": "true",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__false",
          "kind": "branch-false",
          "label": "false",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "kind": "statement",
          "label": "merge",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_95_processfullpageasync_await_95_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await OnGraphUpdated.Invoke(packet.Graph);"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke",
          "kind": "call",
          "label": "OnGraphUpdated.Invoke",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "packet.Graph"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_96_processfullpageasync_await_96_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _platformService.VibrateSuccessAsync();"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "IPlatformService.VibrateSuccessAsync",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_100_processfullpageasync_catch_100_11__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError",
          "kind": "call",
          "label": "LogGraphError",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "ex, tenantId"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1x9gjeq:processfullpageasync__entry__method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition",
          "from": "method:1x9gjeq:processfullpageasync__entry",
          "to": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition__method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__true",
          "from": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__true",
          "kind": "condition-true",
          "label": "return",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition__method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__false",
          "from": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__true__method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__true",
          "to": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__false__method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__false",
          "to": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge__method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition",
          "from": "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition__method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__true",
          "from": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition__method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__false",
          "from": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__true__method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__true",
          "to": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__false__method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__false",
          "to": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge__method:1x9gjeq:processfullpageasync__action_80_log_80__linear",
          "from": "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_80_log_80__linear",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_80_log_80__linear__call_method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph",
          "from": "method:1x9gjeq:processfullpageasync__action_80_log_80__linear",
          "to": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph",
          "kind": "call",
          "label": "tenantId",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph__method:1x9gjeq:processfullpageasync__action_82_processfullpageasync_await_82_1__await",
          "from": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph",
          "to": "method:1x9gjeq:processfullpageasync__action_82_processfullpageasync_await_82_1__await",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_82_processfullpageasync_await_82_1__await__method:1x9gjeq:processfullpageasync__action_82_state_change_82__linear",
          "from": "method:1x9gjeq:processfullpageasync__action_82_processfullpageasync_await_82_1__await",
          "to": "method:1x9gjeq:processfullpageasync__action_82_state_change_82__linear",
          "kind": "next",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_82_state_change_82__linear__call_method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear",
          "from": "method:1x9gjeq:processfullpageasync__action_82_state_change_82__linear",
          "to": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear",
          "kind": "call",
          "label": "none",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear__method:1x9gjeq:processfullpageasync__action_83_processfullpageasync_await_83_2__await",
          "from": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear",
          "to": "method:1x9gjeq:processfullpageasync__action_83_processfullpageasync_await_83_2__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_83_processfullpageasync_await_83_2__await__call_method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading",
          "from": "method:1x9gjeq:processfullpageasync__action_83_processfullpageasync_await_83_2__await",
          "to": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading",
          "kind": "call",
          "label": "true",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading__method:1x9gjeq:processfullpageasync__action_85_try_catch_85__linear",
          "from": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading",
          "to": "method:1x9gjeq:processfullpageasync__action_85_try_catch_85__linear",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_85_try_catch_85__linear__method:1x9gjeq:processfullpageasync__action_85_processfullpageasync_try_85_3__try",
          "from": "method:1x9gjeq:processfullpageasync__action_85_try_catch_85__linear",
          "to": "method:1x9gjeq:processfullpageasync__action_85_processfullpageasync_try_85_3__try",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_85_processfullpageasync_try_85_3__try__method:1x9gjeq:processfullpageasync__action_87_processfullpageasync_await_87_4__await",
          "from": "method:1x9gjeq:processfullpageasync__action_85_processfullpageasync_try_85_3__try",
          "to": "method:1x9gjeq:processfullpageasync__action_87_processfullpageasync_await_87_4__await",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_87_processfullpageasync_await_87_4__await__method:1x9gjeq:processfullpageasync__action_87_external_call_87__linear",
          "from": "method:1x9gjeq:processfullpageasync__action_87_processfullpageasync_await_87_4__await",
          "to": "method:1x9gjeq:processfullpageasync__action_87_external_call_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_87_external_call_87__linear__call_method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync",
          "from": "method:1x9gjeq:processfullpageasync__action_87_external_call_87__linear",
          "to": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync",
          "kind": "call",
          "label": "fullContent, tenantId",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync__method:1x9gjeq:processfullpageasync__action_88_branch_88__condition",
          "from": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync",
          "to": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition__method:1x9gjeq:processfullpageasync__action_88_branch_88__true",
          "from": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_88_branch_88__true",
          "kind": "condition-true",
          "label": "update graph & notify",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition__method:1x9gjeq:processfullpageasync__action_88_branch_88__false",
          "from": "method:1x9gjeq:processfullpageasync__action_88_branch_88__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_88_branch_88__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__true__method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_88_branch_88__true",
          "to": "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__false__method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_88_branch_88__false",
          "to": "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge__method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition",
          "from": "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition__method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__true",
          "from": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition__method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__false",
          "from": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__true__method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__true",
          "to": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__false__method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__false",
          "to": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge__method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition",
          "from": "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition__method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__true",
          "from": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition__method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__false",
          "from": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__true__method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__true",
          "to": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__false__method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__false",
          "to": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge__method:1x9gjeq:processfullpageasync__action_93_processfullpageasync_await_93_7__await",
          "from": "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_93_processfullpageasync_await_93_7__await",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_93_processfullpageasync_await_93_7__await__call_method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph",
          "from": "method:1x9gjeq:processfullpageasync__action_93_processfullpageasync_await_93_7__await",
          "to": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph",
          "kind": "call",
          "label": "packet.Graph",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph__method:1x9gjeq:processfullpageasync__action_94_event_invoke_94__linear",
          "from": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph",
          "to": "method:1x9gjeq:processfullpageasync__action_94_event_invoke_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_event_invoke_94__linear__method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition",
          "from": "method:1x9gjeq:processfullpageasync__action_94_event_invoke_94__linear",
          "to": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition__method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__true",
          "from": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__true",
          "kind": "condition-true",
          "label": "true",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition__method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__false",
          "from": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__condition",
          "to": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__false",
          "kind": "condition-false",
          "label": "false",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__true__method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__true",
          "to": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__false__method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "from": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__false",
          "to": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge__method:1x9gjeq:processfullpageasync__action_95_processfullpageasync_await_95_9__await",
          "from": "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge",
          "to": "method:1x9gjeq:processfullpageasync__action_95_processfullpageasync_await_95_9__await",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_95_processfullpageasync_await_95_9__await__call_method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke",
          "from": "method:1x9gjeq:processfullpageasync__action_95_processfullpageasync_await_95_9__await",
          "to": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke",
          "kind": "call",
          "label": "packet.Graph",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke__method:1x9gjeq:processfullpageasync__action_96_processfullpageasync_await_96_10__await",
          "from": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke",
          "to": "method:1x9gjeq:processfullpageasync__action_96_processfullpageasync_await_96_10__await",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_96_processfullpageasync_await_96_10__await__call_method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync",
          "from": "method:1x9gjeq:processfullpageasync__action_96_processfullpageasync_await_96_10__await",
          "to": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "none",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync__method:1x9gjeq:processfullpageasync__action_100_processfullpageasync_catch_100_11__catch",
          "from": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync",
          "to": "method:1x9gjeq:processfullpageasync__action_100_processfullpageasync_catch_100_11__catch",
          "kind": "exception",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__action_100_processfullpageasync_catch_100_11__catch__call_method:1x9gjeq:processfullpageasync__call_102_LogGraphError",
          "from": "method:1x9gjeq:processfullpageasync__action_100_processfullpageasync_catch_100_11__catch",
          "to": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError",
          "kind": "call",
          "label": "ex, tenantId",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError__implicit_return",
          "from": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError",
          "to": "method:1x9gjeq:processfullpageasync__implicit_return",
          "kind": "return",
          "line": 104,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_LogGeneratingGraph",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_80_LogGeneratingGraph",
          "kind": "call-target",
          "targetNodeId": "method:1ip44st:loggeneratinggraph",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "LogGeneratingGraph",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target LogGeneratingGraph resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear__jump_unknown_IKnowledgeGraphService_Clear",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_82_IKnowledgeGraphService_Clear",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.Clear",
          "line": 82,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.Clear in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading__jump_unknown_IKnowledgeGraphService_SetLoading",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_83_IKnowledgeGraphService_SetLoading",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.SetLoading",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.SetLoading in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync__jump_unknown_IKnowledgeService_GetGraphDataAsync",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_87_IKnowledgeService_GetGraphDataAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeService.GetGraphDataAsync",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeService.GetGraphDataAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph__jump_unknown_IKnowledgeGraphService_UpdateGraph",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_93_IKnowledgeGraphService_UpdateGraph",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.UpdateGraph",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.UpdateGraph in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_OnGraphUpdated_Invoke",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_95_OnGraphUpdated_Invoke",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "OnGraphUpdated.Invoke",
          "line": 95,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target OnGraphUpdated.Invoke in NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync__jump_unknown_IPlatformService_VibrateSuccessAsync",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_96_IPlatformService_VibrateSuccessAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IPlatformService.VibrateSuccessAsync",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IPlatformService.VibrateSuccessAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_LogGraphError",
          "fromNodeId": "method:1x9gjeq:processfullpageasync__call_102_LogGraphError",
          "kind": "call-target",
          "targetNodeId": "method:1nzct8x:loggrapherror",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "LogGraphError",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target LogGraphError resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1x9gjeq:processfullpageasync__action_78_guard_clause_78__merge",
        "method:1x9gjeq:processfullpageasync__action_78_processfullpageasync_guard_clause_78_0__merge",
        "method:1x9gjeq:processfullpageasync__action_88_branch_88__merge",
        "method:1x9gjeq:processfullpageasync__action_88_processfullpageasync_branch_88_5__merge",
        "method:1x9gjeq:processfullpageasync__action_91_processfullpageasync_branch_91_6__merge",
        "method:1x9gjeq:processfullpageasync__action_94_processfullpageasync_branch_94_8__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 76,
        "end": 104
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 76,
          "summary": "Control-flow fragment extracted for method ProcessFullPageAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pdmx9l:onblockreachedasync__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1pdmx9l:onblockreachedasync",
      "ownerSymbolName": "OnBlockReachedAsync",
      "entryNodeId": "method:1pdmx9l:onblockreachedasync__entry",
      "exitNodeIds": [
        "method:1pdmx9l:onblockreachedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1pdmx9l:onblockreachedasync__entry",
          "kind": "entry",
          "label": "OnBlockReachedAsync entry",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Updates the graph service active node when a content block is reached (UI navigation), intentionally does not trigger highlight."
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_108_comment_108__linear",
          "kind": "statement",
          "label": "Do not highlight here",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "Comment indicates intentional omission of highlight"
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_109_onblockreachedasync_await_109_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _graphService.SetActiveNode(blockId);"
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_109_state_change_109__linear",
          "kind": "statement",
          "label": "Set active node",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "Calls graphService.SetActiveNode(blockId)"
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode",
          "kind": "call",
          "label": "IKnowledgeGraphService.SetActiveNode",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "blockId"
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1pdmx9l:onblockreachedasync__entry__method:1pdmx9l:onblockreachedasync__action_108_comment_108__linear",
          "from": "method:1pdmx9l:onblockreachedasync__entry",
          "to": "method:1pdmx9l:onblockreachedasync__action_108_comment_108__linear",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_108_comment_108__linear__method:1pdmx9l:onblockreachedasync__action_109_onblockreachedasync_await_109_0__await",
          "from": "method:1pdmx9l:onblockreachedasync__action_108_comment_108__linear",
          "to": "method:1pdmx9l:onblockreachedasync__action_109_onblockreachedasync_await_109_0__await",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_109_onblockreachedasync_await_109_0__await__method:1pdmx9l:onblockreachedasync__action_109_state_change_109__linear",
          "from": "method:1pdmx9l:onblockreachedasync__action_109_onblockreachedasync_await_109_0__await",
          "to": "method:1pdmx9l:onblockreachedasync__action_109_state_change_109__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__action_109_state_change_109__linear__call_method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode",
          "from": "method:1pdmx9l:onblockreachedasync__action_109_state_change_109__linear",
          "to": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode",
          "kind": "call",
          "label": "blockId",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode__implicit_return",
          "from": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode",
          "to": "method:1pdmx9l:onblockreachedasync__implicit_return",
          "kind": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode__jump_unknown_IKnowledgeGraphService_SetActiveNode",
          "fromNodeId": "method:1pdmx9l:onblockreachedasync__call_109_IKnowledgeGraphService_SetActiveNode",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.SetActiveNode",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.SetActiveNode in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7999999999999999,
      "lineSpan": {
        "start": 106,
        "end": 110
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 106,
          "summary": "Control-flow fragment extracted for method OnBlockReachedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:2y4xzb:requestsummaryandquizasync__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:2y4xzb:requestsummaryandquizasync",
      "ownerSymbolName": "RequestSummaryAndQuizAsync",
      "entryNodeId": "method:2y4xzb:requestsummaryandquizasync__entry",
      "exitNodeIds": [
        "method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return",
        "method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return",
        "method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return",
        "method:2y4xzb:requestsummaryandquizasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__entry",
          "kind": "entry",
          "label": "RequestSummaryAndQuizAsync entry",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Orchestrates requesting a summary and quiz from the knowledge service, maps remote quiz DTOs into local QuizDto/QuizQuestionDto, sets quiz state, triggers vibration on success, and handles errors with logging and Result.Fail."
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_114_requestsummaryandquizasync_await_114_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _quizService.SetHydrating(true);"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_114_state_change_114__linear",
          "kind": "statement",
          "label": "Mark quiz hydrating",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "SetHydrating(true) at start, SetHydrating(false) in finally"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating",
          "kind": "call",
          "label": "IQuizStateService.SetHydrating",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "true/false"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_115_log_115__linear",
          "kind": "statement",
          "label": "Requesting summary & quiz",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "LogRequestingSummary(tenantId)"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary",
          "kind": "call",
          "label": "LogRequestingSummary",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "tenantId"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_116_try_catch_finally_116__linear",
          "kind": "statement",
          "label": "Error handling and cleanup",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "catch logs error and returns Result.Fail; finally resets hydrating flag"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_116_requestsummaryandquizasync_try_116_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_118_requestsummaryandquizasync_await_118_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "var result = await _knowledgeService.GetSummaryAndQuizAsync(content, tenantId);"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_118_external_call_118__linear",
          "kind": "http-call",
          "label": "Request summary+quiz",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "await knowledgeService.GetSummaryAndQuizAsync"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetSummaryAndQuizAsync",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "content, tenantId"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "map packet.Quizzes to QuizQuestionDto list and set quiz state"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__true",
          "kind": "branch-true",
          "label": "map & set quiz",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__false",
          "kind": "branch-false",
          "label": "log warning & fail",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "kind": "statement",
          "label": "merge",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition",
          "kind": "condition",
          "label": "result.IsSuccess",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78,
          "detail": "if (result.IsSuccess)"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_122_mapping_122__linear",
          "kind": "statement",
          "label": "Map remote quizzes to UI DTOs",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "Select q => new QuizQuestionDto(...)"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_123_requestsummaryandquizasync_mapping_123_4__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.74,
          "detail": ".Select(q => new QuizQuestionDto(q.Question, q.Options, q.CorrectIndex))"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor",
          "kind": "call",
          "label": "QuizQuestionDto..ctor",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "q.Question, q.Options, q.CorrectIndex"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_126_requestsummaryandquizasync_await_126_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _quizService.SetQuiz(null, new QuizDto(quizQuestions));"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz",
          "kind": "call",
          "label": "IQuizStateService.SetQuiz",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "null, new QuizDto(quizQuestions)"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_127_requestsummaryandquizasync_await_127_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _platformService.VibrateSuccessAsync();"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "IPlatformService.VibrateSuccessAsync",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(packet);"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning",
          "kind": "call",
          "label": "LogSummaryWarning",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "tenantId"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(result.Errors);"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_134_requestsummaryandquizasync_catch_134_9__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError",
          "kind": "call",
          "label": "LogSummaryError",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "ex, tenantId"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return",
          "kind": "return",
          "label": "Returns result",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error(\"Error requesting summary and quiz\").CausedBy(ex));"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_139_requestsummaryandquizasync_finally_139_11__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_141_requestsummaryandquizasync_await_141_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _quizService.SetHydrating(false);"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__entry__method:2y4xzb:requestsummaryandquizasync__action_114_requestsummaryandquizasync_await_114_0__await",
          "from": "method:2y4xzb:requestsummaryandquizasync__entry",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_114_requestsummaryandquizasync_await_114_0__await",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_114_requestsummaryandquizasync_await_114_0__await__method:2y4xzb:requestsummaryandquizasync__action_114_state_change_114__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_114_requestsummaryandquizasync_await_114_0__await",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_114_state_change_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_114_state_change_114__linear__call_method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_114_state_change_114__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating",
          "kind": "call",
          "label": "true/false",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating__method:2y4xzb:requestsummaryandquizasync__action_115_log_115__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_115_log_115__linear",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_115_log_115__linear__call_method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_115_log_115__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary",
          "kind": "call",
          "label": "tenantId",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary__method:2y4xzb:requestsummaryandquizasync__action_116_try_catch_finally_116__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_116_try_catch_finally_116__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_116_try_catch_finally_116__linear__method:2y4xzb:requestsummaryandquizasync__action_116_requestsummaryandquizasync_try_116_1__try",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_116_try_catch_finally_116__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_116_requestsummaryandquizasync_try_116_1__try",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_116_requestsummaryandquizasync_try_116_1__try__method:2y4xzb:requestsummaryandquizasync__action_118_requestsummaryandquizasync_await_118_2__await",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_116_requestsummaryandquizasync_try_116_1__try",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_118_requestsummaryandquizasync_await_118_2__await",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_118_requestsummaryandquizasync_await_118_2__await__method:2y4xzb:requestsummaryandquizasync__action_118_external_call_118__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_118_requestsummaryandquizasync_await_118_2__await",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_118_external_call_118__linear",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_118_external_call_118__linear__call_method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_118_external_call_118__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call",
          "label": "content, tenantId",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync__method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition__method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__true",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__true",
          "kind": "condition-true",
          "label": "map & set quiz",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition__method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__false",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__condition",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__false",
          "kind": "condition-false",
          "label": "log warning & fail",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__true__method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__true",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__false__method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__false",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge__method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition__method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__true",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition__method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__false",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__condition",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__true__method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__true",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__false__method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__false",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.78
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge__method:2y4xzb:requestsummaryandquizasync__action_122_mapping_122__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_122_mapping_122__linear",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_122_mapping_122__linear__method:2y4xzb:requestsummaryandquizasync__action_123_requestsummaryandquizasync_mapping_123_4__linear",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_122_mapping_122__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_123_requestsummaryandquizasync_mapping_123_4__linear",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.74
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_123_requestsummaryandquizasync_mapping_123_4__linear__call_method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_123_requestsummaryandquizasync_mapping_123_4__linear",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor",
          "kind": "call",
          "label": "q.Question, q.Options, q.CorrectIndex",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor__method:2y4xzb:requestsummaryandquizasync__action_126_requestsummaryandquizasync_await_126_5__await",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_126_requestsummaryandquizasync_await_126_5__await",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_126_requestsummaryandquizasync_await_126_5__await__call_method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_126_requestsummaryandquizasync_await_126_5__await",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz",
          "kind": "call",
          "label": "null, new QuizDto(quizQuestions)",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz__method:2y4xzb:requestsummaryandquizasync__action_127_requestsummaryandquizasync_await_127_6__await",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_127_requestsummaryandquizasync_await_127_6__await",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_127_requestsummaryandquizasync_await_127_6__await__call_method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_127_requestsummaryandquizasync_await_127_6__await",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync",
          "kind": "call",
          "label": "none",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync__method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return",
          "kind": "return",
          "line": 128,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return__call_method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_128_requestsummaryandquizasync_return_128_7__return",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning",
          "kind": "call",
          "label": "tenantId",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning__method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return",
          "kind": "return",
          "line": 132,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return__method:2y4xzb:requestsummaryandquizasync__action_134_requestsummaryandquizasync_catch_134_9__catch",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_132_requestsummaryandquizasync_return_132_8__return",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_134_requestsummaryandquizasync_catch_134_9__catch",
          "kind": "exception",
          "line": 134,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.86
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_134_requestsummaryandquizasync_catch_134_9__catch__call_method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_134_requestsummaryandquizasync_catch_134_9__catch",
          "to": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError",
          "kind": "call",
          "label": "ex, tenantId",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError__method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return",
          "from": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return",
          "kind": "return",
          "line": 137,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return__method:2y4xzb:requestsummaryandquizasync__action_139_requestsummaryandquizasync_finally_139_11__finally",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_137_requestsummaryandquizasync_return_137_10__return",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_139_requestsummaryandquizasync_finally_139_11__finally",
          "kind": "next",
          "line": 139,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.84
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_139_requestsummaryandquizasync_finally_139_11__finally__method:2y4xzb:requestsummaryandquizasync__action_141_requestsummaryandquizasync_await_141_12__await",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_139_requestsummaryandquizasync_finally_139_11__finally",
          "to": "method:2y4xzb:requestsummaryandquizasync__action_141_requestsummaryandquizasync_await_141_12__await",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__action_141_requestsummaryandquizasync_await_141_12__await__implicit_return",
          "from": "method:2y4xzb:requestsummaryandquizasync__action_141_requestsummaryandquizasync_await_141_12__await",
          "to": "method:2y4xzb:requestsummaryandquizasync__implicit_return",
          "kind": "return",
          "line": 143,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating__jump_unknown_IQuizStateService_SetHydrating",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_114_IQuizStateService_SetHydrating",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IQuizStateService.SetHydrating",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IQuizStateService.SetHydrating in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_LogRequestingSummary",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_115_LogRequestingSummary",
          "kind": "call-target",
          "targetNodeId": "method:1sfi79b:logrequestingsummary",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "LogRequestingSummary",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target LogRequestingSummary resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync__jump_unknown_IKnowledgeService_GetSummaryAndQuizAsync",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_118_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeService.GetSummaryAndQuizAsync",
          "line": 118,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeService.GetSummaryAndQuizAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_QuizQuestionDto_ctor",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_123_QuizQuestionDto_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "QuizQuestionDto..ctor",
          "line": 123,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target QuizQuestionDto..ctor in NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz__jump_unknown_IQuizStateService_SetQuiz",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_126_IQuizStateService_SetQuiz",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IQuizStateService.SetQuiz",
          "line": 126,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IQuizStateService.SetQuiz in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync__jump_unknown_IPlatformService_VibrateSuccessAsync",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_127_IPlatformService_VibrateSuccessAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IPlatformService.VibrateSuccessAsync",
          "line": 127,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IPlatformService.VibrateSuccessAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_LogSummaryWarning",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_131_LogSummaryWarning",
          "kind": "call-target",
          "targetNodeId": "method:arton1:logsummarywarning",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "LogSummaryWarning",
          "line": 131,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target LogSummaryWarning resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        },
        {
          "id": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError__jump_NexusReader_UI_Shared_Services_KnowledgeCoordinator_cs_LogSummaryError",
          "fromNodeId": "method:2y4xzb:requestsummaryandquizasync__call_136_LogSummaryError",
          "kind": "call-target",
          "targetNodeId": "method:1z06px6:logsummaryerror",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "targetHint": "LogSummaryError",
          "line": 136,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target LogSummaryError resolved to NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:2y4xzb:requestsummaryandquizasync__action_119_branch_119__merge",
        "method:2y4xzb:requestsummaryandquizasync__action_119_requestsummaryandquizasync_branch_119_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 112,
        "end": 143
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 112,
          "summary": "Control-flow fragment extracted for method RequestSummaryAndQuizAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:b6ndo3:clearasync__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:b6ndo3:clearasync",
      "ownerSymbolName": "ClearAsync",
      "entryNodeId": "method:b6ndo3:clearasync__entry",
      "exitNodeIds": [
        "method:b6ndo3:clearasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:b6ndo3:clearasync__entry",
          "kind": "entry",
          "label": "ClearAsync entry",
          "line": 145,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Clears the graph service state and clears the quiz state."
        },
        {
          "id": "method:b6ndo3:clearasync__action_147_clearasync_await_147_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _graphService.Clear();"
        },
        {
          "id": "method:b6ndo3:clearasync__action_147_state_change_147__linear",
          "kind": "statement",
          "label": "Clear graph and quiz",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "Calls graphService.Clear() and quizService.SetQuiz(null, null)"
        },
        {
          "id": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear",
          "kind": "call",
          "label": "IKnowledgeGraphService.Clear",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:b6ndo3:clearasync__action_148_clearasync_await_148_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81,
          "detail": "await _quizService.SetQuiz(null, null);"
        },
        {
          "id": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz",
          "kind": "call",
          "label": "IQuizStateService.SetQuiz",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "null, null"
        },
        {
          "id": "method:b6ndo3:clearasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 149,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:b6ndo3:clearasync__entry__method:b6ndo3:clearasync__action_147_clearasync_await_147_0__await",
          "from": "method:b6ndo3:clearasync__entry",
          "to": "method:b6ndo3:clearasync__action_147_clearasync_await_147_0__await",
          "kind": "next",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6ndo3:clearasync__action_147_clearasync_await_147_0__await__method:b6ndo3:clearasync__action_147_state_change_147__linear",
          "from": "method:b6ndo3:clearasync__action_147_clearasync_await_147_0__await",
          "to": "method:b6ndo3:clearasync__action_147_state_change_147__linear",
          "kind": "next",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b6ndo3:clearasync__action_147_state_change_147__linear__call_method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear",
          "from": "method:b6ndo3:clearasync__action_147_state_change_147__linear",
          "to": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear",
          "kind": "call",
          "label": "none",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear__method:b6ndo3:clearasync__action_148_clearasync_await_148_1__await",
          "from": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear",
          "to": "method:b6ndo3:clearasync__action_148_clearasync_await_148_1__await",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b6ndo3:clearasync__action_148_clearasync_await_148_1__await__call_method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz",
          "from": "method:b6ndo3:clearasync__action_148_clearasync_await_148_1__await",
          "to": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz",
          "kind": "call",
          "label": "null, null",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz__implicit_return",
          "from": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz",
          "to": "method:b6ndo3:clearasync__implicit_return",
          "kind": "return",
          "line": 149,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear__jump_unknown_IKnowledgeGraphService_Clear",
          "fromNodeId": "method:b6ndo3:clearasync__call_147_IKnowledgeGraphService_Clear",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IKnowledgeGraphService.Clear",
          "line": 147,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IKnowledgeGraphService.Clear in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz__jump_unknown_IQuizStateService_SetQuiz",
          "fromNodeId": "method:b6ndo3:clearasync__call_148_IQuizStateService_SetQuiz",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IQuizStateService.SetQuiz",
          "line": 148,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IQuizStateService.SetQuiz in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7799999999999999,
      "lineSpan": {
        "start": 145,
        "end": 149
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 145,
          "summary": "Control-flow fragment extracted for method ClearAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wlwqp0:dispose__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1wlwqp0:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:1wlwqp0:dispose__entry",
      "exitNodeIds": [
        "method:1wlwqp0:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1wlwqp0:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 151,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Unsubscribes the node-selected handler from the interaction service to avoid leaks."
        },
        {
          "id": "method:1wlwqp0:dispose__action_153_event_unsubscribe_153__linear",
          "kind": "statement",
          "label": "Unsubscribe node selection handler",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "_interactionService.OnNodeSelected -= HandleNodeSelected"
        },
        {
          "id": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call",
          "label": "IReaderInteractionService.OnNodeSelected -= HandleNodeSelected",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88,
          "detail": "event handler HandleNodeSelected"
        },
        {
          "id": "method:1wlwqp0:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1wlwqp0:dispose__entry__method:1wlwqp0:dispose__action_153_event_unsubscribe_153__linear",
          "from": "method:1wlwqp0:dispose__entry",
          "to": "method:1wlwqp0:dispose__action_153_event_unsubscribe_153__linear",
          "kind": "next",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wlwqp0:dispose__action_153_event_unsubscribe_153__linear__call_method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "from": "method:1wlwqp0:dispose__action_153_event_unsubscribe_153__linear",
          "to": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call",
          "label": "event handler HandleNodeSelected",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected__implicit_return",
          "from": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "to": "method:1wlwqp0:dispose__implicit_return",
          "kind": "return",
          "line": 154,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected__jump_unknown_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "fromNodeId": "method:1wlwqp0:dispose__call_153_IReaderInteractionService_OnNodeSelected_HandleNodeSelected",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IReaderInteractionService.OnNodeSelected -= HandleNodeSelected",
          "line": 153,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "reason": "Call target IReaderInteractionService.OnNodeSelected -= HandleNodeSelected in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7399999999999999,
      "lineSpan": {
        "start": 151,
        "end": 154
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 151,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ip44st:loggeneratinggraph__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1ip44st:loggeneratinggraph",
      "ownerSymbolName": "LogGeneratingGraph",
      "entryNodeId": "method:1ip44st:loggeneratinggraph__entry",
      "exitNodeIds": [
        "method:1ip44st:loggeneratinggraph__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ip44st:loggeneratinggraph__entry",
          "kind": "entry",
          "label": "LogGeneratingGraph entry",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Source-generated logger stub for informational message when generating a graph."
        },
        {
          "id": "method:1ip44st:loggeneratinggraph__action_156_log_156__linear",
          "kind": "statement",
          "label": "Log generating graph (source-gen)",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "[LoggerMessage] attribute declares message template"
        },
        {
          "id": "method:1ip44st:loggeneratinggraph__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ip44st:loggeneratinggraph__entry__method:1ip44st:loggeneratinggraph__action_156_log_156__linear",
          "from": "method:1ip44st:loggeneratinggraph__entry",
          "to": "method:1ip44st:loggeneratinggraph__action_156_log_156__linear",
          "kind": "next",
          "line": 156,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ip44st:loggeneratinggraph__action_156_log_156__linear__implicit_return",
          "from": "method:1ip44st:loggeneratinggraph__action_156_log_156__linear",
          "to": "method:1ip44st:loggeneratinggraph__implicit_return",
          "kind": "return",
          "line": 157,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 157,
        "end": 157
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 157,
          "summary": "Control-flow fragment extracted for method LogGeneratingGraph.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1nzct8x:loggrapherror__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1nzct8x:loggrapherror",
      "ownerSymbolName": "LogGraphError",
      "entryNodeId": "method:1nzct8x:loggrapherror__entry",
      "exitNodeIds": [
        "method:1nzct8x:loggrapherror__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1nzct8x:loggrapherror__entry",
          "kind": "entry",
          "label": "LogGraphError entry",
          "line": 160,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Source-generated logger stub for graph generation errors."
        },
        {
          "id": "method:1nzct8x:loggrapherror__action_159_log_159__linear",
          "kind": "statement",
          "label": "Log graph generation error (source-gen)",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "[LoggerMessage] attribute declares error template"
        },
        {
          "id": "method:1nzct8x:loggrapherror__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 160,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1nzct8x:loggrapherror__entry__method:1nzct8x:loggrapherror__action_159_log_159__linear",
          "from": "method:1nzct8x:loggrapherror__entry",
          "to": "method:1nzct8x:loggrapherror__action_159_log_159__linear",
          "kind": "next",
          "line": 159,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1nzct8x:loggrapherror__action_159_log_159__linear__implicit_return",
          "from": "method:1nzct8x:loggrapherror__action_159_log_159__linear",
          "to": "method:1nzct8x:loggrapherror__implicit_return",
          "kind": "return",
          "line": 160,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 160,
        "end": 160
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 160,
          "summary": "Control-flow fragment extracted for method LogGraphError.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sfi79b:logrequestingsummary__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1sfi79b:logrequestingsummary",
      "ownerSymbolName": "LogRequestingSummary",
      "entryNodeId": "method:1sfi79b:logrequestingsummary__entry",
      "exitNodeIds": [
        "method:1sfi79b:logrequestingsummary__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1sfi79b:logrequestingsummary__entry",
          "kind": "entry",
          "label": "LogRequestingSummary entry",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Source-generated logger stub for requesting summary and quiz."
        },
        {
          "id": "method:1sfi79b:logrequestingsummary__action_162_log_162__linear",
          "kind": "statement",
          "label": "Log requesting summary (source-gen)",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "[LoggerMessage] attribute declares message template"
        },
        {
          "id": "method:1sfi79b:logrequestingsummary__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1sfi79b:logrequestingsummary__entry__method:1sfi79b:logrequestingsummary__action_162_log_162__linear",
          "from": "method:1sfi79b:logrequestingsummary__entry",
          "to": "method:1sfi79b:logrequestingsummary__action_162_log_162__linear",
          "kind": "next",
          "line": 162,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sfi79b:logrequestingsummary__action_162_log_162__linear__implicit_return",
          "from": "method:1sfi79b:logrequestingsummary__action_162_log_162__linear",
          "to": "method:1sfi79b:logrequestingsummary__implicit_return",
          "kind": "return",
          "line": 163,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 163,
        "end": 163
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 163,
          "summary": "Control-flow fragment extracted for method LogRequestingSummary.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:arton1:logsummarywarning__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:arton1:logsummarywarning",
      "ownerSymbolName": "LogSummaryWarning",
      "entryNodeId": "method:arton1:logsummarywarning__entry",
      "exitNodeIds": [
        "method:arton1:logsummarywarning__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:arton1:logsummarywarning__entry",
          "kind": "entry",
          "label": "LogSummaryWarning entry",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Source-generated logger stub for warnings when summary/quiz retrieval fails."
        },
        {
          "id": "method:arton1:logsummarywarning__action_165_log_165__linear",
          "kind": "statement",
          "label": "Log summary warning (source-gen)",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "[LoggerMessage] attribute declares warning template"
        },
        {
          "id": "method:arton1:logsummarywarning__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:arton1:logsummarywarning__entry__method:arton1:logsummarywarning__action_165_log_165__linear",
          "from": "method:arton1:logsummarywarning__entry",
          "to": "method:arton1:logsummarywarning__action_165_log_165__linear",
          "kind": "next",
          "line": 165,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:arton1:logsummarywarning__action_165_log_165__linear__implicit_return",
          "from": "method:arton1:logsummarywarning__action_165_log_165__linear",
          "to": "method:arton1:logsummarywarning__implicit_return",
          "kind": "return",
          "line": 166,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 166,
        "end": 166
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 166,
          "summary": "Control-flow fragment extracted for method LogSummaryWarning.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1z06px6:logsummaryerror__fragment",
      "ownerFileId": "file:uvydt4:knowledgecoordinator-cs",
      "ownerSymbolId": "method:1z06px6:logsummaryerror",
      "ownerSymbolName": "LogSummaryError",
      "entryNodeId": "method:1z06px6:logsummaryerror__entry",
      "exitNodeIds": [
        "method:1z06px6:logsummaryerror__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1z06px6:logsummaryerror__entry",
          "kind": "entry",
          "label": "LogSummaryError entry",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.99,
          "detail": "Source-generated logger stub for errors during summary/quiz retrieval."
        },
        {
          "id": "method:1z06px6:logsummaryerror__action_168_log_168__linear",
          "kind": "statement",
          "label": "Log summary error (source-gen)",
          "line": 168,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7,
          "detail": "[LoggerMessage] attribute declares error template"
        },
        {
          "id": "method:1z06px6:logsummaryerror__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1z06px6:logsummaryerror__entry__method:1z06px6:logsummaryerror__action_168_log_168__linear",
          "from": "method:1z06px6:logsummaryerror__entry",
          "to": "method:1z06px6:logsummaryerror__action_168_log_168__linear",
          "kind": "next",
          "line": 168,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1z06px6:logsummaryerror__action_168_log_168__linear__implicit_return",
          "from": "method:1z06px6:logsummaryerror__action_168_log_168__linear",
          "to": "method:1z06px6:logsummaryerror__implicit_return",
          "kind": "return",
          "line": 169,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 169,
        "end": 169
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs",
          "line": 169,
          "summary": "Control-flow fragment extracted for method LogSummaryError.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:b27zpe:updategraph__fragment",
      "ownerFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "ownerSymbolId": "method:b27zpe:updategraph",
      "ownerSymbolName": "UpdateGraph",
      "entryNodeId": "method:b27zpe:updategraph__entry",
      "exitNodeIds": [
        "method:b27zpe:updategraph__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:b27zpe:updategraph__entry",
          "kind": "entry",
          "label": "UpdateGraph entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Replace CurrentGraphData with new graph data, clear loading flag, and notify subscribers that loading changed and graph updated."
        },
        {
          "id": "method:b27zpe:updategraph__action_17_state_change_17__linear",
          "kind": "statement",
          "label": "Set CurrentGraphData",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "CurrentGraphData = newData"
        },
        {
          "id": "method:b27zpe:updategraph__action_18_state_change_18__linear",
          "kind": "statement",
          "label": "Clear IsLoading",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "IsLoading = false"
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_await_19_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81,
          "detail": "if (OnLoadingChanged != null) await OnLoadingChanged(false);"
        },
        {
          "id": "method:b27zpe:updategraph__action_19_event_19__linear",
          "kind": "statement",
          "label": "Notify loading changed",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "If OnLoadingChanged != null then await OnLoadingChanged(false)"
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition",
          "kind": "condition",
          "label": "OnLoadingChanged != null) await OnLoadingChanged(false",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78,
          "detail": "if (OnLoadingChanged != null) await OnLoadingChanged(false);"
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__call_19_OnLoadingChanged",
          "kind": "call",
          "label": "OnLoadingChanged",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88,
          "detail": "false (signals loading finished)"
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_await_20_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81,
          "detail": "if (OnGraphUpdated != null) await OnGraphUpdated();"
        },
        {
          "id": "method:b27zpe:updategraph__action_20_event_20__linear",
          "kind": "statement",
          "label": "Notify graph updated",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "If OnGraphUpdated != null then await OnGraphUpdated()"
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition",
          "kind": "condition",
          "label": "OnGraphUpdated != null) await OnGraphUpdated(",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78,
          "detail": "if (OnGraphUpdated != null) await OnGraphUpdated();"
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__call_20_OnGraphUpdated",
          "kind": "call",
          "label": "OnGraphUpdated",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88,
          "detail": "no args (signals graph updated)"
        },
        {
          "id": "method:b27zpe:updategraph__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:b27zpe:updategraph__entry__method:b27zpe:updategraph__action_17_state_change_17__linear",
          "from": "method:b27zpe:updategraph__entry",
          "to": "method:b27zpe:updategraph__action_17_state_change_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b27zpe:updategraph__action_17_state_change_17__linear__method:b27zpe:updategraph__action_18_state_change_18__linear",
          "from": "method:b27zpe:updategraph__action_17_state_change_17__linear",
          "to": "method:b27zpe:updategraph__action_18_state_change_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b27zpe:updategraph__action_18_state_change_18__linear__method:b27zpe:updategraph__action_19_updategraph_await_19_1__await",
          "from": "method:b27zpe:updategraph__action_18_state_change_18__linear",
          "to": "method:b27zpe:updategraph__action_19_updategraph_await_19_1__await",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_await_19_1__await__method:b27zpe:updategraph__action_19_event_19__linear",
          "from": "method:b27zpe:updategraph__action_19_updategraph_await_19_1__await",
          "to": "method:b27zpe:updategraph__action_19_event_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b27zpe:updategraph__action_19_event_19__linear__method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition",
          "from": "method:b27zpe:updategraph__action_19_event_19__linear",
          "to": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition__method:b27zpe:updategraph__action_19_updategraph_branch_19_0__true",
          "from": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition",
          "to": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition__method:b27zpe:updategraph__action_19_updategraph_branch_19_0__false",
          "from": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__condition",
          "to": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__true__method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "from": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__true",
          "to": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__false__method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "from": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__false",
          "to": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge__call_method:b27zpe:updategraph__call_19_OnLoadingChanged",
          "from": "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
          "to": "method:b27zpe:updategraph__call_19_OnLoadingChanged",
          "kind": "call",
          "label": "false (signals loading finished)",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b27zpe:updategraph__call_19_OnLoadingChanged__method:b27zpe:updategraph__action_20_updategraph_await_20_3__await",
          "from": "method:b27zpe:updategraph__call_19_OnLoadingChanged",
          "to": "method:b27zpe:updategraph__action_20_updategraph_await_20_3__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_await_20_3__await__method:b27zpe:updategraph__action_20_event_20__linear",
          "from": "method:b27zpe:updategraph__action_20_updategraph_await_20_3__await",
          "to": "method:b27zpe:updategraph__action_20_event_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:b27zpe:updategraph__action_20_event_20__linear__method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition",
          "from": "method:b27zpe:updategraph__action_20_event_20__linear",
          "to": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition__method:b27zpe:updategraph__action_20_updategraph_branch_20_2__true",
          "from": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition",
          "to": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition__method:b27zpe:updategraph__action_20_updategraph_branch_20_2__false",
          "from": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__condition",
          "to": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__true__method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "from": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__true",
          "to": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__false__method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "from": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__false",
          "to": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge__call_method:b27zpe:updategraph__call_20_OnGraphUpdated",
          "from": "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge",
          "to": "method:b27zpe:updategraph__call_20_OnGraphUpdated",
          "kind": "call",
          "label": "no args (signals graph updated)",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:b27zpe:updategraph__call_20_OnGraphUpdated__implicit_return",
          "from": "method:b27zpe:updategraph__call_20_OnGraphUpdated",
          "to": "method:b27zpe:updategraph__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:b27zpe:updategraph__call_19_OnLoadingChanged__jump_NexusReader_UI_Shared_Services_KnowledgeGraphService_cs_OnLoadingChanged",
          "fromNodeId": "method:b27zpe:updategraph__call_19_OnLoadingChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "targetHint": "OnLoadingChanged",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "reason": "Call target OnLoadingChanged in NexusReader.UI.Shared/Services/KnowledgeGraphService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:b27zpe:updategraph__call_20_OnGraphUpdated__jump_NexusReader_UI_Shared_Services_KnowledgeGraphService_cs_OnGraphUpdated",
          "fromNodeId": "method:b27zpe:updategraph__call_20_OnGraphUpdated",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "targetHint": "OnGraphUpdated",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "reason": "Call target OnGraphUpdated in NexusReader.UI.Shared/Services/KnowledgeGraphService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:b27zpe:updategraph__action_19_updategraph_branch_19_0__merge",
        "method:b27zpe:updategraph__action_20_updategraph_branch_20_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 15,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method UpdateGraph.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ii06co:setactivenode__fragment",
      "ownerFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "ownerSymbolId": "method:1ii06co:setactivenode",
      "ownerSymbolName": "SetActiveNode",
      "entryNodeId": "method:1ii06co:setactivenode__entry",
      "exitNodeIds": [
        "method:1ii06co:setactivenode__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1ii06co:setactivenode__entry",
          "kind": "entry",
          "label": "SetActiveNode entry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Set the active node id (no-op if unchanged) and notify subscribers of the change."
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition",
          "kind": "condition",
          "label": "ActiveNodeId == nodeId",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "if (ActiveNodeId == nodeId) return;"
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__true",
          "kind": "branch-true",
          "label": "return (no change)",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition",
          "kind": "condition",
          "label": "ActiveNodeId == nodeId",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9,
          "detail": "if (ActiveNodeId == nodeId) return;"
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_26_state_change_26__linear",
          "kind": "statement",
          "label": "Set ActiveNodeId",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "ActiveNodeId = nodeId"
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_await_27_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81,
          "detail": "if (OnActiveNodeChanged != null) await OnActiveNodeChanged(nodeId);"
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_event_27__linear",
          "kind": "statement",
          "label": "Notify active node changed",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "If OnActiveNodeChanged != null then await OnActiveNodeChanged(nodeId)"
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition",
          "kind": "condition",
          "label": "OnActiveNodeChanged != null) await OnActiveNodeChanged(nodeId",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78,
          "detail": "if (OnActiveNodeChanged != null) await OnActiveNodeChanged(nodeId);"
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged",
          "kind": "call",
          "label": "OnActiveNodeChanged",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88,
          "detail": "nodeId (string)"
        },
        {
          "id": "method:1ii06co:setactivenode__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1ii06co:setactivenode__entry__method:1ii06co:setactivenode__action_25_guard_clause_25__condition",
          "from": "method:1ii06co:setactivenode__entry",
          "to": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition__method:1ii06co:setactivenode__action_25_guard_clause_25__true",
          "from": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition",
          "to": "method:1ii06co:setactivenode__action_25_guard_clause_25__true",
          "kind": "condition-true",
          "label": "return (no change)",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition__method:1ii06co:setactivenode__action_25_guard_clause_25__false",
          "from": "method:1ii06co:setactivenode__action_25_guard_clause_25__condition",
          "to": "method:1ii06co:setactivenode__action_25_guard_clause_25__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__true__method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "from": "method:1ii06co:setactivenode__action_25_guard_clause_25__true",
          "to": "method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__false__method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "from": "method:1ii06co:setactivenode__action_25_guard_clause_25__false",
          "to": "method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_guard_clause_25__merge__method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition",
          "from": "method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
          "to": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition__method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__true",
          "from": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition",
          "to": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition__method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__false",
          "from": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__condition",
          "to": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__true__method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "from": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__true",
          "to": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__false__method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "from": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__false",
          "to": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge__method:1ii06co:setactivenode__action_26_state_change_26__linear",
          "from": "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
          "to": "method:1ii06co:setactivenode__action_26_state_change_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_26_state_change_26__linear__method:1ii06co:setactivenode__action_27_setactivenode_await_27_2__await",
          "from": "method:1ii06co:setactivenode__action_26_state_change_26__linear",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_await_27_2__await",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_await_27_2__await__method:1ii06co:setactivenode__action_27_event_27__linear",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_await_27_2__await",
          "to": "method:1ii06co:setactivenode__action_27_event_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_event_27__linear__method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition",
          "from": "method:1ii06co:setactivenode__action_27_event_27__linear",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition__method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__true",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition__method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__false",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__condition",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__true__method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__true",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__false__method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__false",
          "to": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge__call_method:1ii06co:setactivenode__call_27_OnActiveNodeChanged",
          "from": "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge",
          "to": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged",
          "kind": "call",
          "label": "nodeId (string)",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged__implicit_return",
          "from": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged",
          "to": "method:1ii06co:setactivenode__implicit_return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged__jump_NexusReader_UI_Shared_Services_KnowledgeGraphService_cs_OnActiveNodeChanged",
          "fromNodeId": "method:1ii06co:setactivenode__call_27_OnActiveNodeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "targetHint": "OnActiveNodeChanged",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "reason": "Call target OnActiveNodeChanged in NexusReader.UI.Shared/Services/KnowledgeGraphService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ii06co:setactivenode__action_25_guard_clause_25__merge",
        "method:1ii06co:setactivenode__action_25_setactivenode_guard_clause_25_0__merge",
        "method:1ii06co:setactivenode__action_27_setactivenode_branch_27_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 23,
        "end": 28
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method SetActiveNode.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:90e1ug:setloading__fragment",
      "ownerFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "ownerSymbolId": "method:90e1ug:setloading",
      "ownerSymbolName": "SetLoading",
      "entryNodeId": "method:90e1ug:setloading__entry",
      "exitNodeIds": [
        "method:90e1ug:setloading__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:90e1ug:setloading__entry",
          "kind": "entry",
          "label": "SetLoading entry",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Update the IsLoading flag and notify subscribers about loading state changes."
        },
        {
          "id": "method:90e1ug:setloading__action_32_state_change_32__linear",
          "kind": "statement",
          "label": "Set IsLoading",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "IsLoading = isLoading"
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_await_33_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81,
          "detail": "if (OnLoadingChanged != null) await OnLoadingChanged(isLoading);"
        },
        {
          "id": "method:90e1ug:setloading__action_33_event_33__linear",
          "kind": "statement",
          "label": "Notify loading changed",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "If OnLoadingChanged != null then await OnLoadingChanged(isLoading)"
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition",
          "kind": "condition",
          "label": "OnLoadingChanged != null) await OnLoadingChanged(isLoading",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78,
          "detail": "if (OnLoadingChanged != null) await OnLoadingChanged(isLoading);"
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__call_33_OnLoadingChanged",
          "kind": "call",
          "label": "OnLoadingChanged",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88,
          "detail": "isLoading (bool)"
        },
        {
          "id": "method:90e1ug:setloading__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:90e1ug:setloading__entry__method:90e1ug:setloading__action_32_state_change_32__linear",
          "from": "method:90e1ug:setloading__entry",
          "to": "method:90e1ug:setloading__action_32_state_change_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:90e1ug:setloading__action_32_state_change_32__linear__method:90e1ug:setloading__action_33_setloading_await_33_1__await",
          "from": "method:90e1ug:setloading__action_32_state_change_32__linear",
          "to": "method:90e1ug:setloading__action_33_setloading_await_33_1__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_await_33_1__await__method:90e1ug:setloading__action_33_event_33__linear",
          "from": "method:90e1ug:setloading__action_33_setloading_await_33_1__await",
          "to": "method:90e1ug:setloading__action_33_event_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:90e1ug:setloading__action_33_event_33__linear__method:90e1ug:setloading__action_33_setloading_branch_33_0__condition",
          "from": "method:90e1ug:setloading__action_33_event_33__linear",
          "to": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition__method:90e1ug:setloading__action_33_setloading_branch_33_0__true",
          "from": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition",
          "to": "method:90e1ug:setloading__action_33_setloading_branch_33_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition__method:90e1ug:setloading__action_33_setloading_branch_33_0__false",
          "from": "method:90e1ug:setloading__action_33_setloading_branch_33_0__condition",
          "to": "method:90e1ug:setloading__action_33_setloading_branch_33_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__true__method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "from": "method:90e1ug:setloading__action_33_setloading_branch_33_0__true",
          "to": "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__false__method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "from": "method:90e1ug:setloading__action_33_setloading_branch_33_0__false",
          "to": "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge__call_method:90e1ug:setloading__call_33_OnLoadingChanged",
          "from": "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge",
          "to": "method:90e1ug:setloading__call_33_OnLoadingChanged",
          "kind": "call",
          "label": "isLoading (bool)",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:90e1ug:setloading__call_33_OnLoadingChanged__implicit_return",
          "from": "method:90e1ug:setloading__call_33_OnLoadingChanged",
          "to": "method:90e1ug:setloading__implicit_return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:90e1ug:setloading__call_33_OnLoadingChanged__jump_NexusReader_UI_Shared_Services_KnowledgeGraphService_cs_OnLoadingChanged",
          "fromNodeId": "method:90e1ug:setloading__call_33_OnLoadingChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "targetHint": "OnLoadingChanged",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "reason": "Call target OnLoadingChanged in NexusReader.UI.Shared/Services/KnowledgeGraphService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:90e1ug:setloading__action_33_setloading_branch_33_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.9199999999999999,
      "lineSpan": {
        "start": 30,
        "end": 34
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 30,
          "summary": "Control-flow fragment extracted for method SetLoading.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ekp9ov:clear__fragment",
      "ownerFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "ownerSymbolId": "method:ekp9ov:clear",
      "ownerSymbolName": "Clear",
      "entryNodeId": "method:ekp9ov:clear__entry",
      "exitNodeIds": [
        "method:ekp9ov:clear__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ekp9ov:clear__entry",
          "kind": "entry",
          "label": "Clear entry",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.99,
          "detail": "Clear the stored graph data, active node, reset loading flag, and notify graph-updated subscribers."
        },
        {
          "id": "method:ekp9ov:clear__action_38_state_change_38__linear",
          "kind": "statement",
          "label": "Clear CurrentGraphData",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "CurrentGraphData = null"
        },
        {
          "id": "method:ekp9ov:clear__action_39_state_change_39__linear",
          "kind": "statement",
          "label": "Clear ActiveNodeId",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "ActiveNodeId = null"
        },
        {
          "id": "method:ekp9ov:clear__action_40_state_change_40__linear",
          "kind": "statement",
          "label": "Clear IsLoading",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "IsLoading = false"
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_await_41_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81,
          "detail": "if (OnGraphUpdated != null) await OnGraphUpdated();"
        },
        {
          "id": "method:ekp9ov:clear__action_41_event_41__linear",
          "kind": "statement",
          "label": "Notify graph updated (cleared)",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7,
          "detail": "If OnGraphUpdated != null then await OnGraphUpdated()"
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition",
          "kind": "condition",
          "label": "OnGraphUpdated != null) await OnGraphUpdated(",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78,
          "detail": "if (OnGraphUpdated != null) await OnGraphUpdated();"
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__call_41_OnGraphUpdated",
          "kind": "call",
          "label": "OnGraphUpdated",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88,
          "detail": "no args (signals graph cleared/updated)"
        },
        {
          "id": "method:ekp9ov:clear__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ekp9ov:clear__entry__method:ekp9ov:clear__action_38_state_change_38__linear",
          "from": "method:ekp9ov:clear__entry",
          "to": "method:ekp9ov:clear__action_38_state_change_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ekp9ov:clear__action_38_state_change_38__linear__method:ekp9ov:clear__action_39_state_change_39__linear",
          "from": "method:ekp9ov:clear__action_38_state_change_38__linear",
          "to": "method:ekp9ov:clear__action_39_state_change_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ekp9ov:clear__action_39_state_change_39__linear__method:ekp9ov:clear__action_40_state_change_40__linear",
          "from": "method:ekp9ov:clear__action_39_state_change_39__linear",
          "to": "method:ekp9ov:clear__action_40_state_change_40__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ekp9ov:clear__action_40_state_change_40__linear__method:ekp9ov:clear__action_41_clear_await_41_1__await",
          "from": "method:ekp9ov:clear__action_40_state_change_40__linear",
          "to": "method:ekp9ov:clear__action_41_clear_await_41_1__await",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_await_41_1__await__method:ekp9ov:clear__action_41_event_41__linear",
          "from": "method:ekp9ov:clear__action_41_clear_await_41_1__await",
          "to": "method:ekp9ov:clear__action_41_event_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ekp9ov:clear__action_41_event_41__linear__method:ekp9ov:clear__action_41_clear_branch_41_0__condition",
          "from": "method:ekp9ov:clear__action_41_event_41__linear",
          "to": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition__method:ekp9ov:clear__action_41_clear_branch_41_0__true",
          "from": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition",
          "to": "method:ekp9ov:clear__action_41_clear_branch_41_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition__method:ekp9ov:clear__action_41_clear_branch_41_0__false",
          "from": "method:ekp9ov:clear__action_41_clear_branch_41_0__condition",
          "to": "method:ekp9ov:clear__action_41_clear_branch_41_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__true__method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "from": "method:ekp9ov:clear__action_41_clear_branch_41_0__true",
          "to": "method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__false__method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "from": "method:ekp9ov:clear__action_41_clear_branch_41_0__false",
          "to": "method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:ekp9ov:clear__action_41_clear_branch_41_0__merge__call_method:ekp9ov:clear__call_41_OnGraphUpdated",
          "from": "method:ekp9ov:clear__action_41_clear_branch_41_0__merge",
          "to": "method:ekp9ov:clear__call_41_OnGraphUpdated",
          "kind": "call",
          "label": "no args (signals graph cleared/updated)",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:ekp9ov:clear__call_41_OnGraphUpdated__implicit_return",
          "from": "method:ekp9ov:clear__call_41_OnGraphUpdated",
          "to": "method:ekp9ov:clear__implicit_return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ekp9ov:clear__call_41_OnGraphUpdated__jump_NexusReader_UI_Shared_Services_KnowledgeGraphService_cs_OnGraphUpdated",
          "fromNodeId": "method:ekp9ov:clear__call_41_OnGraphUpdated",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "targetHint": "OnGraphUpdated",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "reason": "Call target OnGraphUpdated in NexusReader.UI.Shared/Services/KnowledgeGraphService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:ekp9ov:clear__action_41_clear_branch_41_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.9799999999999998,
      "lineSpan": {
        "start": 36,
        "end": 42
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs",
          "line": 36,
          "summary": "Control-flow fragment extracted for method Clear.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:15b2jq7:nexusauthenticationstateprovider__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:15b2jq7:nexusauthenticationstateprovider",
      "ownerSymbolName": "NexusAuthenticationStateProvider",
      "entryNodeId": "method:15b2jq7:nexusauthenticationstateprovider__entry",
      "exitNodeIds": [
        "method:15b2jq7:nexusauthenticationstateprovider__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:15b2jq7:nexusauthenticationstateprovider__entry",
          "kind": "entry",
          "label": "NexusAuthenticationStateProvider entry",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Constructor that captures the native secure storage service dependency."
        },
        {
          "id": "method:15b2jq7:nexusauthenticationstateprovider__action_20_assignment_20__linear",
          "kind": "statement",
          "label": "Store injected storage service",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_storageService = storageService"
        },
        {
          "id": "method:15b2jq7:nexusauthenticationstateprovider__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:15b2jq7:nexusauthenticationstateprovider__entry__method:15b2jq7:nexusauthenticationstateprovider__action_20_assignment_20__linear",
          "from": "method:15b2jq7:nexusauthenticationstateprovider__entry",
          "to": "method:15b2jq7:nexusauthenticationstateprovider__action_20_assignment_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15b2jq7:nexusauthenticationstateprovider__action_20_assignment_20__linear__implicit_return",
          "from": "method:15b2jq7:nexusauthenticationstateprovider__action_20_assignment_20__linear",
          "to": "method:15b2jq7:nexusauthenticationstateprovider__implicit_return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 18,
        "end": 21
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 18,
          "summary": "Control-flow fragment extracted for method NexusAuthenticationStateProvider.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1r8a5jx:clearcache__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:1r8a5jx:clearcache",
      "ownerSymbolName": "ClearCache",
      "entryNodeId": "method:1r8a5jx:clearcache__entry",
      "exitNodeIds": [
        "method:1r8a5jx:clearcache__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1r8a5jx:clearcache__entry",
          "kind": "entry",
          "label": "ClearCache entry",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Clears any cached AuthenticationState and triggers Notification of authentication state change."
        },
        {
          "id": "method:1r8a5jx:clearcache__action_25_cache_write_25__linear",
          "kind": "db-write",
          "label": "Reset cached authentication state",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_cachedState = null"
        },
        {
          "id": "method:1r8a5jx:clearcache__action_26_clearcache_notification_26_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83,
          "detail": "NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());"
        },
        {
          "id": "method:1r8a5jx:clearcache__action_26_notification_26__linear",
          "kind": "publish-event",
          "label": "Notify consumers that authentication state changed",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()) (framework method)"
        },
        {
          "id": "method:1r8a5jx:clearcache__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1r8a5jx:clearcache__entry__method:1r8a5jx:clearcache__action_25_cache_write_25__linear",
          "from": "method:1r8a5jx:clearcache__entry",
          "to": "method:1r8a5jx:clearcache__action_25_cache_write_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1r8a5jx:clearcache__action_25_cache_write_25__linear__method:1r8a5jx:clearcache__action_26_clearcache_notification_26_0__linear",
          "from": "method:1r8a5jx:clearcache__action_25_cache_write_25__linear",
          "to": "method:1r8a5jx:clearcache__action_26_clearcache_notification_26_0__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83
        },
        {
          "id": "method:1r8a5jx:clearcache__action_26_clearcache_notification_26_0__linear__method:1r8a5jx:clearcache__action_26_notification_26__linear",
          "from": "method:1r8a5jx:clearcache__action_26_clearcache_notification_26_0__linear",
          "to": "method:1r8a5jx:clearcache__action_26_notification_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1r8a5jx:clearcache__action_26_notification_26__linear__implicit_return",
          "from": "method:1r8a5jx:clearcache__action_26_notification_26__linear",
          "to": "method:1r8a5jx:clearcache__implicit_return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 23,
        "end": 27
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 23,
          "summary": "Control-flow fragment extracted for method ClearCache.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13yeu7e:getauthenticationstateasync__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:13yeu7e:getauthenticationstateasync",
      "ownerSymbolName": "GetAuthenticationStateAsync",
      "entryNodeId": "method:13yeu7e:getauthenticationstateasync__entry",
      "exitNodeIds": [
        "method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return",
        "method:13yeu7e:getauthenticationstateasync__action_54_return_54__return",
        "method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return",
        "method:13yeu7e:getauthenticationstateasync__action_69_return_69__return",
        "method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return",
        "method:13yeu7e:getauthenticationstateasync__action_80_getauthenticationstateasync_return_80_16__return"
      ],
      "nodes": [
        {
          "id": "method:13yeu7e:getauthenticationstateasync__entry",
          "kind": "entry",
          "label": "GetAuthenticationStateAsync entry",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Asynchronously obtains the current AuthenticationState by reading persisted token/email/tenant/roles from secure storage, with caching, multi-path branching (token, cookie, fallback), and exception-safe anonymous fallback."
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_33_getauthenticationstateasync_try_33_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition",
          "kind": "condition",
          "label": "_cachedState != null",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "if (_cachedState != null) return _cachedState;"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__true",
          "kind": "branch-true",
          "label": "return cached AuthenticationState",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__false",
          "kind": "branch-false",
          "label": "continue to storage reads",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition",
          "kind": "condition",
          "label": "_cachedState != null",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9,
          "detail": "if (_cachedState != null) return _cachedState;"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_37_getauthenticationstateasync_await_37_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var tokenResult = await _storageService.GetSecureString(TokenKey);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_37_external_call_37__linear",
          "kind": "http-call",
          "label": "Read persisted auth token",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "await _storageService.GetSecureString(TokenKey)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "TokenKey (StorageKeys.AuthToken)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition",
          "kind": "condition",
          "label": "token is not null/whitespace",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "If token present, read email/tenant/roles and create state when email found"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__true",
          "kind": "branch-true",
          "label": "try token-based: read email, tenant, roles",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__false",
          "kind": "branch-false",
          "label": "skip token-based",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition",
          "kind": "condition",
          "label": "!string.IsNullOrWhiteSpace(token)",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrWhiteSpace(token))"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_43_getauthenticationstateasync_await_43_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var emailResult = await _storageService.GetSecureString(StorageKeys.UserEmail);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_43_external_call_43__linear",
          "kind": "http-call",
          "label": "Read email/tenant/roles for token path",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_44_getauthenticationstateasync_await_44_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var tenantIdResult = await _storageService.GetSecureString(StorageKeys.UserTenant);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_45_getauthenticationstateasync_await_45_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var rolesResult = await _storageService.GetSecureString(StorageKeys.UserRoles);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition",
          "kind": "condition",
          "label": "emailResult.IsSuccess && !string.IsNullOrEmpty(emailResult.Value)",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "Only builds AuthenticationState if email is present"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__true",
          "kind": "branch-true",
          "label": "create cached state and return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__false",
          "kind": "branch-false",
          "label": "fall through",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition",
          "kind": "condition",
          "label": "emailResult.IsSuccess && !string.IsNullOrEmpty(emailResult.Value)",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78,
          "detail": "if (emailResult.IsSuccess && !string.IsNullOrEmpty(emailResult.Value))"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState",
          "kind": "call",
          "label": "CreateState",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "emailResult.Value, tenantId or 'unknown', authType 'OpaqueBearer', roles string"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "return _cachedState;"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_54_return_54__return",
          "kind": "return",
          "label": "Return AuthenticationState built from token data",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_cachedState returned after CreateState"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition",
          "kind": "condition",
          "label": "storedEmailResult.IsSuccess && storedEmailResult.Value not empty",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "Fallback path tries reading email/tenant/roles without explicit token"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__true",
          "kind": "branch-true",
          "label": "create cached state from cookie-style indicators and return",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__false",
          "kind": "branch-false",
          "label": "fall through to fallback",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_59_getauthenticationstateasync_await_59_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var storedEmailResult = await _storageService.GetSecureString(StorageKeys.UserEmail);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_59_external_call_59__linear",
          "kind": "http-call",
          "label": "Read email/tenant/roles for cookie path",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "await _storageService.GetSecureString for UserEmail, UserTenant, UserRoles"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserEmail (cookie fallback)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition",
          "kind": "condition",
          "label": "storedEmailResult.IsSuccess && !string.IsNullOrEmpty(storedEmailResult.Value)",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78,
          "detail": "if (storedEmailResult.IsSuccess && !string.IsNullOrEmpty(storedEmailResult.Value))"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_62_getauthenticationstateasync_await_62_11__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var tenantIdResult = await _storageService.GetSecureString(StorageKeys.UserTenant);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserTenant (cookie fallback)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_63_getauthenticationstateasync_await_63_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81,
          "detail": "var rolesResult = await _storageService.GetSecureString(StorageKeys.UserRoles);"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "StorageKeys.UserRoles (cookie fallback)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState",
          "kind": "call",
          "label": "CreateState",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "storedEmailResult.Value, tenantId or 'unknown', authType 'CookieAuth', roles string"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return",
          "kind": "return",
          "label": "Returns result",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "return _cachedState;"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_69_return_69__return",
          "kind": "return",
          "label": "Return AuthenticationState built from cookie indicators",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_cachedState returned after CreateState with authType 'CookieAuth'"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return",
          "kind": "return",
          "label": "Returns result",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition",
          "kind": "condition",
          "label": "Anonymous fallback",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "Return anonymous ClaimsPrincipal when no persisted info found"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__true",
          "kind": "branch-true",
          "label": "true",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__false",
          "kind": "branch-false",
          "label": "false",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "kind": "statement",
          "label": "merge",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_78_getauthenticationstateasync_catch_78_15__catch",
          "kind": "catch",
          "label": "catch Exception",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86,
          "detail": "catch (Exception)"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_78_exception_handler_78__linear",
          "kind": "statement",
          "label": "Catch-all exception and return anonymous",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "catch (Exception) => return anonymous AuthenticationState"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_80_getauthenticationstateasync_return_80_16__return",
          "kind": "return",
          "label": "Returns result",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));"
        }
      ],
      "edges": [
        {
          "id": "method:13yeu7e:getauthenticationstateasync__entry__method:13yeu7e:getauthenticationstateasync__action_33_getauthenticationstateasync_try_33_0__try",
          "from": "method:13yeu7e:getauthenticationstateasync__entry",
          "to": "method:13yeu7e:getauthenticationstateasync__action_33_getauthenticationstateasync_try_33_0__try",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.84
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_33_getauthenticationstateasync_try_33_0__try__method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_33_getauthenticationstateasync_try_33_0__try",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition__method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__true",
          "kind": "condition-true",
          "label": "return cached AuthenticationState",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition__method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__false",
          "kind": "condition-false",
          "label": "continue to storage reads",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__true__method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__false__method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge__method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition__method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition__method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__true__method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__false__method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge__method:13yeu7e:getauthenticationstateasync__action_37_getauthenticationstateasync_await_37_2__await",
          "from": "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_37_getauthenticationstateasync_await_37_2__await",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_37_getauthenticationstateasync_await_37_2__await__method:13yeu7e:getauthenticationstateasync__action_37_external_call_37__linear",
          "from": "method:13yeu7e:getauthenticationstateasync__action_37_getauthenticationstateasync_await_37_2__await",
          "to": "method:13yeu7e:getauthenticationstateasync__action_37_external_call_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_37_external_call_37__linear__call_method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_37_external_call_37__linear",
          "to": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString",
          "kind": "call",
          "label": "TokenKey (StorageKeys.AuthToken)",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition__method:13yeu7e:getauthenticationstateasync__action_40_branch_40__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__true",
          "kind": "condition-true",
          "label": "try token-based: read email, tenant, roles",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition__method:13yeu7e:getauthenticationstateasync__action_40_branch_40__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__false",
          "kind": "condition-false",
          "label": "skip token-based",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__true__method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__false__method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge__method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition__method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition__method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__true__method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__false__method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge__method:13yeu7e:getauthenticationstateasync__action_43_getauthenticationstateasync_await_43_4__await",
          "from": "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_43_getauthenticationstateasync_await_43_4__await",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_43_getauthenticationstateasync_await_43_4__await__method:13yeu7e:getauthenticationstateasync__action_43_external_call_43__linear",
          "from": "method:13yeu7e:getauthenticationstateasync__action_43_getauthenticationstateasync_await_43_4__await",
          "to": "method:13yeu7e:getauthenticationstateasync__action_43_external_call_43__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_43_external_call_43__linear__call_method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_43_external_call_43__linear",
          "to": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_44_getauthenticationstateasync_await_44_5__await",
          "from": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_44_getauthenticationstateasync_await_44_5__await",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_44_getauthenticationstateasync_await_44_5__await__call_method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_44_getauthenticationstateasync_await_44_5__await",
          "to": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_45_getauthenticationstateasync_await_45_6__await",
          "from": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_45_getauthenticationstateasync_await_45_6__await",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_45_getauthenticationstateasync_await_45_6__await__call_method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_45_getauthenticationstateasync_await_45_6__await",
          "to": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition__method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__true",
          "kind": "condition-true",
          "label": "create cached state and return",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition__method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__false",
          "kind": "condition-false",
          "label": "fall through",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__true__method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__false__method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge__method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition__method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition__method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__true__method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__false__method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge__call_method:13yeu7e:getauthenticationstateasync__call_49_CreateState",
          "from": "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState",
          "kind": "call",
          "label": "emailResult.Value, tenantId or 'unknown', authType 'OpaqueBearer', roles string",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState__method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return",
          "from": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState",
          "to": "method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return",
          "kind": "return",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return__method:13yeu7e:getauthenticationstateasync__action_54_return_54__return",
          "from": "method:13yeu7e:getauthenticationstateasync__action_54_getauthenticationstateasync_return_54_8__return",
          "to": "method:13yeu7e:getauthenticationstateasync__action_54_return_54__return",
          "kind": "return",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_54_return_54__return__method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_54_return_54__return",
          "to": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition__method:13yeu7e:getauthenticationstateasync__action_58_branch_58__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__true",
          "kind": "condition-true",
          "label": "create cached state from cookie-style indicators and return",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition__method:13yeu7e:getauthenticationstateasync__action_58_branch_58__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__false",
          "kind": "condition-false",
          "label": "fall through to fallback",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__true__method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__false__method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge__method:13yeu7e:getauthenticationstateasync__action_59_getauthenticationstateasync_await_59_9__await",
          "from": "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_59_getauthenticationstateasync_await_59_9__await",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_59_getauthenticationstateasync_await_59_9__await__method:13yeu7e:getauthenticationstateasync__action_59_external_call_59__linear",
          "from": "method:13yeu7e:getauthenticationstateasync__action_59_getauthenticationstateasync_await_59_9__await",
          "to": "method:13yeu7e:getauthenticationstateasync__action_59_external_call_59__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_59_external_call_59__linear__call_method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_59_external_call_59__linear",
          "to": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserEmail (cookie fallback)",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition__method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition__method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__true__method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__false__method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge__method:13yeu7e:getauthenticationstateasync__action_62_getauthenticationstateasync_await_62_11__await",
          "from": "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_62_getauthenticationstateasync_await_62_11__await",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_62_getauthenticationstateasync_await_62_11__await__call_method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_62_getauthenticationstateasync_await_62_11__await",
          "to": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserTenant (cookie fallback)",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString__method:13yeu7e:getauthenticationstateasync__action_63_getauthenticationstateasync_await_63_12__await",
          "from": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__action_63_getauthenticationstateasync_await_63_12__await",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_63_getauthenticationstateasync_await_63_12__await__call_method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString",
          "from": "method:13yeu7e:getauthenticationstateasync__action_63_getauthenticationstateasync_await_63_12__await",
          "to": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString",
          "kind": "call",
          "label": "StorageKeys.UserRoles (cookie fallback)",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString__call_method:13yeu7e:getauthenticationstateasync__call_64_CreateState",
          "from": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString",
          "to": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState",
          "kind": "call",
          "label": "storedEmailResult.Value, tenantId or 'unknown', authType 'CookieAuth', roles string",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState__method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return",
          "from": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState",
          "to": "method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return__method:13yeu7e:getauthenticationstateasync__action_69_return_69__return",
          "from": "method:13yeu7e:getauthenticationstateasync__action_69_getauthenticationstateasync_return_69_13__return",
          "to": "method:13yeu7e:getauthenticationstateasync__action_69_return_69__return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_69_return_69__return__method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return",
          "from": "method:13yeu7e:getauthenticationstateasync__action_69_return_69__return",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return__method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_getauthenticationstateasync_return_76_14__return",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition",
          "kind": "fallback",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition__method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__true",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__true",
          "kind": "condition-true",
          "label": "true",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition__method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__false",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__condition",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__false",
          "kind": "condition-false",
          "label": "false",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__true__method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__true",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__false__method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__false",
          "to": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge__method:13yeu7e:getauthenticationstateasync__action_78_getauthenticationstateasync_catch_78_15__catch",
          "from": "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge",
          "to": "method:13yeu7e:getauthenticationstateasync__action_78_getauthenticationstateasync_catch_78_15__catch",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_78_getauthenticationstateasync_catch_78_15__catch__method:13yeu7e:getauthenticationstateasync__action_78_exception_handler_78__linear",
          "from": "method:13yeu7e:getauthenticationstateasync__action_78_getauthenticationstateasync_catch_78_15__catch",
          "to": "method:13yeu7e:getauthenticationstateasync__action_78_exception_handler_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__action_78_exception_handler_78__linear__method:13yeu7e:getauthenticationstateasync__action_80_getauthenticationstateasync_return_80_16__return",
          "from": "method:13yeu7e:getauthenticationstateasync__action_78_exception_handler_78__linear",
          "to": "method:13yeu7e:getauthenticationstateasync__action_80_getauthenticationstateasync_return_80_16__return",
          "kind": "return",
          "line": 80,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_37_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_43_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_44_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_45_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState__jump_NexusReader_UI_Shared_Services_NexusAuthenticationStateProvider_cs_CreateState",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_49_CreateState",
          "kind": "call-target",
          "targetNodeId": "method:16ct380:createstate",
          "targetPath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "targetHint": "CreateState",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target CreateState resolved to NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs.",
          "status": "resolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_59_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 59,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_62_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString__jump_NexusReader_Application_Abstractions_Services_INativeStorageService_cs_GetSecureString",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_63_GetSecureString",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services/INativeStorageService.cs",
          "targetHint": "GetSecureString",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target GetSecureString in NexusReader.Application.Abstractions.Services/INativeStorageService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState__jump_NexusReader_UI_Shared_Services_NexusAuthenticationStateProvider_cs_CreateState",
          "fromNodeId": "method:13yeu7e:getauthenticationstateasync__call_64_CreateState",
          "kind": "call-target",
          "targetNodeId": "method:16ct380:createstate",
          "targetPath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "targetHint": "CreateState",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target CreateState resolved to NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:13yeu7e:getauthenticationstateasync__action_35_guard_clause_35__merge",
        "method:13yeu7e:getauthenticationstateasync__action_35_getauthenticationstateasync_guard_clause_35_1__merge",
        "method:13yeu7e:getauthenticationstateasync__action_40_branch_40__merge",
        "method:13yeu7e:getauthenticationstateasync__action_41_getauthenticationstateasync_branch_41_3__merge",
        "method:13yeu7e:getauthenticationstateasync__action_47_guard_clause_47__merge",
        "method:13yeu7e:getauthenticationstateasync__action_47_getauthenticationstateasync_branch_47_7__merge",
        "method:13yeu7e:getauthenticationstateasync__action_58_branch_58__merge",
        "method:13yeu7e:getauthenticationstateasync__action_60_getauthenticationstateasync_branch_60_10__merge",
        "method:13yeu7e:getauthenticationstateasync__action_76_fallback_76__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 31,
        "end": 82
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 31,
          "summary": "Control-flow fragment extracted for method GetAuthenticationStateAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16ct380:createstate__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:16ct380:createstate",
      "ownerSymbolName": "CreateState",
      "entryNodeId": "method:16ct380:createstate__entry",
      "exitNodeIds": [
        "method:16ct380:createstate__action_103_createstate_return_103_2__return",
        "method:16ct380:createstate__action_103_return_103__return"
      ],
      "nodes": [
        {
          "id": "method:16ct380:createstate__entry",
          "kind": "entry",
          "label": "CreateState entry",
          "line": 84,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Builds an AuthenticationState from provided email, tenantId, authType and a comma-separated roles string."
        },
        {
          "id": "method:16ct380:createstate__action_86_mapping_86__linear",
          "kind": "statement",
          "label": "Create base claims (Name, Email, TenantId)",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "Adds ClaimTypes.Name, ClaimTypes.Email, 'TenantId'"
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(rolesStr)",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "rolesStr.Split(',', RemoveEmptyEntries) then foreach -> add ClaimTypes.Role"
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__true",
          "kind": "branch-true",
          "label": "add Claims for each role",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__false",
          "kind": "branch-false",
          "label": "skip roles",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(rolesStr)",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(rolesStr))"
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "kind": "loop-entry",
          "label": "var role in roles",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86,
          "detail": "foreach (var role in roles)"
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body",
          "kind": "loop-body",
          "label": "foreach (var role in roles)",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_entry",
          "kind": "loop-entry",
          "label": "Iterate roles and add claims",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "foreach (var role in roles) { claims.Add(new Claim(ClaimTypes.Role, role.Trim())); }"
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_body",
          "kind": "loop-body",
          "label": "foreach (var role in roles) { claims.Add(new Claim(ClaimTypes.Role, role.Trim())); }",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_102_creation_102__linear",
          "kind": "statement",
          "label": "Create ClaimsIdentity and AuthenticationState",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "new ClaimsIdentity(claims, authType) -> new AuthenticationState(new ClaimsPrincipal(identity))"
        },
        {
          "id": "method:16ct380:createstate__action_103_createstate_return_103_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "return new AuthenticationState(new ClaimsPrincipal(identity));"
        },
        {
          "id": "method:16ct380:createstate__action_103_return_103__return",
          "kind": "return",
          "label": "Return built AuthenticationState",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "AuthenticationState returned to caller"
        }
      ],
      "edges": [
        {
          "id": "method:16ct380:createstate__entry__method:16ct380:createstate__action_86_mapping_86__linear",
          "from": "method:16ct380:createstate__entry",
          "to": "method:16ct380:createstate__action_86_mapping_86__linear",
          "kind": "next",
          "line": 86,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_86_mapping_86__linear__method:16ct380:createstate__action_93_guard_clause_93__condition",
          "from": "method:16ct380:createstate__action_86_mapping_86__linear",
          "to": "method:16ct380:createstate__action_93_guard_clause_93__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__condition__method:16ct380:createstate__action_93_guard_clause_93__true",
          "from": "method:16ct380:createstate__action_93_guard_clause_93__condition",
          "to": "method:16ct380:createstate__action_93_guard_clause_93__true",
          "kind": "condition-true",
          "label": "add Claims for each role",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__condition__method:16ct380:createstate__action_93_guard_clause_93__false",
          "from": "method:16ct380:createstate__action_93_guard_clause_93__condition",
          "to": "method:16ct380:createstate__action_93_guard_clause_93__false",
          "kind": "condition-false",
          "label": "skip roles",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__true__method:16ct380:createstate__action_93_guard_clause_93__merge",
          "from": "method:16ct380:createstate__action_93_guard_clause_93__true",
          "to": "method:16ct380:createstate__action_93_guard_clause_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__false__method:16ct380:createstate__action_93_guard_clause_93__merge",
          "from": "method:16ct380:createstate__action_93_guard_clause_93__false",
          "to": "method:16ct380:createstate__action_93_guard_clause_93__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_93_guard_clause_93__merge__method:16ct380:createstate__action_93_createstate_branch_93_0__condition",
          "from": "method:16ct380:createstate__action_93_guard_clause_93__merge",
          "to": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition__method:16ct380:createstate__action_93_createstate_branch_93_0__true",
          "from": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition",
          "to": "method:16ct380:createstate__action_93_createstate_branch_93_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition__method:16ct380:createstate__action_93_createstate_branch_93_0__false",
          "from": "method:16ct380:createstate__action_93_createstate_branch_93_0__condition",
          "to": "method:16ct380:createstate__action_93_createstate_branch_93_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__true__method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "from": "method:16ct380:createstate__action_93_createstate_branch_93_0__true",
          "to": "method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__false__method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "from": "method:16ct380:createstate__action_93_createstate_branch_93_0__false",
          "to": "method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.78
        },
        {
          "id": "method:16ct380:createstate__action_93_createstate_branch_93_0__merge__method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "from": "method:16ct380:createstate__action_93_createstate_branch_93_0__merge",
          "to": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry__method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body",
          "from": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "to": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body",
          "kind": "loop-body",
          "label": "var role in roles",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body__method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "from": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body",
          "to": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry__method:16ct380:createstate__action_96_createstate_loop_96_1__loop_exit",
          "from": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
          "to": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_exit__method:16ct380:createstate__action_96_loop_96__loop_entry",
          "from": "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_exit",
          "to": "method:16ct380:createstate__action_96_loop_96__loop_entry",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_entry__method:16ct380:createstate__action_96_loop_96__loop_body",
          "from": "method:16ct380:createstate__action_96_loop_96__loop_entry",
          "to": "method:16ct380:createstate__action_96_loop_96__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_body__method:16ct380:createstate__action_96_loop_96__loop_entry",
          "from": "method:16ct380:createstate__action_96_loop_96__loop_body",
          "to": "method:16ct380:createstate__action_96_loop_96__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_entry__method:16ct380:createstate__action_96_loop_96__loop_exit",
          "from": "method:16ct380:createstate__action_96_loop_96__loop_entry",
          "to": "method:16ct380:createstate__action_96_loop_96__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_96_loop_96__loop_exit__method:16ct380:createstate__action_102_creation_102__linear",
          "from": "method:16ct380:createstate__action_96_loop_96__loop_exit",
          "to": "method:16ct380:createstate__action_102_creation_102__linear",
          "kind": "next",
          "line": 102,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_102_creation_102__linear__method:16ct380:createstate__action_103_createstate_return_103_2__return",
          "from": "method:16ct380:createstate__action_102_creation_102__linear",
          "to": "method:16ct380:createstate__action_103_createstate_return_103_2__return",
          "kind": "return",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16ct380:createstate__action_103_createstate_return_103_2__return__method:16ct380:createstate__action_103_return_103__return",
          "from": "method:16ct380:createstate__action_103_createstate_return_103_2__return",
          "to": "method:16ct380:createstate__action_103_return_103__return",
          "kind": "return",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:16ct380:createstate__action_96_createstate_loop_96_1__loop_body__method:16ct380:createstate__action_96_createstate_loop_96_1__loop_entry",
        "method:16ct380:createstate__action_96_loop_96__loop_body__method:16ct380:createstate__action_96_loop_96__loop_entry"
      ],
      "mergeNodeIds": [
        "method:16ct380:createstate__action_93_guard_clause_93__merge",
        "method:16ct380:createstate__action_93_createstate_branch_93_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 84,
        "end": 104
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 84,
          "summary": "Control-flow fragment extracted for method CreateState.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1csperg:notifyuserauthentication__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:1csperg:notifyuserauthentication",
      "ownerSymbolName": "NotifyUserAuthentication",
      "entryNodeId": "method:1csperg:notifyuserauthentication__entry",
      "exitNodeIds": [
        "method:1csperg:notifyuserauthentication__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1csperg:notifyuserauthentication__entry",
          "kind": "entry",
          "label": "NotifyUserAuthentication entry",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Updates cached AuthenticationState to an authenticated state and notifies consumers (used after successful login)."
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_106_notifyuserauthentication_notification_106_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83,
          "detail": "public void NotifyUserAuthentication(string email, string tenantId, string rolesStr = \"\")"
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_108_cache_write_108__linear",
          "kind": "db-write",
          "label": "Set cached authenticated state",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_cachedState = CreateState(...)"
        },
        {
          "id": "method:1csperg:notifyuserauthentication__call_108_CreateState",
          "kind": "call",
          "label": "CreateState",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88,
          "detail": "email, tenantId, authType 'OpaqueBearer', rolesStr"
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_109_notifyuserauthentication_notification_109_1__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83,
          "detail": "NotifyAuthenticationStateChanged(Task.FromResult(_cachedState));"
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_109_notification_109__linear",
          "kind": "publish-event",
          "label": "Notify consumers of authentication change",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "NotifyAuthenticationStateChanged(Task.FromResult(_cachedState)) (framework method)"
        },
        {
          "id": "method:1csperg:notifyuserauthentication__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1csperg:notifyuserauthentication__entry__method:1csperg:notifyuserauthentication__action_106_notifyuserauthentication_notification_106_0__linear",
          "from": "method:1csperg:notifyuserauthentication__entry",
          "to": "method:1csperg:notifyuserauthentication__action_106_notifyuserauthentication_notification_106_0__linear",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_106_notifyuserauthentication_notification_106_0__linear__method:1csperg:notifyuserauthentication__action_108_cache_write_108__linear",
          "from": "method:1csperg:notifyuserauthentication__action_106_notifyuserauthentication_notification_106_0__linear",
          "to": "method:1csperg:notifyuserauthentication__action_108_cache_write_108__linear",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_108_cache_write_108__linear__call_method:1csperg:notifyuserauthentication__call_108_CreateState",
          "from": "method:1csperg:notifyuserauthentication__action_108_cache_write_108__linear",
          "to": "method:1csperg:notifyuserauthentication__call_108_CreateState",
          "kind": "call",
          "label": "email, tenantId, authType 'OpaqueBearer', rolesStr",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1csperg:notifyuserauthentication__call_108_CreateState__method:1csperg:notifyuserauthentication__action_109_notifyuserauthentication_notification_109_1__linear",
          "from": "method:1csperg:notifyuserauthentication__call_108_CreateState",
          "to": "method:1csperg:notifyuserauthentication__action_109_notifyuserauthentication_notification_109_1__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_109_notifyuserauthentication_notification_109_1__linear__method:1csperg:notifyuserauthentication__action_109_notification_109__linear",
          "from": "method:1csperg:notifyuserauthentication__action_109_notifyuserauthentication_notification_109_1__linear",
          "to": "method:1csperg:notifyuserauthentication__action_109_notification_109__linear",
          "kind": "next",
          "line": 109,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1csperg:notifyuserauthentication__action_109_notification_109__linear__implicit_return",
          "from": "method:1csperg:notifyuserauthentication__action_109_notification_109__linear",
          "to": "method:1csperg:notifyuserauthentication__implicit_return",
          "kind": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1csperg:notifyuserauthentication__call_108_CreateState__jump_NexusReader_UI_Shared_Services_NexusAuthenticationStateProvider_cs_CreateState",
          "fromNodeId": "method:1csperg:notifyuserauthentication__call_108_CreateState",
          "kind": "call-target",
          "targetNodeId": "method:16ct380:createstate",
          "targetPath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "targetHint": "CreateState",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "reason": "Call target CreateState resolved to NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 106,
        "end": 110
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 106,
          "summary": "Control-flow fragment extracted for method NotifyUserAuthentication.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ppivt7:notifyuserlogout__fragment",
      "ownerFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "ownerSymbolId": "method:ppivt7:notifyuserlogout",
      "ownerSymbolName": "NotifyUserLogout",
      "entryNodeId": "method:ppivt7:notifyuserlogout__entry",
      "exitNodeIds": [
        "method:ppivt7:notifyuserlogout__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ppivt7:notifyuserlogout__entry",
          "kind": "entry",
          "label": "NotifyUserLogout entry",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.99,
          "detail": "Clears cached authentication and notifies consumers that the user is logged out (returns anonymous principal)."
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_112_notifyuserlogout_notification_112_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83,
          "detail": "public void NotifyUserLogout()"
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_114_cache_write_114__linear",
          "kind": "db-write",
          "label": "Clear cached state",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "_cachedState = null"
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_115_creation_115__linear",
          "kind": "statement",
          "label": "Create anonymous guest principal",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "new ClaimsPrincipal(new ClaimsIdentity())"
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_116_notifyuserlogout_notification_116_1__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83,
          "detail": "NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(guest)));"
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_116_notification_116__linear",
          "kind": "publish-event",
          "label": "Notify consumers of logout",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7,
          "detail": "NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(guest))) (framework method)"
        },
        {
          "id": "method:ppivt7:notifyuserlogout__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ppivt7:notifyuserlogout__entry__method:ppivt7:notifyuserlogout__action_112_notifyuserlogout_notification_112_0__linear",
          "from": "method:ppivt7:notifyuserlogout__entry",
          "to": "method:ppivt7:notifyuserlogout__action_112_notifyuserlogout_notification_112_0__linear",
          "kind": "next",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_112_notifyuserlogout_notification_112_0__linear__method:ppivt7:notifyuserlogout__action_114_cache_write_114__linear",
          "from": "method:ppivt7:notifyuserlogout__action_112_notifyuserlogout_notification_112_0__linear",
          "to": "method:ppivt7:notifyuserlogout__action_114_cache_write_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_114_cache_write_114__linear__method:ppivt7:notifyuserlogout__action_115_creation_115__linear",
          "from": "method:ppivt7:notifyuserlogout__action_114_cache_write_114__linear",
          "to": "method:ppivt7:notifyuserlogout__action_115_creation_115__linear",
          "kind": "next",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_115_creation_115__linear__method:ppivt7:notifyuserlogout__action_116_notifyuserlogout_notification_116_1__linear",
          "from": "method:ppivt7:notifyuserlogout__action_115_creation_115__linear",
          "to": "method:ppivt7:notifyuserlogout__action_116_notifyuserlogout_notification_116_1__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.83
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_116_notifyuserlogout_notification_116_1__linear__method:ppivt7:notifyuserlogout__action_116_notification_116__linear",
          "from": "method:ppivt7:notifyuserlogout__action_116_notifyuserlogout_notification_116_1__linear",
          "to": "method:ppivt7:notifyuserlogout__action_116_notification_116__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ppivt7:notifyuserlogout__action_116_notification_116__linear__implicit_return",
          "from": "method:ppivt7:notifyuserlogout__action_116_notification_116__linear",
          "to": "method:ppivt7:notifyuserlogout__implicit_return",
          "kind": "return",
          "line": 117,
          "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 112,
        "end": 117
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs",
          "line": 112,
          "summary": "Control-flow fragment extracted for method NotifyUserLogout.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8psub5:requestquiz__fragment",
      "ownerFileId": "file:3xx07l:quizstateservice-cs",
      "ownerSymbolId": "method:8psub5:requestquiz",
      "ownerSymbolName": "RequestQuiz",
      "entryNodeId": "method:8psub5:requestquiz__entry",
      "exitNodeIds": [
        "method:8psub5:requestquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:8psub5:requestquiz__entry",
          "kind": "entry",
          "label": "RequestQuiz entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.99,
          "detail": "Sets the current quiz block id and notifies subscribers that a quiz was requested."
        },
        {
          "id": "method:8psub5:requestquiz__action_17_assignment_17__linear",
          "kind": "statement",
          "label": "Set CurrentQuizBlockId",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "CurrentQuizBlockId = blockId"
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_await_18_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81,
          "detail": "if (OnQuizRequested != null) await OnQuizRequested(blockId);"
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__condition",
          "kind": "condition",
          "label": "OnQuizRequested != null",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "if (OnQuizRequested != null) await OnQuizRequested(blockId);"
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition",
          "kind": "condition",
          "label": "OnQuizRequested != null) await OnQuizRequested(blockId",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78,
          "detail": "if (OnQuizRequested != null) await OnQuizRequested(blockId);"
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke_",
          "kind": "call",
          "label": "OnQuizRequested (invoke)",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88,
          "detail": "blockId (string) passed to subscribers"
        },
        {
          "id": "method:8psub5:requestquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:8psub5:requestquiz__entry__method:8psub5:requestquiz__action_17_assignment_17__linear",
          "from": "method:8psub5:requestquiz__entry",
          "to": "method:8psub5:requestquiz__action_17_assignment_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_17_assignment_17__linear__method:8psub5:requestquiz__action_18_requestquiz_await_18_1__await",
          "from": "method:8psub5:requestquiz__action_17_assignment_17__linear",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_await_18_1__await",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_await_18_1__await__method:8psub5:requestquiz__action_18_branch_18__condition",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_await_18_1__await",
          "to": "method:8psub5:requestquiz__action_18_branch_18__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__condition__method:8psub5:requestquiz__action_18_branch_18__true",
          "from": "method:8psub5:requestquiz__action_18_branch_18__condition",
          "to": "method:8psub5:requestquiz__action_18_branch_18__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__condition__method:8psub5:requestquiz__action_18_branch_18__false",
          "from": "method:8psub5:requestquiz__action_18_branch_18__condition",
          "to": "method:8psub5:requestquiz__action_18_branch_18__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__true__method:8psub5:requestquiz__action_18_branch_18__merge",
          "from": "method:8psub5:requestquiz__action_18_branch_18__true",
          "to": "method:8psub5:requestquiz__action_18_branch_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__false__method:8psub5:requestquiz__action_18_branch_18__merge",
          "from": "method:8psub5:requestquiz__action_18_branch_18__false",
          "to": "method:8psub5:requestquiz__action_18_branch_18__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8psub5:requestquiz__action_18_branch_18__merge__method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition",
          "from": "method:8psub5:requestquiz__action_18_branch_18__merge",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition__method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__true",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition__method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__false",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__condition",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__true__method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__true",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__false__method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__false",
          "to": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge__call_method:8psub5:requestquiz__call_18_OnQuizRequested_invoke_",
          "from": "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge",
          "to": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke_",
          "kind": "call",
          "label": "blockId (string) passed to subscribers",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke___implicit_return",
          "from": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke_",
          "to": "method:8psub5:requestquiz__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke___jump_unknown_OnQuizRequested_invoke_",
          "fromNodeId": "method:8psub5:requestquiz__call_18_OnQuizRequested_invoke_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnQuizRequested (invoke)",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "reason": "Call target OnQuizRequested (invoke) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:8psub5:requestquiz__action_18_branch_18__merge",
        "method:8psub5:requestquiz__action_18_requestquiz_branch_18_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 15,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method RequestQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:o6n51:setquiz__fragment",
      "ownerFileId": "file:3xx07l:quizstateservice-cs",
      "ownerSymbolId": "method:o6n51:setquiz",
      "ownerSymbolName": "SetQuiz",
      "entryNodeId": "method:o6n51:setquiz__entry",
      "exitNodeIds": [
        "method:o6n51:setquiz__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:o6n51:setquiz__entry",
          "kind": "entry",
          "label": "SetQuiz entry",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.99,
          "detail": "Updates the current quiz and related flags, stops hydrating state, and notifies subscribers of the update."
        },
        {
          "id": "method:o6n51:setquiz__action_23_assignment_23__linear",
          "kind": "statement",
          "label": "Set CurrentQuizBlockId",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "CurrentQuizBlockId = blockId"
        },
        {
          "id": "method:o6n51:setquiz__action_24_assignment_24__linear",
          "kind": "statement",
          "label": "Set CurrentQuiz",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "CurrentQuiz = quiz"
        },
        {
          "id": "method:o6n51:setquiz__action_25_assignment_25__linear",
          "kind": "statement",
          "label": "Clear IsHydrating",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "IsHydrating = false"
        },
        {
          "id": "method:o6n51:setquiz__action_26_assignment_26__linear",
          "kind": "statement",
          "label": "Set HasNewQuiz based on quiz presence",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "HasNewQuiz = quiz != null"
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_await_27_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null) await OnQuizUpdated(",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "OnQuizUpdated (invoke)",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88,
          "detail": "no parameters; notifies subscribers of state change"
        },
        {
          "id": "method:o6n51:setquiz__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:o6n51:setquiz__entry__method:o6n51:setquiz__action_23_assignment_23__linear",
          "from": "method:o6n51:setquiz__entry",
          "to": "method:o6n51:setquiz__action_23_assignment_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_23_assignment_23__linear__method:o6n51:setquiz__action_24_assignment_24__linear",
          "from": "method:o6n51:setquiz__action_23_assignment_23__linear",
          "to": "method:o6n51:setquiz__action_24_assignment_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_24_assignment_24__linear__method:o6n51:setquiz__action_25_assignment_25__linear",
          "from": "method:o6n51:setquiz__action_24_assignment_24__linear",
          "to": "method:o6n51:setquiz__action_25_assignment_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_25_assignment_25__linear__method:o6n51:setquiz__action_26_assignment_26__linear",
          "from": "method:o6n51:setquiz__action_25_assignment_25__linear",
          "to": "method:o6n51:setquiz__action_26_assignment_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_26_assignment_26__linear__method:o6n51:setquiz__action_27_setquiz_await_27_1__await",
          "from": "method:o6n51:setquiz__action_26_assignment_26__linear",
          "to": "method:o6n51:setquiz__action_27_setquiz_await_27_1__await",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_await_27_1__await__method:o6n51:setquiz__action_27_branch_27__condition",
          "from": "method:o6n51:setquiz__action_27_setquiz_await_27_1__await",
          "to": "method:o6n51:setquiz__action_27_branch_27__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__condition__method:o6n51:setquiz__action_27_branch_27__true",
          "from": "method:o6n51:setquiz__action_27_branch_27__condition",
          "to": "method:o6n51:setquiz__action_27_branch_27__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__condition__method:o6n51:setquiz__action_27_branch_27__false",
          "from": "method:o6n51:setquiz__action_27_branch_27__condition",
          "to": "method:o6n51:setquiz__action_27_branch_27__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__true__method:o6n51:setquiz__action_27_branch_27__merge",
          "from": "method:o6n51:setquiz__action_27_branch_27__true",
          "to": "method:o6n51:setquiz__action_27_branch_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__false__method:o6n51:setquiz__action_27_branch_27__merge",
          "from": "method:o6n51:setquiz__action_27_branch_27__false",
          "to": "method:o6n51:setquiz__action_27_branch_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:o6n51:setquiz__action_27_branch_27__merge__method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition",
          "from": "method:o6n51:setquiz__action_27_branch_27__merge",
          "to": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition__method:o6n51:setquiz__action_27_setquiz_branch_27_0__true",
          "from": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition",
          "to": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition__method:o6n51:setquiz__action_27_setquiz_branch_27_0__false",
          "from": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__condition",
          "to": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__true__method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "from": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__true",
          "to": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__false__method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "from": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__false",
          "to": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge__call_method:o6n51:setquiz__call_27_OnQuizUpdated_invoke_",
          "from": "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge",
          "to": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "no parameters; notifies subscribers of state change",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke___implicit_return",
          "from": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke_",
          "to": "method:o6n51:setquiz__implicit_return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke___jump_unknown_OnQuizUpdated_invoke_",
          "fromNodeId": "method:o6n51:setquiz__call_27_OnQuizUpdated_invoke_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnQuizUpdated (invoke)",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "reason": "Call target OnQuizUpdated (invoke) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:o6n51:setquiz__action_27_branch_27__merge",
        "method:o6n51:setquiz__action_27_setquiz_branch_27_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 21,
        "end": 28
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method SetQuiz.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:gisz9i:sethydrating__fragment",
      "ownerFileId": "file:3xx07l:quizstateservice-cs",
      "ownerSymbolId": "method:gisz9i:sethydrating",
      "ownerSymbolName": "SetHydrating",
      "entryNodeId": "method:gisz9i:sethydrating__entry",
      "exitNodeIds": [
        "method:gisz9i:sethydrating__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:gisz9i:sethydrating__entry",
          "kind": "entry",
          "label": "SetHydrating entry",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.99,
          "detail": "Sets the IsHydrating flag and notifies subscribers of the update."
        },
        {
          "id": "method:gisz9i:sethydrating__action_32_assignment_32__linear",
          "kind": "statement",
          "label": "Set IsHydrating",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "IsHydrating = hydrating"
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_await_33_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__merge",
          "kind": "statement",
          "label": "merge",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null) await OnQuizUpdated(",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "OnQuizUpdated (invoke)",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88,
          "detail": "no parameters; notifies subscribers that hydration state changed"
        },
        {
          "id": "method:gisz9i:sethydrating__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:gisz9i:sethydrating__entry__method:gisz9i:sethydrating__action_32_assignment_32__linear",
          "from": "method:gisz9i:sethydrating__entry",
          "to": "method:gisz9i:sethydrating__action_32_assignment_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_32_assignment_32__linear__method:gisz9i:sethydrating__action_33_sethydrating_await_33_1__await",
          "from": "method:gisz9i:sethydrating__action_32_assignment_32__linear",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_await_33_1__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_await_33_1__await__method:gisz9i:sethydrating__action_33_branch_33__condition",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_await_33_1__await",
          "to": "method:gisz9i:sethydrating__action_33_branch_33__condition",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__condition__method:gisz9i:sethydrating__action_33_branch_33__true",
          "from": "method:gisz9i:sethydrating__action_33_branch_33__condition",
          "to": "method:gisz9i:sethydrating__action_33_branch_33__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__condition__method:gisz9i:sethydrating__action_33_branch_33__false",
          "from": "method:gisz9i:sethydrating__action_33_branch_33__condition",
          "to": "method:gisz9i:sethydrating__action_33_branch_33__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__true__method:gisz9i:sethydrating__action_33_branch_33__merge",
          "from": "method:gisz9i:sethydrating__action_33_branch_33__true",
          "to": "method:gisz9i:sethydrating__action_33_branch_33__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__false__method:gisz9i:sethydrating__action_33_branch_33__merge",
          "from": "method:gisz9i:sethydrating__action_33_branch_33__false",
          "to": "method:gisz9i:sethydrating__action_33_branch_33__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_branch_33__merge__method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition",
          "from": "method:gisz9i:sethydrating__action_33_branch_33__merge",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition__method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__true",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition__method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__false",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__condition",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__true__method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__true",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__false__method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__false",
          "to": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge__call_method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke_",
          "from": "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge",
          "to": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "no parameters; notifies subscribers that hydration state changed",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke___implicit_return",
          "from": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke_",
          "to": "method:gisz9i:sethydrating__implicit_return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke___jump_unknown_OnQuizUpdated_invoke_",
          "fromNodeId": "method:gisz9i:sethydrating__call_33_OnQuizUpdated_invoke_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnQuizUpdated (invoke)",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "reason": "Call target OnQuizUpdated (invoke) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:gisz9i:sethydrating__action_33_branch_33__merge",
        "method:gisz9i:sethydrating__action_33_sethydrating_branch_33_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 30,
        "end": 34
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 30,
          "summary": "Control-flow fragment extracted for method SetHydrating.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13pj2z1:markquizasseen__fragment",
      "ownerFileId": "file:3xx07l:quizstateservice-cs",
      "ownerSymbolId": "method:13pj2z1:markquizasseen",
      "ownerSymbolName": "MarkQuizAsSeen",
      "entryNodeId": "method:13pj2z1:markquizasseen__entry",
      "exitNodeIds": [
        "method:13pj2z1:markquizasseen__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13pj2z1:markquizasseen__entry",
          "kind": "entry",
          "label": "MarkQuizAsSeen entry",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.99,
          "detail": "If there is a new quiz flag, clears it and notifies subscribers."
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition",
          "kind": "condition",
          "label": "!HasNewQuiz",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "if (!HasNewQuiz) return;"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__true",
          "kind": "branch-true",
          "label": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition",
          "kind": "condition",
          "label": "!HasNewQuiz",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9,
          "detail": "if (!HasNewQuiz) return;"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_39_assignment_39__linear",
          "kind": "statement",
          "label": "Clear HasNewQuiz",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "HasNewQuiz = false"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_await_40_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition",
          "kind": "condition",
          "label": "OnQuizUpdated != null) await OnQuizUpdated(",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78,
          "detail": "if (OnQuizUpdated != null) await OnQuizUpdated();"
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "OnQuizUpdated (invoke)",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88,
          "detail": "no parameters; notifies subscribers that HasNewQuiz changed"
        },
        {
          "id": "method:13pj2z1:markquizasseen__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13pj2z1:markquizasseen__entry__method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition",
          "from": "method:13pj2z1:markquizasseen__entry",
          "to": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition__method:13pj2z1:markquizasseen__action_38_guard_clause_38__true",
          "from": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition",
          "to": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__true",
          "kind": "condition-true",
          "label": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition__method:13pj2z1:markquizasseen__action_38_guard_clause_38__false",
          "from": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__condition",
          "to": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__true__method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "from": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__true",
          "to": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__false__method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "from": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__false",
          "to": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge__method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition",
          "from": "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
          "to": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition__method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__true",
          "from": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition",
          "to": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition__method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__false",
          "from": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__condition",
          "to": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__true__method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "from": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__true",
          "to": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__false__method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "from": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__false",
          "to": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge__method:13pj2z1:markquizasseen__action_39_assignment_39__linear",
          "from": "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
          "to": "method:13pj2z1:markquizasseen__action_39_assignment_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_39_assignment_39__linear__method:13pj2z1:markquizasseen__action_40_markquizasseen_await_40_2__await",
          "from": "method:13pj2z1:markquizasseen__action_39_assignment_39__linear",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_await_40_2__await",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_await_40_2__await__method:13pj2z1:markquizasseen__action_40_branch_40__condition",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_await_40_2__await",
          "to": "method:13pj2z1:markquizasseen__action_40_branch_40__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__condition__method:13pj2z1:markquizasseen__action_40_branch_40__true",
          "from": "method:13pj2z1:markquizasseen__action_40_branch_40__condition",
          "to": "method:13pj2z1:markquizasseen__action_40_branch_40__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__condition__method:13pj2z1:markquizasseen__action_40_branch_40__false",
          "from": "method:13pj2z1:markquizasseen__action_40_branch_40__condition",
          "to": "method:13pj2z1:markquizasseen__action_40_branch_40__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__true__method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "from": "method:13pj2z1:markquizasseen__action_40_branch_40__true",
          "to": "method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__false__method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "from": "method:13pj2z1:markquizasseen__action_40_branch_40__false",
          "to": "method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_branch_40__merge__method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition",
          "from": "method:13pj2z1:markquizasseen__action_40_branch_40__merge",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition__method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__true",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition__method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__false",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__condition",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__true__method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__true",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__false__method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__false",
          "to": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge__call_method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke_",
          "from": "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge",
          "to": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke_",
          "kind": "call",
          "label": "no parameters; notifies subscribers that HasNewQuiz changed",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke___implicit_return",
          "from": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke_",
          "to": "method:13pj2z1:markquizasseen__implicit_return",
          "kind": "return",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke___jump_unknown_OnQuizUpdated_invoke_",
          "fromNodeId": "method:13pj2z1:markquizasseen__call_40_OnQuizUpdated_invoke_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "OnQuizUpdated (invoke)",
          "line": 40,
          "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "reason": "Call target OnQuizUpdated (invoke) in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:13pj2z1:markquizasseen__action_38_guard_clause_38__merge",
        "method:13pj2z1:markquizasseen__action_38_markquizasseen_guard_clause_38_0__merge",
        "method:13pj2z1:markquizasseen__action_40_branch_40__merge",
        "method:13pj2z1:markquizasseen__action_40_markquizasseen_branch_40_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 36,
        "end": 41
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/QuizStateService.cs",
          "line": 36,
          "summary": "Control-flow fragment extracted for method MarkQuizAsSeen.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:qegcuf:notifynodeselected__fragment",
      "ownerFileId": "file:1jnstne:readerinteractionservice-cs",
      "ownerSymbolId": "method:qegcuf:notifynodeselected",
      "ownerSymbolName": "NotifyNodeSelected",
      "entryNodeId": "method:qegcuf:notifynodeselected__entry",
      "exitNodeIds": [
        "method:qegcuf:notifynodeselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:qegcuf:notifynodeselected__entry",
          "kind": "entry",
          "label": "NotifyNodeSelected entry",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Raises the OnNodeSelected event if any subscriber is attached."
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.83,
          "detail": "public async Task NotifyNodeSelected(string nodeId)"
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_await_12_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81,
          "detail": "if (OnNodeSelected != null) await OnNodeSelected(nodeId);"
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_invoke_event_12__linear",
          "kind": "statement",
          "label": "Invoke OnNodeSelected",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "await OnNodeSelected(nodeId)"
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition",
          "kind": "condition",
          "label": "OnNodeSelected != null) await OnNodeSelected(nodeId",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78,
          "detail": "if (OnNodeSelected != null) await OnNodeSelected(nodeId);"
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition",
          "kind": "condition",
          "label": "OnNodeSelected != null",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "if (OnNodeSelected != null) await OnNodeSelected(nodeId);"
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "kind": "statement",
          "label": "merge",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected",
          "kind": "call",
          "label": "OnNodeSelected",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88,
          "detail": "nodeId (string)"
        },
        {
          "id": "method:qegcuf:notifynodeselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:qegcuf:notifynodeselected__entry__method:qegcuf:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "from": "method:qegcuf:notifynodeselected__entry",
          "to": "method:qegcuf:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear__method:qegcuf:notifynodeselected__action_12_notifynodeselected_await_12_2__await",
          "from": "method:qegcuf:notifynodeselected__action_10_notifynodeselected_notification_10_0__linear",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_await_12_2__await",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_await_12_2__await__method:qegcuf:notifynodeselected__action_12_invoke_event_12__linear",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_await_12_2__await",
          "to": "method:qegcuf:notifynodeselected__action_12_invoke_event_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_invoke_event_12__linear__method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition",
          "from": "method:qegcuf:notifynodeselected__action_12_invoke_event_12__linear",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition__method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__true",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition__method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__false",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__condition",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__true__method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__true",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__false__method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__false",
          "to": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge__method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition",
          "from": "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
          "to": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition__method:qegcuf:notifynodeselected__action_12_guard_clause_12__true",
          "from": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition",
          "to": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition__method:qegcuf:notifynodeselected__action_12_guard_clause_12__false",
          "from": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__condition",
          "to": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__true__method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "from": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__true",
          "to": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__false__method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "from": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__false",
          "to": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge__call_method:qegcuf:notifynodeselected__call_12_OnNodeSelected",
          "from": "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge",
          "to": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected",
          "kind": "call",
          "label": "nodeId (string)",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected__implicit_return",
          "from": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected",
          "to": "method:qegcuf:notifynodeselected__implicit_return",
          "kind": "return",
          "line": 13,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected__jump_NexusReader_UI_Shared_Services_ReaderInteractionService_cs_OnNodeSelected",
          "fromNodeId": "method:qegcuf:notifynodeselected__call_12_OnNodeSelected",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "targetHint": "OnNodeSelected",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "reason": "Call target OnNodeSelected in NexusReader.UI.Shared/Services/ReaderInteractionService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:qegcuf:notifynodeselected__action_12_notifynodeselected_branch_12_1__merge",
        "method:qegcuf:notifynodeselected__action_12_guard_clause_12__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 10,
        "end": 13
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 10,
          "summary": "Control-flow fragment extracted for method NotifyNodeSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:nvgthi:requestscrolltoblock__fragment",
      "ownerFileId": "file:1jnstne:readerinteractionservice-cs",
      "ownerSymbolId": "method:nvgthi:requestscrolltoblock",
      "ownerSymbolName": "RequestScrollToBlock",
      "entryNodeId": "method:nvgthi:requestscrolltoblock__entry",
      "exitNodeIds": [
        "method:nvgthi:requestscrolltoblock__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:nvgthi:requestscrolltoblock__entry",
          "kind": "entry",
          "label": "RequestScrollToBlock entry",
          "line": 15,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Requests scrolling to a block by raising the OnScrollToBlockRequested event when subscribers exist."
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_await_17_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81,
          "detail": "if (OnScrollToBlockRequested != null) await OnScrollToBlockRequested(blockId);"
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_invoke_event_17__linear",
          "kind": "statement",
          "label": "Invoke OnScrollToBlockRequested",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "await OnScrollToBlockRequested(blockId)"
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition",
          "kind": "condition",
          "label": "OnScrollToBlockRequested != null) await OnScrollToBlockRequested(blockId",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78,
          "detail": "if (OnScrollToBlockRequested != null) await OnScrollToBlockRequested(blockId);"
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition",
          "kind": "condition",
          "label": "OnScrollToBlockRequested != null",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "if (OnScrollToBlockRequested != null) await OnScrollToBlockRequested(blockId);"
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested",
          "kind": "call",
          "label": "OnScrollToBlockRequested",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88,
          "detail": "blockId (string)"
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:nvgthi:requestscrolltoblock__entry__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_await_17_1__await",
          "from": "method:nvgthi:requestscrolltoblock__entry",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_await_17_1__await",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_await_17_1__await__method:nvgthi:requestscrolltoblock__action_17_invoke_event_17__linear",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_await_17_1__await",
          "to": "method:nvgthi:requestscrolltoblock__action_17_invoke_event_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_invoke_event_17__linear__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition",
          "from": "method:nvgthi:requestscrolltoblock__action_17_invoke_event_17__linear",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__true",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__false",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__condition",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__true__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__true",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__false__method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__false",
          "to": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge__method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition",
          "from": "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
          "to": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition__method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__true",
          "from": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition",
          "to": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition__method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__false",
          "from": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__condition",
          "to": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__true__method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "from": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__true",
          "to": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__false__method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "from": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__false",
          "to": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge__call_method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested",
          "from": "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge",
          "to": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested",
          "kind": "call",
          "label": "blockId (string)",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested__implicit_return",
          "from": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested",
          "to": "method:nvgthi:requestscrolltoblock__implicit_return",
          "kind": "return",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested__jump_NexusReader_UI_Shared_Services_ReaderInteractionService_cs_OnScrollToBlockRequested",
          "fromNodeId": "method:nvgthi:requestscrolltoblock__call_17_OnScrollToBlockRequested",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "targetHint": "OnScrollToBlockRequested",
          "line": 17,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "reason": "Call target OnScrollToBlockRequested in NexusReader.UI.Shared/Services/ReaderInteractionService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:nvgthi:requestscrolltoblock__action_17_requestscrolltoblock_branch_17_0__merge",
        "method:nvgthi:requestscrolltoblock__action_17_guard_clause_17__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 15,
        "end": 18
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method RequestScrollToBlock.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1om56u0:requesthighlightblock__fragment",
      "ownerFileId": "file:1jnstne:readerinteractionservice-cs",
      "ownerSymbolId": "method:1om56u0:requesthighlightblock",
      "ownerSymbolName": "RequestHighlightBlock",
      "entryNodeId": "method:1om56u0:requesthighlightblock__entry",
      "exitNodeIds": [
        "method:1om56u0:requesthighlightblock__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1om56u0:requesthighlightblock__entry",
          "kind": "entry",
          "label": "RequestHighlightBlock entry",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Requests highlight of a block by raising the OnHighlightBlockRequested event when subscribers exist."
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_await_22_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81,
          "detail": "if (OnHighlightBlockRequested != null) await OnHighlightBlockRequested(blockId);"
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_invoke_event_22__linear",
          "kind": "statement",
          "label": "Invoke OnHighlightBlockRequested",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "await OnHighlightBlockRequested(blockId)"
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition",
          "kind": "condition",
          "label": "OnHighlightBlockRequested != null) await OnHighlightBlockRequested(blockId",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78,
          "detail": "if (OnHighlightBlockRequested != null) await OnHighlightBlockRequested(blockId);"
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition",
          "kind": "condition",
          "label": "OnHighlightBlockRequested != null",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "if (OnHighlightBlockRequested != null) await OnHighlightBlockRequested(blockId);"
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "kind": "statement",
          "label": "merge",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested",
          "kind": "call",
          "label": "OnHighlightBlockRequested",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88,
          "detail": "blockId (string)"
        },
        {
          "id": "method:1om56u0:requesthighlightblock__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1om56u0:requesthighlightblock__entry__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_await_22_1__await",
          "from": "method:1om56u0:requesthighlightblock__entry",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_await_22_1__await",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_await_22_1__await__method:1om56u0:requesthighlightblock__action_22_invoke_event_22__linear",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_await_22_1__await",
          "to": "method:1om56u0:requesthighlightblock__action_22_invoke_event_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_invoke_event_22__linear__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition",
          "from": "method:1om56u0:requesthighlightblock__action_22_invoke_event_22__linear",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__true",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__false",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__condition",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__true__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__true",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__false__method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__false",
          "to": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge__method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition",
          "from": "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
          "to": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition__method:1om56u0:requesthighlightblock__action_22_guard_clause_22__true",
          "from": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition",
          "to": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition__method:1om56u0:requesthighlightblock__action_22_guard_clause_22__false",
          "from": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__condition",
          "to": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__true__method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "from": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__true",
          "to": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__false__method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "from": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__false",
          "to": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge__call_method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested",
          "from": "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge",
          "to": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested",
          "kind": "call",
          "label": "blockId (string)",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested__implicit_return",
          "from": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested",
          "to": "method:1om56u0:requesthighlightblock__implicit_return",
          "kind": "return",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested__jump_NexusReader_UI_Shared_Services_ReaderInteractionService_cs_OnHighlightBlockRequested",
          "fromNodeId": "method:1om56u0:requesthighlightblock__call_22_OnHighlightBlockRequested",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "targetHint": "OnHighlightBlockRequested",
          "line": 22,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "reason": "Call target OnHighlightBlockRequested in NexusReader.UI.Shared/Services/ReaderInteractionService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1om56u0:requesthighlightblock__action_22_requesthighlightblock_branch_22_0__merge",
        "method:1om56u0:requesthighlightblock__action_22_guard_clause_22__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 20,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method RequestHighlightBlock.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:15ros9m:notifytextselected__fragment",
      "ownerFileId": "file:1jnstne:readerinteractionservice-cs",
      "ownerSymbolId": "method:15ros9m:notifytextselected",
      "ownerSymbolName": "NotifyTextSelected",
      "entryNodeId": "method:15ros9m:notifytextselected__entry",
      "exitNodeIds": [
        "method:15ros9m:notifytextselected__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:15ros9m:notifytextselected__entry",
          "kind": "entry",
          "label": "NotifyTextSelected entry",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.99,
          "detail": "Raises the OnTextSelected event with the selected text, block id and selection coordinates when subscribers exist."
        },
        {
          "id": "method:15ros9m:notifytextselected__action_25_notifytextselected_notification_25_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.83,
          "detail": "public async Task NotifyTextSelected(string text, string blockId, SelectionCoordinates coords)"
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_await_27_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81,
          "detail": "if (OnTextSelected != null) await OnTextSelected(text, blockId, coords);"
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_invoke_event_27__linear",
          "kind": "statement",
          "label": "Invoke OnTextSelected",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "await OnTextSelected(text, blockId, coords)"
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition",
          "kind": "condition",
          "label": "OnTextSelected != null) await OnTextSelected(text, blockId, coords",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78,
          "detail": "if (OnTextSelected != null) await OnTextSelected(text, blockId, coords);"
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition",
          "kind": "condition",
          "label": "OnTextSelected != null",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7,
          "detail": "if (OnTextSelected != null) await OnTextSelected(text, blockId, coords);"
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__true",
          "kind": "branch-true",
          "label": "invoke",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__false",
          "kind": "branch-false",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__call_27_OnTextSelected",
          "kind": "call",
          "label": "OnTextSelected",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88,
          "detail": "text (string), blockId (string), coords (SelectionCoordinates)"
        },
        {
          "id": "method:15ros9m:notifytextselected__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:15ros9m:notifytextselected__entry__method:15ros9m:notifytextselected__action_25_notifytextselected_notification_25_0__linear",
          "from": "method:15ros9m:notifytextselected__entry",
          "to": "method:15ros9m:notifytextselected__action_25_notifytextselected_notification_25_0__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:15ros9m:notifytextselected__action_25_notifytextselected_notification_25_0__linear__method:15ros9m:notifytextselected__action_27_notifytextselected_await_27_2__await",
          "from": "method:15ros9m:notifytextselected__action_25_notifytextselected_notification_25_0__linear",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_await_27_2__await",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_await_27_2__await__method:15ros9m:notifytextselected__action_27_invoke_event_27__linear",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_await_27_2__await",
          "to": "method:15ros9m:notifytextselected__action_27_invoke_event_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_invoke_event_27__linear__method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition",
          "from": "method:15ros9m:notifytextselected__action_27_invoke_event_27__linear",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition__method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__true",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition__method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__false",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__condition",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__true__method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__true",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__false__method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__false",
          "to": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge__method:15ros9m:notifytextselected__action_27_guard_clause_27__condition",
          "from": "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
          "to": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition__method:15ros9m:notifytextselected__action_27_guard_clause_27__true",
          "from": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition",
          "to": "method:15ros9m:notifytextselected__action_27_guard_clause_27__true",
          "kind": "condition-true",
          "label": "invoke",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition__method:15ros9m:notifytextselected__action_27_guard_clause_27__false",
          "from": "method:15ros9m:notifytextselected__action_27_guard_clause_27__condition",
          "to": "method:15ros9m:notifytextselected__action_27_guard_clause_27__false",
          "kind": "condition-false",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__true__method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "from": "method:15ros9m:notifytextselected__action_27_guard_clause_27__true",
          "to": "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__false__method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "from": "method:15ros9m:notifytextselected__action_27_guard_clause_27__false",
          "to": "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge__call_method:15ros9m:notifytextselected__call_27_OnTextSelected",
          "from": "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge",
          "to": "method:15ros9m:notifytextselected__call_27_OnTextSelected",
          "kind": "call",
          "label": "text (string), blockId (string), coords (SelectionCoordinates)",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:15ros9m:notifytextselected__call_27_OnTextSelected__implicit_return",
          "from": "method:15ros9m:notifytextselected__call_27_OnTextSelected",
          "to": "method:15ros9m:notifytextselected__implicit_return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:15ros9m:notifytextselected__call_27_OnTextSelected__jump_NexusReader_UI_Shared_Services_ReaderInteractionService_cs_OnTextSelected",
          "fromNodeId": "method:15ros9m:notifytextselected__call_27_OnTextSelected",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "targetHint": "OnTextSelected",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "reason": "Call target OnTextSelected in NexusReader.UI.Shared/Services/ReaderInteractionService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:15ros9m:notifytextselected__action_27_notifytextselected_branch_27_1__merge",
        "method:15ros9m:notifytextselected__action_27_guard_clause_27__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 25,
        "end": 28
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method NotifyTextSelected.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19botw9:readernavigationservice__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:19botw9:readernavigationservice",
      "ownerSymbolName": "ReaderNavigationService",
      "entryNodeId": "method:19botw9:readernavigationservice__entry",
      "exitNodeIds": [
        "method:19botw9:readernavigationservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:19botw9:readernavigationservice__entry",
          "kind": "entry",
          "label": "ReaderNavigationService entry",
          "line": 9,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Constructor: captures NavigationManager dependency for performing route navigation."
        },
        {
          "id": "method:19botw9:readernavigationservice__action_11_state_change_11__linear",
          "kind": "statement",
          "label": "store dependency",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "_navigationManager = navigationManager"
        },
        {
          "id": "method:19botw9:readernavigationservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:19botw9:readernavigationservice__entry__method:19botw9:readernavigationservice__action_11_state_change_11__linear",
          "from": "method:19botw9:readernavigationservice__entry",
          "to": "method:19botw9:readernavigationservice__action_11_state_change_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19botw9:readernavigationservice__action_11_state_change_11__linear__implicit_return",
          "from": "method:19botw9:readernavigationservice__action_11_state_change_11__linear",
          "to": "method:19botw9:readernavigationservice__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 9,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 9,
          "summary": "Control-flow fragment extracted for method ReaderNavigationService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:l29i6z:gotochapter__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:l29i6z:gotochapter",
      "ownerSymbolName": "GoToChapter",
      "entryNodeId": "method:l29i6z:gotochapter__entry",
      "exitNodeIds": [
        "method:l29i6z:gotochapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:l29i6z:gotochapter__entry",
          "kind": "entry",
          "label": "GoToChapter entry",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Validates a target chapter index, updates CurrentChapterIndex and notifies subscribers if valid."
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition",
          "kind": "condition",
          "label": "index < 0 || index >= TotalChapters",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "if (index < 0 || index >= TotalChapters) return;"
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__true",
          "kind": "branch-true",
          "label": "return (no state change)",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "kind": "statement",
          "label": "merge",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition",
          "kind": "condition",
          "label": "index < 0 || index >= TotalChapters",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9,
          "detail": "if (index < 0 || index >= TotalChapters) return;"
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_25_state_change_25__linear",
          "kind": "statement",
          "label": "set CurrentChapterIndex",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "CurrentChapterIndex = index"
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_gotochapter_await_26_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81,
          "detail": "await NotifyNavigationChangedAsync();"
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_gotochapter_notification_26_1__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83,
          "detail": "await NotifyNavigationChangedAsync();"
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_event_26__linear",
          "kind": "statement",
          "label": "notify subscribers",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "await NotifyNavigationChangedAsync()"
        },
        {
          "id": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync",
          "kind": "call",
          "label": "NotifyNavigationChangedAsync",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:l29i6z:gotochapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:l29i6z:gotochapter__entry__method:l29i6z:gotochapter__action_23_guard_clause_23__condition",
          "from": "method:l29i6z:gotochapter__entry",
          "to": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition__method:l29i6z:gotochapter__action_23_guard_clause_23__true",
          "from": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition",
          "to": "method:l29i6z:gotochapter__action_23_guard_clause_23__true",
          "kind": "condition-true",
          "label": "return (no state change)",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition__method:l29i6z:gotochapter__action_23_guard_clause_23__false",
          "from": "method:l29i6z:gotochapter__action_23_guard_clause_23__condition",
          "to": "method:l29i6z:gotochapter__action_23_guard_clause_23__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__true__method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "from": "method:l29i6z:gotochapter__action_23_guard_clause_23__true",
          "to": "method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__false__method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "from": "method:l29i6z:gotochapter__action_23_guard_clause_23__false",
          "to": "method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_guard_clause_23__merge__method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition",
          "from": "method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
          "to": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition__method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__true",
          "from": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition",
          "to": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition__method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__false",
          "from": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__condition",
          "to": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__true__method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "from": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__true",
          "to": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__false__method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "from": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__false",
          "to": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge__method:l29i6z:gotochapter__action_25_state_change_25__linear",
          "from": "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge",
          "to": "method:l29i6z:gotochapter__action_25_state_change_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_25_state_change_25__linear__method:l29i6z:gotochapter__action_26_gotochapter_await_26_2__await",
          "from": "method:l29i6z:gotochapter__action_25_state_change_25__linear",
          "to": "method:l29i6z:gotochapter__action_26_gotochapter_await_26_2__await",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_gotochapter_await_26_2__await__method:l29i6z:gotochapter__action_26_gotochapter_notification_26_1__linear",
          "from": "method:l29i6z:gotochapter__action_26_gotochapter_await_26_2__await",
          "to": "method:l29i6z:gotochapter__action_26_gotochapter_notification_26_1__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_gotochapter_notification_26_1__linear__method:l29i6z:gotochapter__action_26_event_26__linear",
          "from": "method:l29i6z:gotochapter__action_26_gotochapter_notification_26_1__linear",
          "to": "method:l29i6z:gotochapter__action_26_event_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:l29i6z:gotochapter__action_26_event_26__linear__call_method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync",
          "from": "method:l29i6z:gotochapter__action_26_event_26__linear",
          "to": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync",
          "kind": "call",
          "label": "none",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync__implicit_return",
          "from": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync",
          "to": "method:l29i6z:gotochapter__implicit_return",
          "kind": "return",
          "line": 27,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync__jump_NexusReader_UI_Shared_Services_ReaderNavigationService_cs_NotifyNavigationChangedAsync",
          "fromNodeId": "method:l29i6z:gotochapter__call_26_NotifyNavigationChangedAsync",
          "kind": "call-target",
          "targetNodeId": "method:rb5d4b:notifynavigationchangedasync",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "targetHint": "NotifyNavigationChangedAsync",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "reason": "Call target NotifyNavigationChangedAsync resolved to NexusReader.UI.Shared/Services/ReaderNavigationService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:l29i6z:gotochapter__action_23_guard_clause_23__merge",
        "method:l29i6z:gotochapter__action_23_gotochapter_guard_clause_23_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 21,
        "end": 27
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method GoToChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jsmnk6:gotonextchapter__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:1jsmnk6:gotonextchapter",
      "ownerSymbolName": "GoToNextChapter",
      "entryNodeId": "method:1jsmnk6:gotonextchapter__entry",
      "exitNodeIds": [
        "method:1jsmnk6:gotonextchapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jsmnk6:gotonextchapter__entry",
          "kind": "entry",
          "label": "GoToNextChapter entry",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Advances to the next chapter when not at the last chapter (delegates to GoToChapter)."
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition",
          "kind": "condition",
          "label": "CurrentChapterIndex < TotalChapters - 1",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "if (CurrentChapterIndex < TotalChapters - 1) { await GoToChapter(...); }"
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__true",
          "kind": "branch-true",
          "label": "call GoToChapter",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition",
          "kind": "condition",
          "label": "CurrentChapterIndex < TotalChapters - 1",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (CurrentChapterIndex < TotalChapters - 1)"
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_33_gotonextchapter_await_33_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81,
          "detail": "await GoToChapter(CurrentChapterIndex + 1);"
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter",
          "kind": "call",
          "label": "GoToChapter",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88,
          "detail": "CurrentChapterIndex + 1"
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jsmnk6:gotonextchapter__entry__method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition",
          "from": "method:1jsmnk6:gotonextchapter__entry",
          "to": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition__method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__true",
          "from": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition",
          "to": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__true",
          "kind": "condition-true",
          "label": "call GoToChapter",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition__method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__false",
          "from": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__condition",
          "to": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__true__method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "from": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__true",
          "to": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__false__method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "from": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__false",
          "to": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge__method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition",
          "from": "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
          "to": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition__method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__true",
          "from": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition",
          "to": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition__method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__false",
          "from": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__condition",
          "to": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__true__method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "from": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__true",
          "to": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__false__method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "from": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__false",
          "to": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge__method:1jsmnk6:gotonextchapter__action_33_gotonextchapter_await_33_1__await",
          "from": "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge",
          "to": "method:1jsmnk6:gotonextchapter__action_33_gotonextchapter_await_33_1__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__action_33_gotonextchapter_await_33_1__await__call_method:1jsmnk6:gotonextchapter__call_33_GoToChapter",
          "from": "method:1jsmnk6:gotonextchapter__action_33_gotonextchapter_await_33_1__await",
          "to": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter",
          "kind": "call",
          "label": "CurrentChapterIndex + 1",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter__implicit_return",
          "from": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter",
          "to": "method:1jsmnk6:gotonextchapter__implicit_return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter__jump_NexusReader_UI_Shared_Services_ReaderNavigationService_cs_GoToChapter",
          "fromNodeId": "method:1jsmnk6:gotonextchapter__call_33_GoToChapter",
          "kind": "call-target",
          "targetNodeId": "method:l29i6z:gotochapter",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "targetHint": "GoToChapter",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "reason": "Call target GoToChapter resolved to NexusReader.UI.Shared/Services/ReaderNavigationService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1jsmnk6:gotonextchapter__action_31_guard_clause_31__merge",
        "method:1jsmnk6:gotonextchapter__action_31_gotonextchapter_branch_31_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 29,
        "end": 35
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method GoToNextChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lzew1d:gotopreviouschapter__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:1lzew1d:gotopreviouschapter",
      "ownerSymbolName": "GoToPreviousChapter",
      "entryNodeId": "method:1lzew1d:gotopreviouschapter__entry",
      "exitNodeIds": [
        "method:1lzew1d:gotopreviouschapter__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1lzew1d:gotopreviouschapter__entry",
          "kind": "entry",
          "label": "GoToPreviousChapter entry",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Moves to the previous chapter when not at the first chapter (delegates to GoToChapter)."
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition",
          "kind": "condition",
          "label": "CurrentChapterIndex > 0",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "if (CurrentChapterIndex > 0) { await GoToChapter(...); }"
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__true",
          "kind": "branch-true",
          "label": "call GoToChapter",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition",
          "kind": "condition",
          "label": "CurrentChapterIndex > 0",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (CurrentChapterIndex > 0)"
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_41_gotopreviouschapter_await_41_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81,
          "detail": "await GoToChapter(CurrentChapterIndex - 1);"
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter",
          "kind": "call",
          "label": "GoToChapter",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88,
          "detail": "CurrentChapterIndex - 1"
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1lzew1d:gotopreviouschapter__entry__method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition",
          "from": "method:1lzew1d:gotopreviouschapter__entry",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition__method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__true",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__true",
          "kind": "condition-true",
          "label": "call GoToChapter",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition__method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__false",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__condition",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__true__method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__true",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__false__method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__false",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge__method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition__method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__true",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition__method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__false",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__condition",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__true__method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__true",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__false__method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__false",
          "to": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge__method:1lzew1d:gotopreviouschapter__action_41_gotopreviouschapter_await_41_1__await",
          "from": "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge",
          "to": "method:1lzew1d:gotopreviouschapter__action_41_gotopreviouschapter_await_41_1__await",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__action_41_gotopreviouschapter_await_41_1__await__call_method:1lzew1d:gotopreviouschapter__call_41_GoToChapter",
          "from": "method:1lzew1d:gotopreviouschapter__action_41_gotopreviouschapter_await_41_1__await",
          "to": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter",
          "kind": "call",
          "label": "CurrentChapterIndex - 1",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter__implicit_return",
          "from": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter",
          "to": "method:1lzew1d:gotopreviouschapter__implicit_return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter__jump_NexusReader_UI_Shared_Services_ReaderNavigationService_cs_GoToChapter",
          "fromNodeId": "method:1lzew1d:gotopreviouschapter__call_41_GoToChapter",
          "kind": "call-target",
          "targetNodeId": "method:l29i6z:gotochapter",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "targetHint": "GoToChapter",
          "line": 41,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "reason": "Call target GoToChapter resolved to NexusReader.UI.Shared/Services/ReaderNavigationService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1lzew1d:gotopreviouschapter__action_39_guard_clause_39__merge",
        "method:1lzew1d:gotopreviouschapter__action_39_gotopreviouschapter_branch_39_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 37,
        "end": 43
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 37,
          "summary": "Control-flow fragment extracted for method GoToPreviousChapter.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:tx9z61:updatemetadataasync__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:tx9z61:updatemetadataasync",
      "ownerSymbolName": "UpdateMetadataAsync",
      "entryNodeId": "method:tx9z61:updatemetadataasync__entry",
      "exitNodeIds": [
        "method:tx9z61:updatemetadataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:tx9z61:updatemetadataasync__entry",
          "kind": "entry",
          "label": "UpdateMetadataAsync entry",
          "line": 45,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Updates in-memory metadata (index, total, title) only if values changed and notifies subscribers when a change occurred."
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition",
          "kind": "condition",
          "label": "CurrentChapterIndex != currentIndex",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (CurrentChapterIndex != currentIndex) { CurrentChapterIndex = currentIndex; changed = true; }"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_state_change_48__linear",
          "kind": "statement",
          "label": "conditionally update CurrentChapterIndex/TotalChapters/ChapterTitle",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "Sets each property if incoming value differs; tracks 'changed' flag"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition",
          "kind": "condition",
          "label": "TotalChapters != totalChapters",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (TotalChapters != totalChapters) { TotalChapters = totalChapters; changed = true; }"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition",
          "kind": "condition",
          "label": "ChapterTitle != title",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (ChapterTitle != title) { ChapterTitle = title; changed = true; }"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition",
          "kind": "condition",
          "label": "changed == true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "if (changed) await NotifyNavigationChangedAsync();"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__true",
          "kind": "branch-true",
          "label": "notify",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition",
          "kind": "condition",
          "label": "changed",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (changed)"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_await_54_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81,
          "detail": "await NotifyNavigationChangedAsync();"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_notification_54_4__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83,
          "detail": "await NotifyNavigationChangedAsync();"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync",
          "kind": "call",
          "label": "NotifyNavigationChangedAsync",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:tx9z61:updatemetadataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:tx9z61:updatemetadataasync__entry__method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition",
          "from": "method:tx9z61:updatemetadataasync__entry",
          "to": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition__method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__true",
          "from": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition",
          "to": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition__method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__false",
          "from": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__condition",
          "to": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__true__method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "from": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__true",
          "to": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__false__method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "from": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__false",
          "to": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge__method:tx9z61:updatemetadataasync__action_48_state_change_48__linear",
          "from": "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
          "to": "method:tx9z61:updatemetadataasync__action_48_state_change_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_48_state_change_48__linear__method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition",
          "from": "method:tx9z61:updatemetadataasync__action_48_state_change_48__linear",
          "to": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition__method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__true",
          "from": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition",
          "to": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition__method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__false",
          "from": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__condition",
          "to": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__true__method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "from": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__true",
          "to": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__false__method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "from": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__false",
          "to": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge__method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition",
          "from": "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
          "to": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition__method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__true",
          "from": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition",
          "to": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition__method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__false",
          "from": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__condition",
          "to": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__true__method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "from": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__true",
          "to": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__false__method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "from": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__false",
          "to": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge__method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition",
          "from": "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
          "to": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition__method:tx9z61:updatemetadataasync__action_52_guard_clause_52__true",
          "from": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition",
          "to": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__true",
          "kind": "condition-true",
          "label": "notify",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition__method:tx9z61:updatemetadataasync__action_52_guard_clause_52__false",
          "from": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__condition",
          "to": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__true__method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "from": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__true",
          "to": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__false__method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "from": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__false",
          "to": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge__method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition",
          "from": "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
          "to": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition__method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__true",
          "from": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition",
          "to": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition__method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__false",
          "from": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__condition",
          "to": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__true__method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "from": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__true",
          "to": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__false__method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "from": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__false",
          "to": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge__method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_await_54_5__await",
          "from": "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge",
          "to": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_await_54_5__await",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_await_54_5__await__method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_notification_54_4__linear",
          "from": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_await_54_5__await",
          "to": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_notification_54_4__linear",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_notification_54_4__linear__call_method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync",
          "from": "method:tx9z61:updatemetadataasync__action_54_updatemetadataasync_notification_54_4__linear",
          "to": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync",
          "kind": "call",
          "label": "none",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync__implicit_return",
          "from": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync",
          "to": "method:tx9z61:updatemetadataasync__implicit_return",
          "kind": "return",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync__jump_NexusReader_UI_Shared_Services_ReaderNavigationService_cs_NotifyNavigationChangedAsync",
          "fromNodeId": "method:tx9z61:updatemetadataasync__call_54_NotifyNavigationChangedAsync",
          "kind": "call-target",
          "targetNodeId": "method:rb5d4b:notifynavigationchangedasync",
          "targetPath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "targetHint": "NotifyNavigationChangedAsync",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "reason": "Call target NotifyNavigationChangedAsync resolved to NexusReader.UI.Shared/Services/ReaderNavigationService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:tx9z61:updatemetadataasync__action_48_updatemetadataasync_branch_48_0__merge",
        "method:tx9z61:updatemetadataasync__action_49_updatemetadataasync_branch_49_1__merge",
        "method:tx9z61:updatemetadataasync__action_50_updatemetadataasync_branch_50_2__merge",
        "method:tx9z61:updatemetadataasync__action_52_guard_clause_52__merge",
        "method:tx9z61:updatemetadataasync__action_52_updatemetadataasync_branch_52_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 45,
        "end": 56
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 45,
          "summary": "Control-flow fragment extracted for method UpdateMetadataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:6z33me:navigatetobook__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:6z33me:navigatetobook",
      "ownerSymbolName": "NavigateToBook",
      "entryNodeId": "method:6z33me:navigatetobook__entry",
      "exitNodeIds": [
        "method:6z33me:navigatetobook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:6z33me:navigatetobook__entry",
          "kind": "entry",
          "label": "NavigateToBook entry",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Sets the current ebook id, resets chapter index to 0 and triggers a route navigation to the reader page for the book."
        },
        {
          "id": "method:6z33me:navigatetobook__action_60_state_change_60__linear",
          "kind": "statement",
          "label": "set CurrentEbookId",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "CurrentEbookId = bookId"
        },
        {
          "id": "method:6z33me:navigatetobook__action_61_state_change_61__linear",
          "kind": "statement",
          "label": "reset CurrentChapterIndex",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "CurrentChapterIndex = 0"
        },
        {
          "id": "method:6z33me:navigatetobook__action_62_external_call_62__linear",
          "kind": "http-call",
          "label": "perform route navigation",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "_navigationManager.NavigateTo($\"/reader/{bookId}\") (framework call)"
        },
        {
          "id": "method:6z33me:navigatetobook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:6z33me:navigatetobook__entry__method:6z33me:navigatetobook__action_60_state_change_60__linear",
          "from": "method:6z33me:navigatetobook__entry",
          "to": "method:6z33me:navigatetobook__action_60_state_change_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6z33me:navigatetobook__action_60_state_change_60__linear__method:6z33me:navigatetobook__action_61_state_change_61__linear",
          "from": "method:6z33me:navigatetobook__action_60_state_change_60__linear",
          "to": "method:6z33me:navigatetobook__action_61_state_change_61__linear",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6z33me:navigatetobook__action_61_state_change_61__linear__method:6z33me:navigatetobook__action_62_external_call_62__linear",
          "from": "method:6z33me:navigatetobook__action_61_state_change_61__linear",
          "to": "method:6z33me:navigatetobook__action_62_external_call_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:6z33me:navigatetobook__action_62_external_call_62__linear__implicit_return",
          "from": "method:6z33me:navigatetobook__action_62_external_call_62__linear",
          "to": "method:6z33me:navigatetobook__implicit_return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 58,
        "end": 63
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 58,
          "summary": "Control-flow fragment extracted for method NavigateToBook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ecwzho:setbook__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:ecwzho:setbook",
      "ownerSymbolName": "SetBook",
      "entryNodeId": "method:ecwzho:setbook__entry",
      "exitNodeIds": [
        "method:ecwzho:setbook__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ecwzho:setbook__entry",
          "kind": "entry",
          "label": "SetBook entry",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Sets the current ebook id and optionally the current chapter index without triggering navigation or notifications."
        },
        {
          "id": "method:ecwzho:setbook__action_67_state_change_67__linear",
          "kind": "statement",
          "label": "set CurrentEbookId",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "CurrentEbookId = bookId"
        },
        {
          "id": "method:ecwzho:setbook__action_68_state_change_68__linear",
          "kind": "statement",
          "label": "set CurrentChapterIndex",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "CurrentChapterIndex = chapterIndex"
        },
        {
          "id": "method:ecwzho:setbook__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ecwzho:setbook__entry__method:ecwzho:setbook__action_67_state_change_67__linear",
          "from": "method:ecwzho:setbook__entry",
          "to": "method:ecwzho:setbook__action_67_state_change_67__linear",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ecwzho:setbook__action_67_state_change_67__linear__method:ecwzho:setbook__action_68_state_change_68__linear",
          "from": "method:ecwzho:setbook__action_67_state_change_67__linear",
          "to": "method:ecwzho:setbook__action_68_state_change_68__linear",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ecwzho:setbook__action_68_state_change_68__linear__implicit_return",
          "from": "method:ecwzho:setbook__action_68_state_change_68__linear",
          "to": "method:ecwzho:setbook__implicit_return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 65,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 65,
          "summary": "Control-flow fragment extracted for method SetBook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:rb5d4b:notifynavigationchangedasync__fragment",
      "ownerFileId": "file:1aunxq2:readernavigationservice-cs",
      "ownerSymbolId": "method:rb5d4b:notifynavigationchangedasync",
      "ownerSymbolName": "NotifyNavigationChangedAsync",
      "entryNodeId": "method:rb5d4b:notifynavigationchangedasync__entry",
      "exitNodeIds": [
        "method:rb5d4b:notifynavigationchangedasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__entry",
          "kind": "entry",
          "label": "NotifyNavigationChangedAsync entry",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.99,
          "detail": "Invokes all registered OnNavigationChanged handlers sequentially (awaiting each), if any are subscribed."
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_71_notifynavigationchangedasync_notification_71_0__linear",
          "kind": "publish-event",
          "label": "Sends notification",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83,
          "detail": "private async Task NotifyNavigationChangedAsync()"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_73_event_read_73__linear",
          "kind": "statement",
          "label": "capture invocation list",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "var handlers = OnNavigationChanged?.GetInvocationList();"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition",
          "kind": "condition",
          "label": "handlers != null",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "if (handlers != null) { foreach ... }"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__true",
          "kind": "branch-true",
          "label": "iterate-and-await",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__false",
          "kind": "branch-false",
          "label": "no-op",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition",
          "kind": "condition",
          "label": "handlers != null",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78,
          "detail": "if (handlers != null)"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "kind": "loop-entry",
          "label": "var handler in handlers.Cast<Func<Task>>()",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86,
          "detail": "foreach (var handler in handlers.Cast<Func<Task>>())"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body",
          "kind": "loop-body",
          "label": "foreach (var handler in handlers.Cast<Func<Task>>())",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "kind": "loop-entry",
          "label": "iterate over registered handlers",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "foreach (var handler in handlers.Cast<Func<Task>>()) { await handler(); }"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body",
          "kind": "loop-body",
          "label": "foreach (var handler in handlers.Cast<Func<Task>>()) { await handler(); }",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_78_notifynavigationchangedasync_await_78_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81,
          "detail": "await handler();"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_78_external_call_78__linear",
          "kind": "http-call",
          "label": "await subscriber delegate",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7,
          "detail": "await handler() — invokes subscriber code (external to this service)"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__call_78_handler_",
          "kind": "call",
          "label": "handler()",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88,
          "detail": "none (invokes subscriber delegate)"
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__entry__method:rb5d4b:notifynavigationchangedasync__action_71_notifynavigationchangedasync_notification_71_0__linear",
          "from": "method:rb5d4b:notifynavigationchangedasync__entry",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_71_notifynavigationchangedasync_notification_71_0__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.83
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_71_notifynavigationchangedasync_notification_71_0__linear__method:rb5d4b:notifynavigationchangedasync__action_73_event_read_73__linear",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_71_notifynavigationchangedasync_notification_71_0__linear",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_73_event_read_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_73_event_read_73__linear__method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_73_event_read_73__linear",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition__method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__true",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__true",
          "kind": "condition-true",
          "label": "iterate-and-await",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition__method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__false",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__condition",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__false",
          "kind": "condition-false",
          "label": "no-op",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__true__method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__true",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__false__method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__false",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge__method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition__method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__true",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition__method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__false",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__condition",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__true__method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__true",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__false__method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__false",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge__method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry__method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body",
          "kind": "loop-body",
          "label": "var handler in handlers.Cast<Func<Task>>()",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body__method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry__method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_exit",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_exit__method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_exit",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry__method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body__method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry__method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_exit",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 76,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_exit__method:rb5d4b:notifynavigationchangedasync__action_78_notifynavigationchangedasync_await_78_3__await",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_exit",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_78_notifynavigationchangedasync_await_78_3__await",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_78_notifynavigationchangedasync_await_78_3__await__method:rb5d4b:notifynavigationchangedasync__action_78_external_call_78__linear",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_78_notifynavigationchangedasync_await_78_3__await",
          "to": "method:rb5d4b:notifynavigationchangedasync__action_78_external_call_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__action_78_external_call_78__linear__call_method:rb5d4b:notifynavigationchangedasync__call_78_handler_",
          "from": "method:rb5d4b:notifynavigationchangedasync__action_78_external_call_78__linear",
          "to": "method:rb5d4b:notifynavigationchangedasync__call_78_handler_",
          "kind": "call",
          "label": "none (invokes subscriber delegate)",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__call_78_handler___implicit_return",
          "from": "method:rb5d4b:notifynavigationchangedasync__call_78_handler_",
          "to": "method:rb5d4b:notifynavigationchangedasync__implicit_return",
          "kind": "return",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:rb5d4b:notifynavigationchangedasync__call_78_handler___jump_unknown_handler_",
          "fromNodeId": "method:rb5d4b:notifynavigationchangedasync__call_78_handler_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "handler()",
          "line": 78,
          "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "reason": "Call target handler() in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_body__method:rb5d4b:notifynavigationchangedasync__action_76_notifynavigationchangedasync_loop_76_2__loop_entry",
        "method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_body__method:rb5d4b:notifynavigationchangedasync__action_76_loop_76__loop_entry"
      ],
      "mergeNodeIds": [
        "method:rb5d4b:notifynavigationchangedasync__action_74_guard_clause_74__merge",
        "method:rb5d4b:notifynavigationchangedasync__action_74_notifynavigationchangedasync_branch_74_1__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 71,
        "end": 81
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs",
          "line": 71,
          "summary": "Control-flow fragment extracted for method NotifyNavigationChangedAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:171cr2c:syncservice__fragment",
      "ownerFileId": "file:1la6lrw:syncservice-cs",
      "ownerSymbolId": "method:171cr2c:syncservice",
      "ownerSymbolName": "SyncService",
      "entryNodeId": "method:171cr2c:syncservice__entry",
      "exitNodeIds": [
        "method:171cr2c:syncservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:171cr2c:syncservice__entry",
          "kind": "entry",
          "label": "SyncService entry",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.99,
          "detail": "Constructs the SyncService and stores injected dependencies."
        },
        {
          "id": "method:171cr2c:syncservice__action_26_assignment_26__linear",
          "kind": "statement",
          "label": "store-dependencies",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Assigns HttpClient, INativeStorageService, IPlatformService, ILogger to private fields"
        },
        {
          "id": "method:171cr2c:syncservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:171cr2c:syncservice__entry__method:171cr2c:syncservice__action_26_assignment_26__linear",
          "from": "method:171cr2c:syncservice__entry",
          "to": "method:171cr2c:syncservice__action_26_assignment_26__linear",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:171cr2c:syncservice__action_26_assignment_26__linear__implicit_return",
          "from": "method:171cr2c:syncservice__action_26_assignment_26__linear",
          "to": "method:171cr2c:syncservice__implicit_return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 20,
        "end": 30
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 20,
          "summary": "Control-flow fragment extracted for method SyncService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:r2rlv7:initializeasync__fragment",
      "ownerFileId": "file:1la6lrw:syncservice-cs",
      "ownerSymbolId": "method:r2rlv7:initializeasync",
      "ownerSymbolName": "InitializeAsync",
      "entryNodeId": "method:r2rlv7:initializeasync__entry",
      "exitNodeIds": [
        "method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return",
        "method:r2rlv7:initializeasync__action_64_initializeasync_return_64_9__return"
      ],
      "nodes": [
        {
          "id": "method:r2rlv7:initializeasync__entry",
          "kind": "entry",
          "label": "InitializeAsync entry",
          "line": 32,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.99,
          "detail": "Initializes the SignalR HubConnection (with token from secure storage), registers a progress handler, and starts the connection with automatic reconnect."
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition",
          "kind": "condition",
          "label": "_isInitialized) return Result.Ok(",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9,
          "detail": "if (_isInitialized) return Result.Ok();"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition",
          "kind": "condition",
          "label": "_isInitialized == true",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "If already initialized, return Result.Ok()"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__true",
          "kind": "branch-true",
          "label": "return-Ok",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__false",
          "kind": "branch-false",
          "label": "skip-init",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "kind": "statement",
          "label": "merge",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_36_initializeasync_await_36_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "var tokenResult = await _storageService.GetSecureString(\"nexus_auth_token\");"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_36_external_read_36__linear",
          "kind": "statement",
          "label": "read-secure-token",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Retrieves auth token from INativeStorageService; branches on failure"
        },
        {
          "id": "method:r2rlv7:initializeasync__call_36_GetSecureString",
          "kind": "call",
          "label": "GetSecureString",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88,
          "detail": "\"nexus_auth_token\""
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition",
          "kind": "condition",
          "label": "tokenResult.IsFailed",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Fail(\"Not authenticated\") when secure token not present"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__true",
          "kind": "branch-true",
          "label": "return-Fail",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__false",
          "kind": "branch-false",
          "label": "stop-init",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition",
          "kind": "condition",
          "label": "tokenResult.IsFailed) return Result.Fail(\"Not authenticated\"",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9,
          "detail": "if (tokenResult.IsFailed) return Result.Fail(\"Not authenticated\");"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_39_compute_39__linear",
          "kind": "statement",
          "label": "build-hub-url",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Combines HttpClient.BaseAddress with 'synchub' to form hubUrl"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_42_configure_42__linear",
          "kind": "statement",
          "label": "configure-hub-connection",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Creates HubConnectionBuilder, sets AccessTokenProvider to return the retrieved token and enables automatic reconnect"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_50_event_subscription_50__linear",
          "kind": "statement",
          "label": "register-progress-handler",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Registers 'ProgressUpdated' handler that forwards to OnProgressReceived event if not null"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_await_53_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "if (OnProgressReceived != null) await OnProgressReceived(pageId, timestamp);"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition",
          "kind": "condition",
          "label": "OnProgressReceived != null) await OnProgressReceived(pageId, timestamp",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78,
          "detail": "if (OnProgressReceived != null) await OnProgressReceived(pageId, timestamp);"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__call_53_OnProgressReceived",
          "kind": "call",
          "label": "OnProgressReceived",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88,
          "detail": "pageId, timestamp (invoked when hub event arrives)"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_56_try_catch_56__linear",
          "kind": "statement",
          "label": "start-hub-with-fallback",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Attempts StartAsync(); on success sets _isInitialized=true and returns Ok; on exception returns Fail(ex.Message)"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_56_initializeasync_try_56_5__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_58_initializeasync_await_58_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "await _hubConnection.StartAsync();"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_62_initializeasync_catch_62_8__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:r2rlv7:initializeasync__action_64_initializeasync_return_64_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:r2rlv7:initializeasync__entry__method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition",
          "from": "method:r2rlv7:initializeasync__entry",
          "to": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition__method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__true",
          "from": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition",
          "to": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition__method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__false",
          "from": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__condition",
          "to": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__true__method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "from": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__true",
          "to": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__false__method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "from": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__false",
          "to": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge__method:r2rlv7:initializeasync__action_34_guard_clause_34__condition",
          "from": "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
          "to": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition__method:r2rlv7:initializeasync__action_34_guard_clause_34__true",
          "from": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition",
          "to": "method:r2rlv7:initializeasync__action_34_guard_clause_34__true",
          "kind": "condition-true",
          "label": "return-Ok",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition__method:r2rlv7:initializeasync__action_34_guard_clause_34__false",
          "from": "method:r2rlv7:initializeasync__action_34_guard_clause_34__condition",
          "to": "method:r2rlv7:initializeasync__action_34_guard_clause_34__false",
          "kind": "condition-false",
          "label": "skip-init",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__true__method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "from": "method:r2rlv7:initializeasync__action_34_guard_clause_34__true",
          "to": "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__false__method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "from": "method:r2rlv7:initializeasync__action_34_guard_clause_34__false",
          "to": "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge__method:r2rlv7:initializeasync__action_36_initializeasync_await_36_1__await",
          "from": "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
          "to": "method:r2rlv7:initializeasync__action_36_initializeasync_await_36_1__await",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:r2rlv7:initializeasync__action_36_initializeasync_await_36_1__await__method:r2rlv7:initializeasync__action_36_external_read_36__linear",
          "from": "method:r2rlv7:initializeasync__action_36_initializeasync_await_36_1__await",
          "to": "method:r2rlv7:initializeasync__action_36_external_read_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_36_external_read_36__linear__call_method:r2rlv7:initializeasync__call_36_GetSecureString",
          "from": "method:r2rlv7:initializeasync__action_36_external_read_36__linear",
          "to": "method:r2rlv7:initializeasync__call_36_GetSecureString",
          "kind": "call",
          "label": "\"nexus_auth_token\"",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:r2rlv7:initializeasync__call_36_GetSecureString__method:r2rlv7:initializeasync__action_37_guard_clause_37__condition",
          "from": "method:r2rlv7:initializeasync__call_36_GetSecureString",
          "to": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition__method:r2rlv7:initializeasync__action_37_guard_clause_37__true",
          "from": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition",
          "to": "method:r2rlv7:initializeasync__action_37_guard_clause_37__true",
          "kind": "condition-true",
          "label": "return-Fail",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition__method:r2rlv7:initializeasync__action_37_guard_clause_37__false",
          "from": "method:r2rlv7:initializeasync__action_37_guard_clause_37__condition",
          "to": "method:r2rlv7:initializeasync__action_37_guard_clause_37__false",
          "kind": "condition-false",
          "label": "stop-init",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__true__method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "from": "method:r2rlv7:initializeasync__action_37_guard_clause_37__true",
          "to": "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__false__method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "from": "method:r2rlv7:initializeasync__action_37_guard_clause_37__false",
          "to": "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge__method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition",
          "from": "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
          "to": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition__method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__true",
          "from": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition",
          "to": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition__method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__false",
          "from": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__condition",
          "to": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__true__method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "from": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__true",
          "to": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__false__method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "from": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__false",
          "to": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge__method:r2rlv7:initializeasync__action_39_compute_39__linear",
          "from": "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
          "to": "method:r2rlv7:initializeasync__action_39_compute_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_39_compute_39__linear__method:r2rlv7:initializeasync__action_42_configure_42__linear",
          "from": "method:r2rlv7:initializeasync__action_39_compute_39__linear",
          "to": "method:r2rlv7:initializeasync__action_42_configure_42__linear",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_42_configure_42__linear__method:r2rlv7:initializeasync__action_50_event_subscription_50__linear",
          "from": "method:r2rlv7:initializeasync__action_42_configure_42__linear",
          "to": "method:r2rlv7:initializeasync__action_50_event_subscription_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_50_event_subscription_50__linear__method:r2rlv7:initializeasync__action_53_initializeasync_await_53_4__await",
          "from": "method:r2rlv7:initializeasync__action_50_event_subscription_50__linear",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_await_53_4__await",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_await_53_4__await__method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_await_53_4__await",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition__method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__true",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition__method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__false",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__condition",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__true__method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__true",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__false__method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__false",
          "to": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge__call_method:r2rlv7:initializeasync__call_53_OnProgressReceived",
          "from": "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge",
          "to": "method:r2rlv7:initializeasync__call_53_OnProgressReceived",
          "kind": "call",
          "label": "pageId, timestamp (invoked when hub event arrives)",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:r2rlv7:initializeasync__call_53_OnProgressReceived__method:r2rlv7:initializeasync__action_56_try_catch_56__linear",
          "from": "method:r2rlv7:initializeasync__call_53_OnProgressReceived",
          "to": "method:r2rlv7:initializeasync__action_56_try_catch_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_56_try_catch_56__linear__method:r2rlv7:initializeasync__action_56_initializeasync_try_56_5__try",
          "from": "method:r2rlv7:initializeasync__action_56_try_catch_56__linear",
          "to": "method:r2rlv7:initializeasync__action_56_initializeasync_try_56_5__try",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:r2rlv7:initializeasync__action_56_initializeasync_try_56_5__try__method:r2rlv7:initializeasync__action_58_initializeasync_await_58_6__await",
          "from": "method:r2rlv7:initializeasync__action_56_initializeasync_try_56_5__try",
          "to": "method:r2rlv7:initializeasync__action_58_initializeasync_await_58_6__await",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:r2rlv7:initializeasync__action_58_initializeasync_await_58_6__await__method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return",
          "from": "method:r2rlv7:initializeasync__action_58_initializeasync_await_58_6__await",
          "to": "method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return",
          "kind": "return",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return__method:r2rlv7:initializeasync__action_62_initializeasync_catch_62_8__catch",
          "from": "method:r2rlv7:initializeasync__action_60_initializeasync_return_60_7__return",
          "to": "method:r2rlv7:initializeasync__action_62_initializeasync_catch_62_8__catch",
          "kind": "exception",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:r2rlv7:initializeasync__action_62_initializeasync_catch_62_8__catch__method:r2rlv7:initializeasync__action_64_initializeasync_return_64_9__return",
          "from": "method:r2rlv7:initializeasync__action_62_initializeasync_catch_62_8__catch",
          "to": "method:r2rlv7:initializeasync__action_64_initializeasync_return_64_9__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:r2rlv7:initializeasync__call_36_GetSecureString__jump_unknown_GetSecureString",
          "fromNodeId": "method:r2rlv7:initializeasync__call_36_GetSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "GetSecureString",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "reason": "Call target GetSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:r2rlv7:initializeasync__call_53_OnProgressReceived__jump_NexusReader_UI_Shared_Services_SyncService_cs_OnProgressReceived",
          "fromNodeId": "method:r2rlv7:initializeasync__call_53_OnProgressReceived",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "targetHint": "OnProgressReceived",
          "line": 53,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "reason": "Call target OnProgressReceived in NexusReader.UI.Shared/Services/SyncService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:r2rlv7:initializeasync__action_34_initializeasync_guard_clause_34_0__merge",
        "method:r2rlv7:initializeasync__action_34_guard_clause_34__merge",
        "method:r2rlv7:initializeasync__action_37_guard_clause_37__merge",
        "method:r2rlv7:initializeasync__action_37_initializeasync_guard_clause_37_2__merge",
        "method:r2rlv7:initializeasync__action_53_initializeasync_branch_53_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 32,
        "end": 66
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 32,
          "summary": "Control-flow fragment extracted for method InitializeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1w7mi8p:updateprogressasync__fragment",
      "ownerFileId": "file:1la6lrw:syncservice-cs",
      "ownerSymbolId": "method:1w7mi8p:updateprogressasync",
      "ownerSymbolName": "UpdateProgressAsync",
      "entryNodeId": "method:1w7mi8p:updateprogressasync__entry",
      "exitNodeIds": [
        "method:1w7mi8p:updateprogressasync__action_100_updateprogressasync_return_100_11__return"
      ],
      "nodes": [
        {
          "id": "method:1w7mi8p:updateprogressasync__entry",
          "kind": "entry",
          "label": "UpdateProgressAsync entry",
          "line": 70,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.99,
          "detail": "Debounces and sends reading progress updates to the server via the hub connection in a trailing-edge manner, avoiding duplicate sends for the same page."
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition",
          "kind": "condition",
          "label": "pageId == _lastSentPageId",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Avoids sending if the same page was recently sent"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__true",
          "kind": "branch-true",
          "label": "return-Ok",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__false",
          "kind": "branch-false",
          "label": "skip-send",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "kind": "statement",
          "label": "merge",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition",
          "kind": "condition",
          "label": "pageId == _lastSentPageId) return Result.Ok(",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9,
          "detail": "if (pageId == _lastSentPageId) return Result.Ok();"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_74_debounce_74__linear",
          "kind": "statement",
          "label": "trailing-edge-debounce",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Cancels prior CancellationTokenSource, creates a new one, and schedules a background task to delay 2000ms before sending"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_79_background_task_79__linear",
          "kind": "statement",
          "label": "delayed-send-task",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Runs Task.Run that delays with token, initializes hub if needed, checks connection state and sends progress"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_81_updateprogressasync_try_81_1__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_83_updateprogressasync_await_83_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "await Task.Delay(2000, token);"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_await_85_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "if (!_isInitialized) await InitializeAsync();"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition",
          "kind": "condition",
          "label": "!_isInitialized) await InitializeAsync(",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78,
          "detail": "if (!_isInitialized) await InitializeAsync();"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync",
          "kind": "call",
          "label": "InitializeAsync",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88,
          "detail": "none (ensures hub is initialized before sending)"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition",
          "kind": "condition",
          "label": "_hubConnection?.State == HubConnectionState.Connected",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78,
          "detail": "if (_hubConnection?.State == HubConnectionState.Connected)"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_await_89_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_external_call_89__linear",
          "kind": "http-call",
          "label": "send-progress-to-hub",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Calls _hubConnection.SendAsync('UpdateProgress', pageId, ebookId, progress, chapterTitle, token) when connected (external SignalR call)"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_external_call_89_6__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.82,
          "detail": "await _hubConnection.SendAsync(\"UpdateProgress\", pageId, ebookId, progress, chapterTitle, token);"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_90_state_change_90__linear",
          "kind": "statement",
          "label": "update-last-sent",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Sets _lastSentPageId = pageId after successful send"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_93_updateprogressasync_catch_93_8__catch",
          "kind": "catch",
          "label": "catch TaskCanceledException",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86,
          "detail": "catch (TaskCanceledException) { /* Ignored, user kept scrolling */ }"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_93_error_handling_93__linear",
          "kind": "statement",
          "label": "handle-cancellation",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Catches TaskCanceledException and ignores (user kept scrolling)"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_94_error_handling_94__linear",
          "kind": "statement",
          "label": "log-send-error",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Catches other exceptions and logs via ILogger"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_94_updateprogressasync_catch_94_9__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_96_updateprogressasync_log_96_10__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.92,
          "detail": "_logger.LogError(ex, \"[SyncService] Error sending reading progress for page {PageId}.\", pageId);"
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_100_updateprogressasync_return_100_11__return",
          "kind": "return",
          "label": "Returns result",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        }
      ],
      "edges": [
        {
          "id": "method:1w7mi8p:updateprogressasync__entry__method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition",
          "from": "method:1w7mi8p:updateprogressasync__entry",
          "to": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition__method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__true",
          "from": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__true",
          "kind": "condition-true",
          "label": "return-Ok",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition__method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__false",
          "from": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__false",
          "kind": "condition-false",
          "label": "skip-send",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__true__method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__true",
          "to": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__false__method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__false",
          "to": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge__method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition",
          "from": "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
          "to": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition__method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__true",
          "from": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition__method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__false",
          "from": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__true__method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__true",
          "to": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__false__method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__false",
          "to": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "kind": "next",
          "line": 72,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge__method:1w7mi8p:updateprogressasync__action_74_debounce_74__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
          "to": "method:1w7mi8p:updateprogressasync__action_74_debounce_74__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_74_debounce_74__linear__method:1w7mi8p:updateprogressasync__action_79_background_task_79__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_74_debounce_74__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_79_background_task_79__linear",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_79_background_task_79__linear__method:1w7mi8p:updateprogressasync__action_81_updateprogressasync_try_81_1__try",
          "from": "method:1w7mi8p:updateprogressasync__action_79_background_task_79__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_81_updateprogressasync_try_81_1__try",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_81_updateprogressasync_try_81_1__try__method:1w7mi8p:updateprogressasync__action_83_updateprogressasync_await_83_2__await",
          "from": "method:1w7mi8p:updateprogressasync__action_81_updateprogressasync_try_81_1__try",
          "to": "method:1w7mi8p:updateprogressasync__action_83_updateprogressasync_await_83_2__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_83_updateprogressasync_await_83_2__await__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_await_85_4__await",
          "from": "method:1w7mi8p:updateprogressasync__action_83_updateprogressasync_await_83_2__await",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_await_85_4__await",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_await_85_4__await__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_await_85_4__await",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__true",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__false",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__true__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__true",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__false__method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__false",
          "to": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge__call_method:1w7mi8p:updateprogressasync__call_85_InitializeAsync",
          "from": "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
          "to": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync",
          "kind": "call",
          "label": "none (ensures hub is initialized before sending)",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync__method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition",
          "from": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync",
          "to": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition__method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__true",
          "from": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition__method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__false",
          "from": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__condition",
          "to": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__true__method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__true",
          "to": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__false__method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "from": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__false",
          "to": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge__method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_await_89_7__await",
          "from": "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge",
          "to": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_await_89_7__await",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_await_89_7__await__method:1w7mi8p:updateprogressasync__action_89_external_call_89__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_await_89_7__await",
          "to": "method:1w7mi8p:updateprogressasync__action_89_external_call_89__linear",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_external_call_89__linear__method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_external_call_89_6__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_89_external_call_89__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_external_call_89_6__linear",
          "kind": "next",
          "line": 89,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_external_call_89_6__linear__method:1w7mi8p:updateprogressasync__action_90_state_change_90__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_89_updateprogressasync_external_call_89_6__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_90_state_change_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_90_state_change_90__linear__method:1w7mi8p:updateprogressasync__action_93_updateprogressasync_catch_93_8__catch",
          "from": "method:1w7mi8p:updateprogressasync__action_90_state_change_90__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_93_updateprogressasync_catch_93_8__catch",
          "kind": "exception",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_93_updateprogressasync_catch_93_8__catch__method:1w7mi8p:updateprogressasync__action_93_error_handling_93__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_93_updateprogressasync_catch_93_8__catch",
          "to": "method:1w7mi8p:updateprogressasync__action_93_error_handling_93__linear",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_93_error_handling_93__linear__method:1w7mi8p:updateprogressasync__action_94_error_handling_94__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_93_error_handling_93__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_94_error_handling_94__linear",
          "kind": "next",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_94_error_handling_94__linear__method:1w7mi8p:updateprogressasync__action_94_updateprogressasync_catch_94_9__catch",
          "from": "method:1w7mi8p:updateprogressasync__action_94_error_handling_94__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_94_updateprogressasync_catch_94_9__catch",
          "kind": "exception",
          "line": 94,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_94_updateprogressasync_catch_94_9__catch__method:1w7mi8p:updateprogressasync__action_96_updateprogressasync_log_96_10__linear",
          "from": "method:1w7mi8p:updateprogressasync__action_94_updateprogressasync_catch_94_9__catch",
          "to": "method:1w7mi8p:updateprogressasync__action_96_updateprogressasync_log_96_10__linear",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1w7mi8p:updateprogressasync__action_96_updateprogressasync_log_96_10__linear__method:1w7mi8p:updateprogressasync__action_100_updateprogressasync_return_100_11__return",
          "from": "method:1w7mi8p:updateprogressasync__action_96_updateprogressasync_log_96_10__linear",
          "to": "method:1w7mi8p:updateprogressasync__action_100_updateprogressasync_return_100_11__return",
          "kind": "return",
          "line": 100,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync__jump_NexusReader_UI_Shared_Services_SyncService_cs_InitializeAsync",
          "fromNodeId": "method:1w7mi8p:updateprogressasync__call_85_InitializeAsync",
          "kind": "call-target",
          "targetNodeId": "method:r2rlv7:initializeasync",
          "targetPath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "targetHint": "InitializeAsync",
          "line": 85,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "reason": "Call target InitializeAsync resolved to NexusReader.UI.Shared/Services/SyncService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1w7mi8p:updateprogressasync__action_72_guard_clause_72__merge",
        "method:1w7mi8p:updateprogressasync__action_72_updateprogressasync_guard_clause_72_0__merge",
        "method:1w7mi8p:updateprogressasync__action_85_updateprogressasync_branch_85_3__merge",
        "method:1w7mi8p:updateprogressasync__action_87_updateprogressasync_branch_87_5__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 70,
        "end": 101
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 70,
          "summary": "Control-flow fragment extracted for method UpdateProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:14llm2d:disposeasync__fragment",
      "ownerFileId": "file:1la6lrw:syncservice-cs",
      "ownerSymbolId": "method:14llm2d:disposeasync",
      "ownerSymbolName": "DisposeAsync",
      "entryNodeId": "method:14llm2d:disposeasync__entry",
      "exitNodeIds": [
        "method:14llm2d:disposeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:14llm2d:disposeasync__entry",
          "kind": "entry",
          "label": "DisposeAsync entry",
          "line": 103,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.99,
          "detail": "Cancels pending debounce, disposes the hub connection if present."
        },
        {
          "id": "method:14llm2d:disposeasync__action_105_cancel_105__linear",
          "kind": "statement",
          "label": "cancel-debounce",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Cancels the active CancellationTokenSource to stop pending background send"
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition",
          "kind": "condition",
          "label": "_hubConnection != null",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78,
          "detail": "if (_hubConnection != null)"
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_conditional_dispose_106__linear",
          "kind": "statement",
          "label": "dispose-hub",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "If _hubConnection != null then awaits _hubConnection.DisposeAsync() (external)"
        },
        {
          "id": "method:14llm2d:disposeasync__action_108_disposeasync_await_108_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "await _hubConnection.DisposeAsync();"
        },
        {
          "id": "method:14llm2d:disposeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:14llm2d:disposeasync__entry__method:14llm2d:disposeasync__action_105_cancel_105__linear",
          "from": "method:14llm2d:disposeasync__entry",
          "to": "method:14llm2d:disposeasync__action_105_cancel_105__linear",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14llm2d:disposeasync__action_105_cancel_105__linear__method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition",
          "from": "method:14llm2d:disposeasync__action_105_cancel_105__linear",
          "to": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition__method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__true",
          "from": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition",
          "to": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition__method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__false",
          "from": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__condition",
          "to": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__true__method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "from": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__true",
          "to": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__false__method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "from": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__false",
          "to": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge__method:14llm2d:disposeasync__action_106_conditional_dispose_106__linear",
          "from": "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge",
          "to": "method:14llm2d:disposeasync__action_106_conditional_dispose_106__linear",
          "kind": "next",
          "line": 106,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:14llm2d:disposeasync__action_106_conditional_dispose_106__linear__method:14llm2d:disposeasync__action_108_disposeasync_await_108_1__await",
          "from": "method:14llm2d:disposeasync__action_106_conditional_dispose_106__linear",
          "to": "method:14llm2d:disposeasync__action_108_disposeasync_await_108_1__await",
          "kind": "next",
          "line": 108,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:14llm2d:disposeasync__action_108_disposeasync_await_108_1__await__implicit_return",
          "from": "method:14llm2d:disposeasync__action_108_disposeasync_await_108_1__await",
          "to": "method:14llm2d:disposeasync__implicit_return",
          "kind": "return",
          "line": 110,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:14llm2d:disposeasync__action_106_disposeasync_branch_106_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.94,
      "lineSpan": {
        "start": 103,
        "end": 110
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 103,
          "summary": "Control-flow fragment extracted for method DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oqk0x0:iasyncdisposable-disposeasync__fragment",
      "ownerFileId": "file:1la6lrw:syncservice-cs",
      "ownerSymbolId": "method:1oqk0x0:iasyncdisposable-disposeasync",
      "ownerSymbolName": "IAsyncDisposable.DisposeAsync",
      "entryNodeId": "method:1oqk0x0:iasyncdisposable-disposeasync__entry",
      "exitNodeIds": [
        "method:1oqk0x0:iasyncdisposable-disposeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__entry",
          "kind": "entry",
          "label": "IAsyncDisposable.DisposeAsync entry",
          "line": 112,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.99,
          "detail": "Explicit interface implementation that forwards to DisposeAsync to unify disposal semantics."
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_iasyncdisposable_disposeasync_await_114_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81,
          "detail": "await DisposeAsync();"
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_forwarding_114__linear",
          "kind": "statement",
          "label": "forward-dispose",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7,
          "detail": "Calls the class DisposeAsync and awaits it"
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync",
          "kind": "call",
          "label": "DisposeAsync",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__entry__method:1oqk0x0:iasyncdisposable-disposeasync__action_114_iasyncdisposable_disposeasync_await_114_0__await",
          "from": "method:1oqk0x0:iasyncdisposable-disposeasync__entry",
          "to": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_iasyncdisposable_disposeasync_await_114_0__await",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_iasyncdisposable_disposeasync_await_114_0__await__method:1oqk0x0:iasyncdisposable-disposeasync__action_114_forwarding_114__linear",
          "from": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_iasyncdisposable_disposeasync_await_114_0__await",
          "to": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_forwarding_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_forwarding_114__linear__call_method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync",
          "from": "method:1oqk0x0:iasyncdisposable-disposeasync__action_114_forwarding_114__linear",
          "to": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync",
          "kind": "call",
          "label": "none",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync__implicit_return",
          "from": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync",
          "to": "method:1oqk0x0:iasyncdisposable-disposeasync__implicit_return",
          "kind": "return",
          "line": 115,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync__jump_NexusReader_UI_Shared_Services_SyncService_cs_DisposeAsync",
          "fromNodeId": "method:1oqk0x0:iasyncdisposable-disposeasync__call_114_DisposeAsync",
          "kind": "call-target",
          "targetNodeId": "method:14llm2d:disposeasync",
          "targetPath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "targetHint": "DisposeAsync",
          "line": 114,
          "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs",
          "reason": "Call target DisposeAsync resolved to NexusReader.UI.Shared/Services/SyncService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 112,
        "end": 115
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/SyncService.cs",
          "line": 112,
          "summary": "Control-flow fragment extracted for method IAsyncDisposable.DisposeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1fcqnzv:toggletheme__fragment",
      "ownerFileId": "file:i1pwrm:themeservice-cs",
      "ownerSymbolId": "method:1fcqnzv:toggletheme",
      "ownerSymbolName": "ToggleTheme",
      "entryNodeId": "method:1fcqnzv:toggletheme__entry",
      "exitNodeIds": [
        "method:1fcqnzv:toggletheme__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1fcqnzv:toggletheme__entry",
          "kind": "entry",
          "label": "ToggleTheme entry",
          "line": 8,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.99,
          "detail": "Toggles the IsLightMode flag and notifies subscribers via the OnThemeChanged event."
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_10_state_mutation_10__linear",
          "kind": "statement",
          "label": "Toggle IsLightMode",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7,
          "detail": "Flips IsLightMode boolean (IsLightMode = !IsLightMode)"
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_await_11_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.81,
          "detail": "if (OnThemeChanged != null) await OnThemeChanged();"
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_event_invoke_11__linear",
          "kind": "statement",
          "label": "Notify theme change subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7,
          "detail": "Await invocation of Func<Task> event handler(s) assigned to OnThemeChanged"
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition",
          "kind": "condition",
          "label": "OnThemeChanged != null) await OnThemeChanged(",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78,
          "detail": "if (OnThemeChanged != null) await OnThemeChanged();"
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition",
          "kind": "condition",
          "label": "OnThemeChanged != null",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7,
          "detail": "If non-null, awaits OnThemeChanged()"
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__true",
          "kind": "branch-true",
          "label": "no-subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__false",
          "kind": "branch-false",
          "label": "invoke-subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged",
          "kind": "call",
          "label": "OnThemeChanged",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.88,
          "detail": "no params; awaits the invoked Task returned by subscribers"
        },
        {
          "id": "method:1fcqnzv:toggletheme__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1fcqnzv:toggletheme__entry__method:1fcqnzv:toggletheme__action_10_state_mutation_10__linear",
          "from": "method:1fcqnzv:toggletheme__entry",
          "to": "method:1fcqnzv:toggletheme__action_10_state_mutation_10__linear",
          "kind": "next",
          "line": 10,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_10_state_mutation_10__linear__method:1fcqnzv:toggletheme__action_11_toggletheme_await_11_1__await",
          "from": "method:1fcqnzv:toggletheme__action_10_state_mutation_10__linear",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_await_11_1__await",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_await_11_1__await__method:1fcqnzv:toggletheme__action_11_event_invoke_11__linear",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_await_11_1__await",
          "to": "method:1fcqnzv:toggletheme__action_11_event_invoke_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_event_invoke_11__linear__method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition",
          "from": "method:1fcqnzv:toggletheme__action_11_event_invoke_11__linear",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition__method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__true",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition__method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__false",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__condition",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__true__method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__true",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__false__method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__false",
          "to": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge__method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition",
          "from": "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
          "to": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition__method:1fcqnzv:toggletheme__action_11_guard_clause_11__true",
          "from": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition",
          "to": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__true",
          "kind": "condition-true",
          "label": "no-subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition__method:1fcqnzv:toggletheme__action_11_guard_clause_11__false",
          "from": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__condition",
          "to": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__false",
          "kind": "condition-false",
          "label": "invoke-subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__true__method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "from": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__true",
          "to": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__false__method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "from": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__false",
          "to": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge__call_method:1fcqnzv:toggletheme__call_11_OnThemeChanged",
          "from": "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge",
          "to": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged",
          "kind": "call",
          "label": "no params; awaits the invoked Task returned by subscribers",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged__implicit_return",
          "from": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged",
          "to": "method:1fcqnzv:toggletheme__implicit_return",
          "kind": "return",
          "line": 12,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged__jump_NexusReader_UI_Shared_Services_ThemeService_cs_OnThemeChanged",
          "fromNodeId": "method:1fcqnzv:toggletheme__call_11_OnThemeChanged",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "targetHint": "OnThemeChanged",
          "line": 11,
          "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "reason": "Call target OnThemeChanged in NexusReader.UI.Shared/Services/ThemeService.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1fcqnzv:toggletheme__action_11_toggletheme_branch_11_0__merge",
        "method:1fcqnzv:toggletheme__action_11_guard_clause_11__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 8,
        "end": 12
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/ThemeService.cs",
          "line": 8,
          "summary": "Control-flow fragment extracted for method ToggleTheme.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:16m1d8f:savestringasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:16m1d8f:savestringasync",
      "ownerSymbolName": "SaveStringAsync",
      "entryNodeId": "method:16m1d8f:savestringasync__entry",
      "exitNodeIds": [
        "method:16m1d8f:savestringasync__action_21_return_21__return",
        "method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return",
        "method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return",
        "method:16m1d8f:savestringasync__action_25_return_25__return"
      ],
      "nodes": [
        {
          "id": "method:16m1d8f:savestringasync__entry",
          "kind": "entry",
          "label": "SaveStringAsync entry",
          "line": 16,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a string value into browser localStorage under the given key and returns a Result indicating success or failure."
        },
        {
          "id": "method:16m1d8f:savestringasync__action_18_try_catch_18__linear",
          "kind": "statement",
          "label": "Wraps JS call with exception handling",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "try => return Result.Ok(); catch(Exception ex) => return Result.Fail(ex.Message)"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_18_savestringasync_try_18_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_20_savestringasync_await_20_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value);"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_20_external_call_20__linear",
          "kind": "http-call",
          "label": "Invoke JS localStorage.setItem",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_21_return_21__return",
          "kind": "return",
          "label": "success",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok()"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_23_savestringasync_catch_23_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:16m1d8f:savestringasync__action_25_return_25__return",
          "kind": "return",
          "label": "failure",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:16m1d8f:savestringasync__entry__method:16m1d8f:savestringasync__action_18_try_catch_18__linear",
          "from": "method:16m1d8f:savestringasync__entry",
          "to": "method:16m1d8f:savestringasync__action_18_try_catch_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16m1d8f:savestringasync__action_18_try_catch_18__linear__method:16m1d8f:savestringasync__action_18_savestringasync_try_18_0__try",
          "from": "method:16m1d8f:savestringasync__action_18_try_catch_18__linear",
          "to": "method:16m1d8f:savestringasync__action_18_savestringasync_try_18_0__try",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:16m1d8f:savestringasync__action_18_savestringasync_try_18_0__try__method:16m1d8f:savestringasync__action_20_savestringasync_await_20_1__await",
          "from": "method:16m1d8f:savestringasync__action_18_savestringasync_try_18_0__try",
          "to": "method:16m1d8f:savestringasync__action_20_savestringasync_await_20_1__await",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:16m1d8f:savestringasync__action_20_savestringasync_await_20_1__await__method:16m1d8f:savestringasync__action_20_external_call_20__linear",
          "from": "method:16m1d8f:savestringasync__action_20_savestringasync_await_20_1__await",
          "to": "method:16m1d8f:savestringasync__action_20_external_call_20__linear",
          "kind": "next",
          "line": 20,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16m1d8f:savestringasync__action_20_external_call_20__linear__method:16m1d8f:savestringasync__action_21_return_21__return",
          "from": "method:16m1d8f:savestringasync__action_20_external_call_20__linear",
          "to": "method:16m1d8f:savestringasync__action_21_return_21__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16m1d8f:savestringasync__action_21_return_21__return__method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return",
          "from": "method:16m1d8f:savestringasync__action_21_return_21__return",
          "to": "method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return",
          "kind": "return",
          "line": 21,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return__method:16m1d8f:savestringasync__action_23_savestringasync_catch_23_3__catch",
          "from": "method:16m1d8f:savestringasync__action_21_savestringasync_return_21_2__return",
          "to": "method:16m1d8f:savestringasync__action_23_savestringasync_catch_23_3__catch",
          "kind": "exception",
          "line": 23,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:16m1d8f:savestringasync__action_23_savestringasync_catch_23_3__catch__method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return",
          "from": "method:16m1d8f:savestringasync__action_23_savestringasync_catch_23_3__catch",
          "to": "method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return__method:16m1d8f:savestringasync__action_25_return_25__return",
          "from": "method:16m1d8f:savestringasync__action_25_savestringasync_return_25_4__return",
          "to": "method:16m1d8f:savestringasync__action_25_return_25__return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 16,
        "end": 27
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method SaveStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1rgphlw:getstringasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:1rgphlw:getstringasync",
      "ownerSymbolName": "GetStringAsync",
      "entryNodeId": "method:1rgphlw:getstringasync__entry",
      "exitNodeIds": [
        "method:1rgphlw:getstringasync__action_34_return_34__return",
        "method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return",
        "method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return",
        "method:1rgphlw:getstringasync__action_38_return_38__return"
      ],
      "nodes": [
        {
          "id": "method:1rgphlw:getstringasync__entry",
          "kind": "entry",
          "label": "GetStringAsync entry",
          "line": 29,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a string value from browser localStorage for the given key and returns it wrapped in a Result; failures produce a failed Result."
        },
        {
          "id": "method:1rgphlw:getstringasync__action_31_try_catch_31__linear",
          "kind": "statement",
          "label": "Wraps JS call with exception handling",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "try => return Result.Ok(value); catch(Exception ex) => return Result.Fail(ex.Message)"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_31_getstringasync_try_31_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_33_getstringasync_await_33_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key);"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_33_external_call_33__linear",
          "kind": "http-call",
          "label": "Invoke JS localStorage.getItem",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_34_return_34__return",
          "kind": "return",
          "label": "success",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(value)"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(value);"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_36_getstringasync_catch_36_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:1rgphlw:getstringasync__action_38_return_38__return",
          "kind": "return",
          "label": "failure",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:1rgphlw:getstringasync__entry__method:1rgphlw:getstringasync__action_31_try_catch_31__linear",
          "from": "method:1rgphlw:getstringasync__entry",
          "to": "method:1rgphlw:getstringasync__action_31_try_catch_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgphlw:getstringasync__action_31_try_catch_31__linear__method:1rgphlw:getstringasync__action_31_getstringasync_try_31_0__try",
          "from": "method:1rgphlw:getstringasync__action_31_try_catch_31__linear",
          "to": "method:1rgphlw:getstringasync__action_31_getstringasync_try_31_0__try",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1rgphlw:getstringasync__action_31_getstringasync_try_31_0__try__method:1rgphlw:getstringasync__action_33_getstringasync_await_33_1__await",
          "from": "method:1rgphlw:getstringasync__action_31_getstringasync_try_31_0__try",
          "to": "method:1rgphlw:getstringasync__action_33_getstringasync_await_33_1__await",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1rgphlw:getstringasync__action_33_getstringasync_await_33_1__await__method:1rgphlw:getstringasync__action_33_external_call_33__linear",
          "from": "method:1rgphlw:getstringasync__action_33_getstringasync_await_33_1__await",
          "to": "method:1rgphlw:getstringasync__action_33_external_call_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgphlw:getstringasync__action_33_external_call_33__linear__method:1rgphlw:getstringasync__action_34_return_34__return",
          "from": "method:1rgphlw:getstringasync__action_33_external_call_33__linear",
          "to": "method:1rgphlw:getstringasync__action_34_return_34__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgphlw:getstringasync__action_34_return_34__return__method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return",
          "from": "method:1rgphlw:getstringasync__action_34_return_34__return",
          "to": "method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return__method:1rgphlw:getstringasync__action_36_getstringasync_catch_36_3__catch",
          "from": "method:1rgphlw:getstringasync__action_34_getstringasync_return_34_2__return",
          "to": "method:1rgphlw:getstringasync__action_36_getstringasync_catch_36_3__catch",
          "kind": "exception",
          "line": 36,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1rgphlw:getstringasync__action_36_getstringasync_catch_36_3__catch__method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return",
          "from": "method:1rgphlw:getstringasync__action_36_getstringasync_catch_36_3__catch",
          "to": "method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return__method:1rgphlw:getstringasync__action_38_return_38__return",
          "from": "method:1rgphlw:getstringasync__action_38_getstringasync_return_38_4__return",
          "to": "method:1rgphlw:getstringasync__action_38_return_38__return",
          "kind": "return",
          "line": 38,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 29,
        "end": 40
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method GetStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:hj2kxb:saveboolasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:hj2kxb:saveboolasync",
      "ownerSymbolName": "SaveBoolAsync",
      "entryNodeId": "method:hj2kxb:saveboolasync__entry",
      "exitNodeIds": [
        "method:hj2kxb:saveboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:hj2kxb:saveboolasync__entry",
          "kind": "entry",
          "label": "SaveBoolAsync entry",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Convenience wrapper that saves a boolean by converting it to string and delegating to SaveStringAsync."
        },
        {
          "id": "method:hj2kxb:saveboolasync__action_42_delegate_call_42__linear",
          "kind": "statement",
          "label": "delegates to SaveStringAsync",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "SaveStringAsync(key, value.ToString())"
        },
        {
          "id": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync",
          "kind": "call",
          "label": "SaveStringAsync",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88,
          "detail": "key, value.ToString()"
        },
        {
          "id": "method:hj2kxb:saveboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:hj2kxb:saveboolasync__entry__method:hj2kxb:saveboolasync__action_42_delegate_call_42__linear",
          "from": "method:hj2kxb:saveboolasync__entry",
          "to": "method:hj2kxb:saveboolasync__action_42_delegate_call_42__linear",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:hj2kxb:saveboolasync__action_42_delegate_call_42__linear__call_method:hj2kxb:saveboolasync__call_42_SaveStringAsync",
          "from": "method:hj2kxb:saveboolasync__action_42_delegate_call_42__linear",
          "to": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync",
          "kind": "call",
          "label": "key, value.ToString()",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync__implicit_return",
          "from": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync",
          "to": "method:hj2kxb:saveboolasync__implicit_return",
          "kind": "return",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync__jump_NexusReader_UI_Shared_Services_WebStorageService_cs_SaveStringAsync",
          "fromNodeId": "method:hj2kxb:saveboolasync__call_42_SaveStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:16m1d8f:savestringasync",
          "targetPath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "targetHint": "SaveStringAsync",
          "line": 42,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "reason": "Call target SaveStringAsync resolved to NexusReader.UI.Shared/Services/WebStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 42,
        "end": 42
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 42,
          "summary": "Control-flow fragment extracted for method SaveBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:en9pi8:getboolasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:en9pi8:getboolasync",
      "ownerSymbolName": "GetBoolAsync",
      "entryNodeId": "method:en9pi8:getboolasync__entry",
      "exitNodeIds": [
        "method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return",
        "method:en9pi8:getboolasync__action_54_getboolasync_return_54_5__return"
      ],
      "nodes": [
        {
          "id": "method:en9pi8:getboolasync__entry",
          "kind": "entry",
          "label": "GetBoolAsync entry",
          "line": 44,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a stored string for the key, attempts to parse it as bool, and returns the parsed value or a default wrapped in a Result; catches errors and returns the default."
        },
        {
          "id": "method:en9pi8:getboolasync__action_46_getboolasync_try_46_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:en9pi8:getboolasync__action_48_getboolasync_await_48_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key);"
        },
        {
          "id": "method:en9pi8:getboolasync__action_48_external_call_48__linear",
          "kind": "http-call",
          "label": "Invoke JS localStorage.getItem",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)"
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(value)) return Result.Ok(defaultValue",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(value)) return Result.Ok(defaultValue);"
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(value)",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "if empty => Result.Ok(defaultValue)"
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__true",
          "kind": "branch-true",
          "label": "return default",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "kind": "statement",
          "label": "merge",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__condition",
          "kind": "condition",
          "label": "bool.TryParse(value, out result)",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "returns parsed result when parse succeeds, otherwise defaultValue"
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__true",
          "kind": "branch-true",
          "label": "parsed bool",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__false",
          "kind": "branch-false",
          "label": "use default",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__merge",
          "kind": "statement",
          "label": "merge",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(bool.TryParse(value, out var result) ? result : defaultValue);"
        },
        {
          "id": "method:en9pi8:getboolasync__action_52_try_catch_52__linear",
          "kind": "statement",
          "label": "Returns default on any exception",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "catch => Result.Ok(defaultValue)"
        },
        {
          "id": "method:en9pi8:getboolasync__action_52_getboolasync_catch_52_4__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86,
          "detail": "catch"
        },
        {
          "id": "method:en9pi8:getboolasync__action_54_getboolasync_return_54_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(defaultValue);"
        }
      ],
      "edges": [
        {
          "id": "method:en9pi8:getboolasync__entry__method:en9pi8:getboolasync__action_46_getboolasync_try_46_0__try",
          "from": "method:en9pi8:getboolasync__entry",
          "to": "method:en9pi8:getboolasync__action_46_getboolasync_try_46_0__try",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:en9pi8:getboolasync__action_46_getboolasync_try_46_0__try__method:en9pi8:getboolasync__action_48_getboolasync_await_48_1__await",
          "from": "method:en9pi8:getboolasync__action_46_getboolasync_try_46_0__try",
          "to": "method:en9pi8:getboolasync__action_48_getboolasync_await_48_1__await",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:en9pi8:getboolasync__action_48_getboolasync_await_48_1__await__method:en9pi8:getboolasync__action_48_external_call_48__linear",
          "from": "method:en9pi8:getboolasync__action_48_getboolasync_await_48_1__await",
          "to": "method:en9pi8:getboolasync__action_48_external_call_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_48_external_call_48__linear__method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition",
          "from": "method:en9pi8:getboolasync__action_48_external_call_48__linear",
          "to": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition__method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__true",
          "from": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition",
          "to": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition__method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__false",
          "from": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__condition",
          "to": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__true__method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "from": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__true",
          "to": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__false__method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "from": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__false",
          "to": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge__method:en9pi8:getboolasync__action_49_guard_clause_49__condition",
          "from": "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
          "to": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition__method:en9pi8:getboolasync__action_49_guard_clause_49__true",
          "from": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition",
          "to": "method:en9pi8:getboolasync__action_49_guard_clause_49__true",
          "kind": "condition-true",
          "label": "return default",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition__method:en9pi8:getboolasync__action_49_guard_clause_49__false",
          "from": "method:en9pi8:getboolasync__action_49_guard_clause_49__condition",
          "to": "method:en9pi8:getboolasync__action_49_guard_clause_49__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__true__method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "from": "method:en9pi8:getboolasync__action_49_guard_clause_49__true",
          "to": "method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__false__method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "from": "method:en9pi8:getboolasync__action_49_guard_clause_49__false",
          "to": "method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_49_guard_clause_49__merge__method:en9pi8:getboolasync__action_50_branch_50__condition",
          "from": "method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
          "to": "method:en9pi8:getboolasync__action_50_branch_50__condition",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__condition__method:en9pi8:getboolasync__action_50_branch_50__true",
          "from": "method:en9pi8:getboolasync__action_50_branch_50__condition",
          "to": "method:en9pi8:getboolasync__action_50_branch_50__true",
          "kind": "condition-true",
          "label": "parsed bool",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__condition__method:en9pi8:getboolasync__action_50_branch_50__false",
          "from": "method:en9pi8:getboolasync__action_50_branch_50__condition",
          "to": "method:en9pi8:getboolasync__action_50_branch_50__false",
          "kind": "condition-false",
          "label": "use default",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__true__method:en9pi8:getboolasync__action_50_branch_50__merge",
          "from": "method:en9pi8:getboolasync__action_50_branch_50__true",
          "to": "method:en9pi8:getboolasync__action_50_branch_50__merge",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__false__method:en9pi8:getboolasync__action_50_branch_50__merge",
          "from": "method:en9pi8:getboolasync__action_50_branch_50__false",
          "to": "method:en9pi8:getboolasync__action_50_branch_50__merge",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_branch_50__merge__method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return",
          "from": "method:en9pi8:getboolasync__action_50_branch_50__merge",
          "to": "method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return",
          "kind": "return",
          "line": 50,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return__method:en9pi8:getboolasync__action_52_try_catch_52__linear",
          "from": "method:en9pi8:getboolasync__action_50_getboolasync_return_50_3__return",
          "to": "method:en9pi8:getboolasync__action_52_try_catch_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:en9pi8:getboolasync__action_52_try_catch_52__linear__method:en9pi8:getboolasync__action_52_getboolasync_catch_52_4__catch",
          "from": "method:en9pi8:getboolasync__action_52_try_catch_52__linear",
          "to": "method:en9pi8:getboolasync__action_52_getboolasync_catch_52_4__catch",
          "kind": "exception",
          "line": 52,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:en9pi8:getboolasync__action_52_getboolasync_catch_52_4__catch__method:en9pi8:getboolasync__action_54_getboolasync_return_54_5__return",
          "from": "method:en9pi8:getboolasync__action_52_getboolasync_catch_52_4__catch",
          "to": "method:en9pi8:getboolasync__action_54_getboolasync_return_54_5__return",
          "kind": "return",
          "line": 54,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:en9pi8:getboolasync__action_49_getboolasync_guard_clause_49_2__merge",
        "method:en9pi8:getboolasync__action_49_guard_clause_49__merge",
        "method:en9pi8:getboolasync__action_50_branch_50__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 44,
        "end": 56
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 44,
          "summary": "Control-flow fragment extracted for method GetBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17924up:removeasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:17924up:removeasync",
      "ownerSymbolName": "RemoveAsync",
      "entryNodeId": "method:17924up:removeasync__entry",
      "exitNodeIds": [
        "method:17924up:removeasync__action_63_return_63__return",
        "method:17924up:removeasync__action_63_removeasync_return_63_2__return",
        "method:17924up:removeasync__action_67_removeasync_return_67_4__return",
        "method:17924up:removeasync__action_67_return_67__return"
      ],
      "nodes": [
        {
          "id": "method:17924up:removeasync__entry",
          "kind": "entry",
          "label": "RemoveAsync entry",
          "line": 58,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes an item from browser localStorage by key and returns Result success/failure."
        },
        {
          "id": "method:17924up:removeasync__action_60_try_catch_60__linear",
          "kind": "statement",
          "label": "Wraps JS call with exception handling",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "try => Result.Ok(); catch(Exception ex) => Result.Fail(ex.Message)"
        },
        {
          "id": "method:17924up:removeasync__action_60_removeasync_try_60_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:17924up:removeasync__action_62_removeasync_await_62_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key);"
        },
        {
          "id": "method:17924up:removeasync__action_62_external_call_62__linear",
          "kind": "http-call",
          "label": "Invoke JS localStorage.removeItem",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)"
        },
        {
          "id": "method:17924up:removeasync__action_63_return_63__return",
          "kind": "return",
          "label": "success",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok()"
        },
        {
          "id": "method:17924up:removeasync__action_63_removeasync_return_63_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:17924up:removeasync__action_65_removeasync_catch_65_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:17924up:removeasync__action_67_removeasync_return_67_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:17924up:removeasync__action_67_return_67__return",
          "kind": "return",
          "label": "failure",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:17924up:removeasync__entry__method:17924up:removeasync__action_60_try_catch_60__linear",
          "from": "method:17924up:removeasync__entry",
          "to": "method:17924up:removeasync__action_60_try_catch_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17924up:removeasync__action_60_try_catch_60__linear__method:17924up:removeasync__action_60_removeasync_try_60_0__try",
          "from": "method:17924up:removeasync__action_60_try_catch_60__linear",
          "to": "method:17924up:removeasync__action_60_removeasync_try_60_0__try",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17924up:removeasync__action_60_removeasync_try_60_0__try__method:17924up:removeasync__action_62_removeasync_await_62_1__await",
          "from": "method:17924up:removeasync__action_60_removeasync_try_60_0__try",
          "to": "method:17924up:removeasync__action_62_removeasync_await_62_1__await",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17924up:removeasync__action_62_removeasync_await_62_1__await__method:17924up:removeasync__action_62_external_call_62__linear",
          "from": "method:17924up:removeasync__action_62_removeasync_await_62_1__await",
          "to": "method:17924up:removeasync__action_62_external_call_62__linear",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17924up:removeasync__action_62_external_call_62__linear__method:17924up:removeasync__action_63_return_63__return",
          "from": "method:17924up:removeasync__action_62_external_call_62__linear",
          "to": "method:17924up:removeasync__action_63_return_63__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17924up:removeasync__action_63_return_63__return__method:17924up:removeasync__action_63_removeasync_return_63_2__return",
          "from": "method:17924up:removeasync__action_63_return_63__return",
          "to": "method:17924up:removeasync__action_63_removeasync_return_63_2__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17924up:removeasync__action_63_removeasync_return_63_2__return__method:17924up:removeasync__action_65_removeasync_catch_65_3__catch",
          "from": "method:17924up:removeasync__action_63_removeasync_return_63_2__return",
          "to": "method:17924up:removeasync__action_65_removeasync_catch_65_3__catch",
          "kind": "exception",
          "line": 65,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:17924up:removeasync__action_65_removeasync_catch_65_3__catch__method:17924up:removeasync__action_67_removeasync_return_67_4__return",
          "from": "method:17924up:removeasync__action_65_removeasync_catch_65_3__catch",
          "to": "method:17924up:removeasync__action_67_removeasync_return_67_4__return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17924up:removeasync__action_67_removeasync_return_67_4__return__method:17924up:removeasync__action_67_return_67__return",
          "from": "method:17924up:removeasync__action_67_removeasync_return_67_4__return",
          "to": "method:17924up:removeasync__action_67_return_67__return",
          "kind": "return",
          "line": 67,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 58,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 58,
          "summary": "Control-flow fragment extracted for method RemoveAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ly29k7:savesecurestring__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:ly29k7:savesecurestring",
      "ownerSymbolName": "SaveSecureString",
      "entryNodeId": "method:ly29k7:savesecurestring__entry",
      "exitNodeIds": [
        "method:ly29k7:savesecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ly29k7:savesecurestring__entry",
          "kind": "entry",
          "label": "SaveSecureString entry",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Secure-named wrapper that currently delegates to SaveStringAsync (no extra security applied)."
        },
        {
          "id": "method:ly29k7:savesecurestring__action_71_savesecurestring_await_71_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result> SaveSecureString(string key, string value) => await SaveStringAsync(key, value);"
        },
        {
          "id": "method:ly29k7:savesecurestring__action_71_delegate_call_71__linear",
          "kind": "statement",
          "label": "delegates to SaveStringAsync",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "await SaveStringAsync(key, value)"
        },
        {
          "id": "method:ly29k7:savesecurestring__call_71_SaveStringAsync",
          "kind": "call",
          "label": "SaveStringAsync",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88,
          "detail": "key, value"
        },
        {
          "id": "method:ly29k7:savesecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ly29k7:savesecurestring__entry__method:ly29k7:savesecurestring__action_71_savesecurestring_await_71_0__await",
          "from": "method:ly29k7:savesecurestring__entry",
          "to": "method:ly29k7:savesecurestring__action_71_savesecurestring_await_71_0__await",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:ly29k7:savesecurestring__action_71_savesecurestring_await_71_0__await__method:ly29k7:savesecurestring__action_71_delegate_call_71__linear",
          "from": "method:ly29k7:savesecurestring__action_71_savesecurestring_await_71_0__await",
          "to": "method:ly29k7:savesecurestring__action_71_delegate_call_71__linear",
          "kind": "next",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ly29k7:savesecurestring__action_71_delegate_call_71__linear__call_method:ly29k7:savesecurestring__call_71_SaveStringAsync",
          "from": "method:ly29k7:savesecurestring__action_71_delegate_call_71__linear",
          "to": "method:ly29k7:savesecurestring__call_71_SaveStringAsync",
          "kind": "call",
          "label": "key, value",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:ly29k7:savesecurestring__call_71_SaveStringAsync__implicit_return",
          "from": "method:ly29k7:savesecurestring__call_71_SaveStringAsync",
          "to": "method:ly29k7:savesecurestring__implicit_return",
          "kind": "return",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ly29k7:savesecurestring__call_71_SaveStringAsync__jump_NexusReader_UI_Shared_Services_WebStorageService_cs_SaveStringAsync",
          "fromNodeId": "method:ly29k7:savesecurestring__call_71_SaveStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:16m1d8f:savestringasync",
          "targetPath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "targetHint": "SaveStringAsync",
          "line": 71,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "reason": "Call target SaveStringAsync resolved to NexusReader.UI.Shared/Services/WebStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 71,
        "end": 71
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 71,
          "summary": "Control-flow fragment extracted for method SaveSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xwytsy:getsecurestring__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:1xwytsy:getsecurestring",
      "ownerSymbolName": "GetSecureString",
      "entryNodeId": "method:1xwytsy:getsecurestring__entry",
      "exitNodeIds": [
        "method:1xwytsy:getsecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1xwytsy:getsecurestring__entry",
          "kind": "entry",
          "label": "GetSecureString entry",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Secure-named wrapper that delegates to GetStringAsync (no extra security applied)."
        },
        {
          "id": "method:1xwytsy:getsecurestring__action_73_getsecurestring_await_73_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result<string?>> GetSecureString(string key) => await GetStringAsync(key);"
        },
        {
          "id": "method:1xwytsy:getsecurestring__action_73_delegate_call_73__linear",
          "kind": "statement",
          "label": "delegates to GetStringAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "await GetStringAsync(key)"
        },
        {
          "id": "method:1xwytsy:getsecurestring__call_73_GetStringAsync",
          "kind": "call",
          "label": "GetStringAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88,
          "detail": "key"
        },
        {
          "id": "method:1xwytsy:getsecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1xwytsy:getsecurestring__entry__method:1xwytsy:getsecurestring__action_73_getsecurestring_await_73_0__await",
          "from": "method:1xwytsy:getsecurestring__entry",
          "to": "method:1xwytsy:getsecurestring__action_73_getsecurestring_await_73_0__await",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1xwytsy:getsecurestring__action_73_getsecurestring_await_73_0__await__method:1xwytsy:getsecurestring__action_73_delegate_call_73__linear",
          "from": "method:1xwytsy:getsecurestring__action_73_getsecurestring_await_73_0__await",
          "to": "method:1xwytsy:getsecurestring__action_73_delegate_call_73__linear",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xwytsy:getsecurestring__action_73_delegate_call_73__linear__call_method:1xwytsy:getsecurestring__call_73_GetStringAsync",
          "from": "method:1xwytsy:getsecurestring__action_73_delegate_call_73__linear",
          "to": "method:1xwytsy:getsecurestring__call_73_GetStringAsync",
          "kind": "call",
          "label": "key",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1xwytsy:getsecurestring__call_73_GetStringAsync__implicit_return",
          "from": "method:1xwytsy:getsecurestring__call_73_GetStringAsync",
          "to": "method:1xwytsy:getsecurestring__implicit_return",
          "kind": "return",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1xwytsy:getsecurestring__call_73_GetStringAsync__jump_NexusReader_UI_Shared_Services_WebStorageService_cs_GetStringAsync",
          "fromNodeId": "method:1xwytsy:getsecurestring__call_73_GetStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:1rgphlw:getstringasync",
          "targetPath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "targetHint": "GetStringAsync",
          "line": 73,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "reason": "Call target GetStringAsync resolved to NexusReader.UI.Shared/Services/WebStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 73,
        "end": 73
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 73,
          "summary": "Control-flow fragment extracted for method GetSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1bx0ikl:removesecureasync__fragment",
      "ownerFileId": "file:15km3l4:webstorageservice-cs",
      "ownerSymbolId": "method:1bx0ikl:removesecureasync",
      "ownerSymbolName": "RemoveSecureAsync",
      "entryNodeId": "method:1bx0ikl:removesecureasync__entry",
      "exitNodeIds": [
        "method:1bx0ikl:removesecureasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1bx0ikl:removesecureasync__entry",
          "kind": "entry",
          "label": "RemoveSecureAsync entry",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.99,
          "detail": "Secure-named wrapper that delegates to RemoveAsync (no extra security applied)."
        },
        {
          "id": "method:1bx0ikl:removesecureasync__action_75_delegate_call_75__linear",
          "kind": "statement",
          "label": "delegates to RemoveAsync",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7,
          "detail": "RemoveAsync(key)"
        },
        {
          "id": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync",
          "kind": "call",
          "label": "RemoveAsync",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88,
          "detail": "key"
        },
        {
          "id": "method:1bx0ikl:removesecureasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1bx0ikl:removesecureasync__entry__method:1bx0ikl:removesecureasync__action_75_delegate_call_75__linear",
          "from": "method:1bx0ikl:removesecureasync__entry",
          "to": "method:1bx0ikl:removesecureasync__action_75_delegate_call_75__linear",
          "kind": "next",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1bx0ikl:removesecureasync__action_75_delegate_call_75__linear__call_method:1bx0ikl:removesecureasync__call_75_RemoveAsync",
          "from": "method:1bx0ikl:removesecureasync__action_75_delegate_call_75__linear",
          "to": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync",
          "kind": "call",
          "label": "key",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync__implicit_return",
          "from": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync",
          "to": "method:1bx0ikl:removesecureasync__implicit_return",
          "kind": "return",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync__jump_NexusReader_UI_Shared_Services_WebStorageService_cs_RemoveAsync",
          "fromNodeId": "method:1bx0ikl:removesecureasync__call_75_RemoveAsync",
          "kind": "call-target",
          "targetNodeId": "method:17924up:removeasync",
          "targetPath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "targetHint": "RemoveAsync",
          "line": 75,
          "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "reason": "Call target RemoveAsync resolved to NexusReader.UI.Shared/Services/WebStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 75,
        "end": 75
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.UI.Shared/Services/WebStorageService.cs",
          "line": 75,
          "summary": "Control-flow fragment extracted for method RemoveSecureAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:17fop7p:sendasync__fragment",
      "ownerFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "ownerSymbolId": "method:17fop7p:sendasync",
      "ownerSymbolName": "SendAsync",
      "entryNodeId": "method:17fop7p:sendasync__entry",
      "exitNodeIds": [
        "method:17fop7p:sendasync__action_95_sendasync_return_95_21__return",
        "method:17fop7p:sendasync__action_109_sendasync_return_109_24__return"
      ],
      "nodes": [
        {
          "id": "method:17fop7p:sendasync__entry",
          "kind": "entry",
          "label": "SendAsync entry",
          "line": 27,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.99,
          "detail": "Intercepts outgoing HTTP requests to add a Bearer token for trusted origins, forwards the request, and on 401 attempts a thread-safe token refresh and optionally retries the request with the new token."
        },
        {
          "id": "method:17fop7p:sendasync__action_27_sendasync_external_call_27_0__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 27,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82,
          "detail": "protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)"
        },
        {
          "id": "method:17fop7p:sendasync__action_30_mutation_30__linear",
          "kind": "statement",
          "label": "Force browser credentials for SSR",
          "line": 30,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include)"
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__condition",
          "kind": "condition",
          "label": "path contains identity/login|register|refresh",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__true",
          "kind": "branch-true",
          "label": "isAuthEndpoint=true",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__false",
          "kind": "branch-false",
          "label": "isAuthEndpoint=false",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__merge",
          "kind": "statement",
          "label": "merge",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__condition",
          "kind": "condition",
          "label": "request.RequestUri is local or starts with NavigationManager.BaseUri",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__true",
          "kind": "branch-true",
          "label": "isTrustedHost=true",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__false",
          "kind": "branch-false",
          "label": "isTrustedHost=false",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition",
          "kind": "condition",
          "label": "!isAuthEndpoint && isTrustedHost",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (!isAuthEndpoint && isTrustedHost)"
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_47_sendasync_await_47_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var tokenResult = await _storageService.GetSecureString(TokenKey);"
        },
        {
          "id": "method:17fop7p:sendasync__action_47_external_call_47__linear",
          "kind": "http-call",
          "label": "Read stored token",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "Calls INativeStorageService.GetSecureString to obtain JWT"
        },
        {
          "id": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "INativeStorageService.GetSecureString",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "TokenKey ('nexus_auth_token') to read stored JWT"
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition",
          "kind": "condition",
          "label": "tokenResult.IsSuccess && !string.IsNullOrEmpty(tokenResult.Value)",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (tokenResult.IsSuccess && !string.IsNullOrEmpty(tokenResult.Value))"
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__condition",
          "kind": "condition",
          "label": "token read succeeded and non-empty",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__true",
          "kind": "branch-true",
          "label": "attach-bearer",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__false",
          "kind": "branch-false",
          "label": "skip-attachment",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "kind": "statement",
          "label": "merge",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_55_sendasync_await_55_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var response = await base.SendAsync(request, cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_55_external_call_55__linear",
          "kind": "http-call",
          "label": "Send base HTTP request",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "Delegates to base.SendAsync to perform network call"
        },
        {
          "id": "method:17fop7p:sendasync__action_55_sendasync_external_call_55_4__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82,
          "detail": "var response = await base.SendAsync(request, cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__condition",
          "kind": "condition",
          "label": "response.StatusCode == Unauthorized && not an auth endpoint",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__true",
          "kind": "branch-true",
          "label": "attempt-refresh",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__false",
          "kind": "branch-false",
          "label": "return-response",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition",
          "kind": "condition",
          "label": "response.StatusCode == System.Net.HttpStatusCode.Unauthorized && !isAuthEndpoint",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized && !isAuthEndpoint)"
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_60_sendasync_await_60_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "await _refreshSemaphore.WaitAsync(cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_60_synchronization_60__linear",
          "kind": "statement",
          "label": "Semaphore for concurrent refresh",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "WaitAsync/Release on static _refreshSemaphore to serialize refresh attempts"
        },
        {
          "id": "method:17fop7p:sendasync__action_61_sendasync_try_61_8__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:17fop7p:sendasync__action_64_sendasync_await_64_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var tokenResult = await _storageService.GetSecureString(TokenKey);"
        },
        {
          "id": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "INativeStorageService.GetSecureString",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "TokenKey to re-read token after detecting 401"
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(currentToken) && currentToken != originalToken",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(currentToken) && currentToken != originalToken)"
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__condition",
          "kind": "condition",
          "label": "currentToken != null && currentToken != originalToken",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__true",
          "kind": "branch-true",
          "label": "use-new-token",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__false",
          "kind": "branch-false",
          "label": "perform-refresh",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__merge",
          "kind": "statement",
          "label": "merge",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_76_scope_76__linear",
          "kind": "statement",
          "label": "Create service scope for scoped services",
          "line": 76,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "using var scope = _serviceProvider.CreateScope(); resolves IIdentityService from scope"
        },
        {
          "id": "method:17fop7p:sendasync__action_78_sendasync_await_78_12__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var refreshResult = await identityService.RefreshTokenAsync();"
        },
        {
          "id": "method:17fop7p:sendasync__action_78_external_call_78__linear",
          "kind": "http-call",
          "label": "Refresh token via identity service",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "identityService.RefreshTokenAsync(); if success, re-read stored token"
        },
        {
          "id": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync",
          "kind": "call",
          "label": "IIdentityService.RefreshTokenAsync",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "no params; triggers refresh flow (resolved from scoped provider)"
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__condition",
          "kind": "condition",
          "label": "refreshResult.IsSuccess",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__true",
          "kind": "branch-true",
          "label": "refreshed=true (read token)",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__false",
          "kind": "branch-false",
          "label": "refreshed=false (logout)",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition",
          "kind": "condition",
          "label": "refreshResult.IsSuccess",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (refreshResult.IsSuccess)"
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__true",
          "kind": "branch-true",
          "label": "true",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__false",
          "kind": "branch-false",
          "label": "false",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "kind": "statement",
          "label": "merge",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_81_sendasync_await_81_14__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var newTokenResult = await _storageService.GetSecureString(TokenKey);"
        },
        {
          "id": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "INativeStorageService.GetSecureString",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "TokenKey to read token after refresh"
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "kind": "statement",
          "label": "merge",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_87_sendasync_await_87_16__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "await identityService.LogoutAsync();"
        },
        {
          "id": "method:17fop7p:sendasync__action_87_external_call_87__linear",
          "kind": "http-call",
          "label": "Logout on refresh failure",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "identityService.LogoutAsync()"
        },
        {
          "id": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync",
          "kind": "call",
          "label": "IIdentityService.LogoutAsync",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "no params; invoked if refresh fails"
        },
        {
          "id": "method:17fop7p:sendasync__action_91_control_flow_91__linear",
          "kind": "statement",
          "label": "Retry original request with refreshed token",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "Clones request, sets Authorization with currentToken, and resends via base.SendAsync"
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition",
          "kind": "condition",
          "label": "refreshed && !string.IsNullOrEmpty(currentToken)",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (refreshed && !string.IsNullOrEmpty(currentToken))"
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__true",
          "kind": "branch-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__false",
          "kind": "branch-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_93_sendasync_await_93_18__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 93,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "var newRequest = await CloneHttpRequestMessageAsync(request);"
        },
        {
          "id": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync",
          "kind": "call",
          "label": "CloneHttpRequestMessageAsync",
          "line": 93,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88,
          "detail": "original HttpRequestMessage to produce a resendable clone"
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_await_95_20__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "return await base.SendAsync(newRequest, cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_return_95_21__return",
          "kind": "return",
          "label": "Returns result",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "return await base.SendAsync(newRequest, cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_external_call_95_19__linear",
          "kind": "http-call",
          "label": "Calls external dependency",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82,
          "detail": "return await base.SendAsync(newRequest, cancellationToken);"
        },
        {
          "id": "method:17fop7p:sendasync__action_98_sendasync_catch_98_22__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:17fop7p:sendasync__action_98_error_handling_98__linear",
          "kind": "statement",
          "label": "Catch and audit log refresh exceptions",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "Console.WriteLine with sanitized message"
        },
        {
          "id": "method:17fop7p:sendasync__action_103_sendasync_finally_103_23__finally",
          "kind": "finally",
          "label": "Runs cleanup or finalization",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84,
          "detail": "finally"
        },
        {
          "id": "method:17fop7p:sendasync__action_105_synchronization_105__linear",
          "kind": "statement",
          "label": "Release semaphore",
          "line": 105,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "_refreshSemaphore.Release() in finally"
        },
        {
          "id": "method:17fop7p:sendasync__action_109_sendasync_return_109_24__return",
          "kind": "return",
          "label": "Returns result",
          "line": 109,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "return response;"
        }
      ],
      "edges": [
        {
          "id": "method:17fop7p:sendasync__entry__method:17fop7p:sendasync__action_27_sendasync_external_call_27_0__linear",
          "from": "method:17fop7p:sendasync__entry",
          "to": "method:17fop7p:sendasync__action_27_sendasync_external_call_27_0__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82
        },
        {
          "id": "method:17fop7p:sendasync__action_27_sendasync_external_call_27_0__linear__method:17fop7p:sendasync__action_30_mutation_30__linear",
          "from": "method:17fop7p:sendasync__action_27_sendasync_external_call_27_0__linear",
          "to": "method:17fop7p:sendasync__action_30_mutation_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_30_mutation_30__linear__method:17fop7p:sendasync__action_32_branch_32__condition",
          "from": "method:17fop7p:sendasync__action_30_mutation_30__linear",
          "to": "method:17fop7p:sendasync__action_32_branch_32__condition",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__condition__method:17fop7p:sendasync__action_32_branch_32__true",
          "from": "method:17fop7p:sendasync__action_32_branch_32__condition",
          "to": "method:17fop7p:sendasync__action_32_branch_32__true",
          "kind": "condition-true",
          "label": "isAuthEndpoint=true",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__condition__method:17fop7p:sendasync__action_32_branch_32__false",
          "from": "method:17fop7p:sendasync__action_32_branch_32__condition",
          "to": "method:17fop7p:sendasync__action_32_branch_32__false",
          "kind": "condition-false",
          "label": "isAuthEndpoint=false",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__true__method:17fop7p:sendasync__action_32_branch_32__merge",
          "from": "method:17fop7p:sendasync__action_32_branch_32__true",
          "to": "method:17fop7p:sendasync__action_32_branch_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__false__method:17fop7p:sendasync__action_32_branch_32__merge",
          "from": "method:17fop7p:sendasync__action_32_branch_32__false",
          "to": "method:17fop7p:sendasync__action_32_branch_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_32_branch_32__merge__method:17fop7p:sendasync__action_38_branch_38__condition",
          "from": "method:17fop7p:sendasync__action_32_branch_32__merge",
          "to": "method:17fop7p:sendasync__action_38_branch_38__condition",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__condition__method:17fop7p:sendasync__action_38_branch_38__true",
          "from": "method:17fop7p:sendasync__action_38_branch_38__condition",
          "to": "method:17fop7p:sendasync__action_38_branch_38__true",
          "kind": "condition-true",
          "label": "isTrustedHost=true",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__condition__method:17fop7p:sendasync__action_38_branch_38__false",
          "from": "method:17fop7p:sendasync__action_38_branch_38__condition",
          "to": "method:17fop7p:sendasync__action_38_branch_38__false",
          "kind": "condition-false",
          "label": "isTrustedHost=false",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__true__method:17fop7p:sendasync__action_38_branch_38__merge",
          "from": "method:17fop7p:sendasync__action_38_branch_38__true",
          "to": "method:17fop7p:sendasync__action_38_branch_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__false__method:17fop7p:sendasync__action_38_branch_38__merge",
          "from": "method:17fop7p:sendasync__action_38_branch_38__false",
          "to": "method:17fop7p:sendasync__action_38_branch_38__merge",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_38_branch_38__merge__method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition",
          "from": "method:17fop7p:sendasync__action_38_branch_38__merge",
          "to": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition__method:17fop7p:sendasync__action_45_sendasync_branch_45_1__true",
          "from": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition",
          "to": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition__method:17fop7p:sendasync__action_45_sendasync_branch_45_1__false",
          "from": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__condition",
          "to": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__true__method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "from": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__true",
          "to": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__false__method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "from": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__false",
          "to": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge__method:17fop7p:sendasync__action_47_sendasync_await_47_2__await",
          "from": "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
          "to": "method:17fop7p:sendasync__action_47_sendasync_await_47_2__await",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_47_sendasync_await_47_2__await__method:17fop7p:sendasync__action_47_external_call_47__linear",
          "from": "method:17fop7p:sendasync__action_47_sendasync_await_47_2__await",
          "to": "method:17fop7p:sendasync__action_47_external_call_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_47_external_call_47__linear__call_method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString",
          "from": "method:17fop7p:sendasync__action_47_external_call_47__linear",
          "to": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "TokenKey ('nexus_auth_token') to read stored JWT",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString__method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition",
          "from": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString",
          "to": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition__method:17fop7p:sendasync__action_48_sendasync_branch_48_3__true",
          "from": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition",
          "to": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition__method:17fop7p:sendasync__action_48_sendasync_branch_48_3__false",
          "from": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__condition",
          "to": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__true__method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "from": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__true",
          "to": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__false__method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "from": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__false",
          "to": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge__method:17fop7p:sendasync__action_48_guard_clause_48__condition",
          "from": "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
          "to": "method:17fop7p:sendasync__action_48_guard_clause_48__condition",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__condition__method:17fop7p:sendasync__action_48_guard_clause_48__true",
          "from": "method:17fop7p:sendasync__action_48_guard_clause_48__condition",
          "to": "method:17fop7p:sendasync__action_48_guard_clause_48__true",
          "kind": "condition-true",
          "label": "attach-bearer",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__condition__method:17fop7p:sendasync__action_48_guard_clause_48__false",
          "from": "method:17fop7p:sendasync__action_48_guard_clause_48__condition",
          "to": "method:17fop7p:sendasync__action_48_guard_clause_48__false",
          "kind": "condition-false",
          "label": "skip-attachment",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__true__method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "from": "method:17fop7p:sendasync__action_48_guard_clause_48__true",
          "to": "method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__false__method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "from": "method:17fop7p:sendasync__action_48_guard_clause_48__false",
          "to": "method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_48_guard_clause_48__merge__method:17fop7p:sendasync__action_55_sendasync_await_55_5__await",
          "from": "method:17fop7p:sendasync__action_48_guard_clause_48__merge",
          "to": "method:17fop7p:sendasync__action_55_sendasync_await_55_5__await",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_55_sendasync_await_55_5__await__method:17fop7p:sendasync__action_55_external_call_55__linear",
          "from": "method:17fop7p:sendasync__action_55_sendasync_await_55_5__await",
          "to": "method:17fop7p:sendasync__action_55_external_call_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_55_external_call_55__linear__method:17fop7p:sendasync__action_55_sendasync_external_call_55_4__linear",
          "from": "method:17fop7p:sendasync__action_55_external_call_55__linear",
          "to": "method:17fop7p:sendasync__action_55_sendasync_external_call_55_4__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82
        },
        {
          "id": "method:17fop7p:sendasync__action_55_sendasync_external_call_55_4__linear__method:17fop7p:sendasync__action_58_branch_58__condition",
          "from": "method:17fop7p:sendasync__action_55_sendasync_external_call_55_4__linear",
          "to": "method:17fop7p:sendasync__action_58_branch_58__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__condition__method:17fop7p:sendasync__action_58_branch_58__true",
          "from": "method:17fop7p:sendasync__action_58_branch_58__condition",
          "to": "method:17fop7p:sendasync__action_58_branch_58__true",
          "kind": "condition-true",
          "label": "attempt-refresh",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__condition__method:17fop7p:sendasync__action_58_branch_58__false",
          "from": "method:17fop7p:sendasync__action_58_branch_58__condition",
          "to": "method:17fop7p:sendasync__action_58_branch_58__false",
          "kind": "condition-false",
          "label": "return-response",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__true__method:17fop7p:sendasync__action_58_branch_58__merge",
          "from": "method:17fop7p:sendasync__action_58_branch_58__true",
          "to": "method:17fop7p:sendasync__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__false__method:17fop7p:sendasync__action_58_branch_58__merge",
          "from": "method:17fop7p:sendasync__action_58_branch_58__false",
          "to": "method:17fop7p:sendasync__action_58_branch_58__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_58_branch_58__merge__method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition",
          "from": "method:17fop7p:sendasync__action_58_branch_58__merge",
          "to": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition__method:17fop7p:sendasync__action_58_sendasync_branch_58_6__true",
          "from": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition",
          "to": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition__method:17fop7p:sendasync__action_58_sendasync_branch_58_6__false",
          "from": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__condition",
          "to": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__true__method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "from": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__true",
          "to": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__false__method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "from": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__false",
          "to": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge__method:17fop7p:sendasync__action_60_sendasync_await_60_7__await",
          "from": "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
          "to": "method:17fop7p:sendasync__action_60_sendasync_await_60_7__await",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_60_sendasync_await_60_7__await__method:17fop7p:sendasync__action_60_synchronization_60__linear",
          "from": "method:17fop7p:sendasync__action_60_sendasync_await_60_7__await",
          "to": "method:17fop7p:sendasync__action_60_synchronization_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_60_synchronization_60__linear__method:17fop7p:sendasync__action_61_sendasync_try_61_8__try",
          "from": "method:17fop7p:sendasync__action_60_synchronization_60__linear",
          "to": "method:17fop7p:sendasync__action_61_sendasync_try_61_8__try",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_61_sendasync_try_61_8__try__method:17fop7p:sendasync__action_64_sendasync_await_64_9__await",
          "from": "method:17fop7p:sendasync__action_61_sendasync_try_61_8__try",
          "to": "method:17fop7p:sendasync__action_64_sendasync_await_64_9__await",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_64_sendasync_await_64_9__await__call_method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString",
          "from": "method:17fop7p:sendasync__action_64_sendasync_await_64_9__await",
          "to": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "TokenKey to re-read token after detecting 401",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString__method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition",
          "from": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString",
          "to": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition__method:17fop7p:sendasync__action_69_sendasync_branch_69_10__true",
          "from": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition",
          "to": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition__method:17fop7p:sendasync__action_69_sendasync_branch_69_10__false",
          "from": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__condition",
          "to": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__true__method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "from": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__true",
          "to": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__false__method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "from": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__false",
          "to": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge__method:17fop7p:sendasync__action_69_branch_69__condition",
          "from": "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
          "to": "method:17fop7p:sendasync__action_69_branch_69__condition",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__condition__method:17fop7p:sendasync__action_69_branch_69__true",
          "from": "method:17fop7p:sendasync__action_69_branch_69__condition",
          "to": "method:17fop7p:sendasync__action_69_branch_69__true",
          "kind": "condition-true",
          "label": "use-new-token",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__condition__method:17fop7p:sendasync__action_69_branch_69__false",
          "from": "method:17fop7p:sendasync__action_69_branch_69__condition",
          "to": "method:17fop7p:sendasync__action_69_branch_69__false",
          "kind": "condition-false",
          "label": "perform-refresh",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__true__method:17fop7p:sendasync__action_69_branch_69__merge",
          "from": "method:17fop7p:sendasync__action_69_branch_69__true",
          "to": "method:17fop7p:sendasync__action_69_branch_69__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__false__method:17fop7p:sendasync__action_69_branch_69__merge",
          "from": "method:17fop7p:sendasync__action_69_branch_69__false",
          "to": "method:17fop7p:sendasync__action_69_branch_69__merge",
          "kind": "next",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_69_branch_69__merge__method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition",
          "from": "method:17fop7p:sendasync__action_69_branch_69__merge",
          "to": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition",
          "kind": "fallback",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition__method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__true",
          "from": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition",
          "to": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition__method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__false",
          "from": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__condition",
          "to": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__true__method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "from": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__true",
          "to": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__false__method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "from": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__false",
          "to": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "kind": "next",
          "line": 73,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge__method:17fop7p:sendasync__action_76_scope_76__linear",
          "from": "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
          "to": "method:17fop7p:sendasync__action_76_scope_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_76_scope_76__linear__method:17fop7p:sendasync__action_78_sendasync_await_78_12__await",
          "from": "method:17fop7p:sendasync__action_76_scope_76__linear",
          "to": "method:17fop7p:sendasync__action_78_sendasync_await_78_12__await",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_78_sendasync_await_78_12__await__method:17fop7p:sendasync__action_78_external_call_78__linear",
          "from": "method:17fop7p:sendasync__action_78_sendasync_await_78_12__await",
          "to": "method:17fop7p:sendasync__action_78_external_call_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_78_external_call_78__linear__call_method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync",
          "from": "method:17fop7p:sendasync__action_78_external_call_78__linear",
          "to": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync",
          "kind": "call",
          "label": "no params; triggers refresh flow (resolved from scoped provider)",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync__method:17fop7p:sendasync__action_79_branch_79__condition",
          "from": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync",
          "to": "method:17fop7p:sendasync__action_79_branch_79__condition",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__condition__method:17fop7p:sendasync__action_79_branch_79__true",
          "from": "method:17fop7p:sendasync__action_79_branch_79__condition",
          "to": "method:17fop7p:sendasync__action_79_branch_79__true",
          "kind": "condition-true",
          "label": "refreshed=true (read token)",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__condition__method:17fop7p:sendasync__action_79_branch_79__false",
          "from": "method:17fop7p:sendasync__action_79_branch_79__condition",
          "to": "method:17fop7p:sendasync__action_79_branch_79__false",
          "kind": "condition-false",
          "label": "refreshed=false (logout)",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__true__method:17fop7p:sendasync__action_79_branch_79__merge",
          "from": "method:17fop7p:sendasync__action_79_branch_79__true",
          "to": "method:17fop7p:sendasync__action_79_branch_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__false__method:17fop7p:sendasync__action_79_branch_79__merge",
          "from": "method:17fop7p:sendasync__action_79_branch_79__false",
          "to": "method:17fop7p:sendasync__action_79_branch_79__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_79_branch_79__merge__method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition",
          "from": "method:17fop7p:sendasync__action_79_branch_79__merge",
          "to": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition__method:17fop7p:sendasync__action_79_sendasync_branch_79_13__true",
          "from": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition",
          "to": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__true",
          "kind": "condition-true",
          "label": "true",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition__method:17fop7p:sendasync__action_79_sendasync_branch_79_13__false",
          "from": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__condition",
          "to": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__false",
          "kind": "condition-false",
          "label": "false",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__true__method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "from": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__true",
          "to": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__false__method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "from": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__false",
          "to": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "kind": "next",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge__method:17fop7p:sendasync__action_81_sendasync_await_81_14__await",
          "from": "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
          "to": "method:17fop7p:sendasync__action_81_sendasync_await_81_14__await",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_81_sendasync_await_81_14__await__call_method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString",
          "from": "method:17fop7p:sendasync__action_81_sendasync_await_81_14__await",
          "to": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString",
          "kind": "call",
          "label": "TokenKey to read token after refresh",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString__method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition",
          "from": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString",
          "to": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition",
          "kind": "fallback",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition__method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__true",
          "from": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition",
          "to": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition__method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__false",
          "from": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__condition",
          "to": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__true__method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "from": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__true",
          "to": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__false__method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "from": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__false",
          "to": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "kind": "next",
          "line": 85,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge__method:17fop7p:sendasync__action_87_sendasync_await_87_16__await",
          "from": "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
          "to": "method:17fop7p:sendasync__action_87_sendasync_await_87_16__await",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_87_sendasync_await_87_16__await__method:17fop7p:sendasync__action_87_external_call_87__linear",
          "from": "method:17fop7p:sendasync__action_87_sendasync_await_87_16__await",
          "to": "method:17fop7p:sendasync__action_87_external_call_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_87_external_call_87__linear__call_method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync",
          "from": "method:17fop7p:sendasync__action_87_external_call_87__linear",
          "to": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync",
          "kind": "call",
          "label": "no params; invoked if refresh fails",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync__method:17fop7p:sendasync__action_91_control_flow_91__linear",
          "from": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync",
          "to": "method:17fop7p:sendasync__action_91_control_flow_91__linear",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_91_control_flow_91__linear__method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition",
          "from": "method:17fop7p:sendasync__action_91_control_flow_91__linear",
          "to": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition__method:17fop7p:sendasync__action_91_sendasync_branch_91_17__true",
          "from": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition",
          "to": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__true",
          "kind": "condition-true",
          "label": "true",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition__method:17fop7p:sendasync__action_91_sendasync_branch_91_17__false",
          "from": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__condition",
          "to": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__false",
          "kind": "condition-false",
          "label": "false",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__true__method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "from": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__true",
          "to": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__false__method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "from": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__false",
          "to": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "kind": "next",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge__method:17fop7p:sendasync__action_93_sendasync_await_93_18__await",
          "from": "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge",
          "to": "method:17fop7p:sendasync__action_93_sendasync_await_93_18__await",
          "kind": "next",
          "line": 93,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_93_sendasync_await_93_18__await__call_method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync",
          "from": "method:17fop7p:sendasync__action_93_sendasync_await_93_18__await",
          "to": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync",
          "kind": "call",
          "label": "original HttpRequestMessage to produce a resendable clone",
          "line": 93,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.88
        },
        {
          "id": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync__method:17fop7p:sendasync__action_95_sendasync_await_95_20__await",
          "from": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync",
          "to": "method:17fop7p:sendasync__action_95_sendasync_await_95_20__await",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_await_95_20__await__method:17fop7p:sendasync__action_95_sendasync_return_95_21__return",
          "from": "method:17fop7p:sendasync__action_95_sendasync_await_95_20__await",
          "to": "method:17fop7p:sendasync__action_95_sendasync_return_95_21__return",
          "kind": "return",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_return_95_21__return__method:17fop7p:sendasync__action_95_sendasync_external_call_95_19__linear",
          "from": "method:17fop7p:sendasync__action_95_sendasync_return_95_21__return",
          "to": "method:17fop7p:sendasync__action_95_sendasync_external_call_95_19__linear",
          "kind": "next",
          "line": 95,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.82
        },
        {
          "id": "method:17fop7p:sendasync__action_95_sendasync_external_call_95_19__linear__method:17fop7p:sendasync__action_98_sendasync_catch_98_22__catch",
          "from": "method:17fop7p:sendasync__action_95_sendasync_external_call_95_19__linear",
          "to": "method:17fop7p:sendasync__action_98_sendasync_catch_98_22__catch",
          "kind": "exception",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:17fop7p:sendasync__action_98_sendasync_catch_98_22__catch__method:17fop7p:sendasync__action_98_error_handling_98__linear",
          "from": "method:17fop7p:sendasync__action_98_sendasync_catch_98_22__catch",
          "to": "method:17fop7p:sendasync__action_98_error_handling_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_98_error_handling_98__linear__method:17fop7p:sendasync__action_103_sendasync_finally_103_23__finally",
          "from": "method:17fop7p:sendasync__action_98_error_handling_98__linear",
          "to": "method:17fop7p:sendasync__action_103_sendasync_finally_103_23__finally",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.84
        },
        {
          "id": "method:17fop7p:sendasync__action_103_sendasync_finally_103_23__finally__method:17fop7p:sendasync__action_105_synchronization_105__linear",
          "from": "method:17fop7p:sendasync__action_103_sendasync_finally_103_23__finally",
          "to": "method:17fop7p:sendasync__action_105_synchronization_105__linear",
          "kind": "next",
          "line": 105,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:17fop7p:sendasync__action_105_synchronization_105__linear__method:17fop7p:sendasync__action_109_sendasync_return_109_24__return",
          "from": "method:17fop7p:sendasync__action_105_synchronization_105__linear",
          "to": "method:17fop7p:sendasync__action_109_sendasync_return_109_24__return",
          "kind": "return",
          "line": 109,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString__jump_unknown_INativeStorageService_GetSecureString",
          "fromNodeId": "method:17fop7p:sendasync__call_47_INativeStorageService_GetSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.GetSecureString",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target INativeStorageService.GetSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString__jump_unknown_INativeStorageService_GetSecureString",
          "fromNodeId": "method:17fop7p:sendasync__call_64_INativeStorageService_GetSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.GetSecureString",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target INativeStorageService.GetSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync__jump_unknown_IIdentityService_RefreshTokenAsync",
          "fromNodeId": "method:17fop7p:sendasync__call_78_IIdentityService_RefreshTokenAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IIdentityService.RefreshTokenAsync",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target IIdentityService.RefreshTokenAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString__jump_unknown_INativeStorageService_GetSecureString",
          "fromNodeId": "method:17fop7p:sendasync__call_81_INativeStorageService_GetSecureString",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "INativeStorageService.GetSecureString",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target INativeStorageService.GetSecureString in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync__jump_unknown_IIdentityService_LogoutAsync",
          "fromNodeId": "method:17fop7p:sendasync__call_87_IIdentityService_LogoutAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IIdentityService.LogoutAsync",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target IIdentityService.LogoutAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync__jump_NexusReader_Web_Client_Handlers_AuthenticationHeaderHandler_cs_CloneHttpRequestMessageAsync",
          "fromNodeId": "method:17fop7p:sendasync__call_93_CloneHttpRequestMessageAsync",
          "kind": "call-target",
          "targetNodeId": "method:oosx7v:clonehttprequestmessageasync",
          "targetPath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "targetHint": "CloneHttpRequestMessageAsync",
          "line": 93,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "reason": "Call target CloneHttpRequestMessageAsync resolved to NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:17fop7p:sendasync__action_32_branch_32__merge",
        "method:17fop7p:sendasync__action_38_branch_38__merge",
        "method:17fop7p:sendasync__action_45_sendasync_branch_45_1__merge",
        "method:17fop7p:sendasync__action_48_sendasync_branch_48_3__merge",
        "method:17fop7p:sendasync__action_48_guard_clause_48__merge",
        "method:17fop7p:sendasync__action_58_branch_58__merge",
        "method:17fop7p:sendasync__action_58_sendasync_branch_58_6__merge",
        "method:17fop7p:sendasync__action_69_sendasync_branch_69_10__merge",
        "method:17fop7p:sendasync__action_69_branch_69__merge",
        "method:17fop7p:sendasync__action_73_sendasync_fallback_73_11__merge",
        "method:17fop7p:sendasync__action_79_branch_79__merge",
        "method:17fop7p:sendasync__action_79_sendasync_branch_79_13__merge",
        "method:17fop7p:sendasync__action_85_sendasync_fallback_85_15__merge",
        "method:17fop7p:sendasync__action_91_sendasync_branch_91_17__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 27,
        "end": 110
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 27,
          "summary": "Control-flow fragment extracted for method SendAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:oosx7v:clonehttprequestmessageasync__fragment",
      "ownerFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "ownerSymbolId": "method:oosx7v:clonehttprequestmessageasync",
      "ownerSymbolName": "CloneHttpRequestMessageAsync",
      "entryNodeId": "method:oosx7v:clonehttprequestmessageasync__entry",
      "exitNodeIds": [
        "method:oosx7v:clonehttprequestmessageasync__action_139_clonehttprequestmessageasync_return_139_4__return"
      ],
      "nodes": [
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__entry",
          "kind": "entry",
          "label": "CloneHttpRequestMessageAsync entry",
          "line": 112,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.99,
          "detail": "Creates a deep clone of an HttpRequestMessage (including content stream and headers) suitable for resending."
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_114_construction_114__linear",
          "kind": "statement",
          "label": "Create new HttpRequestMessage clone",
          "line": 114,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "new HttpRequestMessage(req.Method, req.RequestUri) with Version set"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition",
          "kind": "condition",
          "label": "req.Content != null",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78,
          "detail": "if (req.Content != null)"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition",
          "kind": "condition",
          "label": "req.Content != null",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__true",
          "kind": "branch-true",
          "label": "copy-content",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__false",
          "kind": "branch-false",
          "label": "no-content",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "kind": "statement",
          "label": "merge",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_121_io_121__linear",
          "kind": "statement",
          "label": "Copy content stream",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "req.Content.CopyToAsync into MemoryStream, create StreamContent from it"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_122_clonehttprequestmessageasync_await_122_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 122,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81,
          "detail": "await req.Content.CopyToAsync(ms);"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "kind": "loop-entry",
          "label": "var h in req.Content.Headers",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86,
          "detail": "foreach (var h in req.Content.Headers)"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body",
          "kind": "loop-body",
          "label": "foreach (var h in req.Content.Headers)",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "kind": "loop-entry",
          "label": "Copy content headers",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "foreach over req.Content.Headers and TryAddWithoutValidation onto clone.Content.Headers"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body",
          "kind": "loop-body",
          "label": "foreach over req.Content.Headers and TryAddWithoutValidation onto clone.Content.Headers",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "kind": "loop-entry",
          "label": "var h in req.Headers",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86,
          "detail": "foreach (var h in req.Headers)"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body",
          "kind": "loop-body",
          "label": "foreach (var h in req.Headers)",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "kind": "loop-entry",
          "label": "Copy request headers",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "foreach over req.Headers and TryAddWithoutValidation onto clone.Headers"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body",
          "kind": "loop-body",
          "label": "foreach over req.Headers and TryAddWithoutValidation onto clone.Headers",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_exit",
          "kind": "loop-exit",
          "label": "exit loop",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_137_mutation_137__linear",
          "kind": "statement",
          "label": "Preserve browser credentials",
          "line": 137,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "clone.SetBrowserRequestCredentials(BrowserRequestCredentials.Include)"
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_139_clonehttprequestmessageasync_return_139_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 139,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7,
          "detail": "return clone;"
        }
      ],
      "edges": [
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__entry__method:oosx7v:clonehttprequestmessageasync__action_114_construction_114__linear",
          "from": "method:oosx7v:clonehttprequestmessageasync__entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_114_construction_114__linear",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_114_construction_114__linear__method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_114_construction_114__linear",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition__method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__true",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition__method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__false",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__condition",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__true__method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__true",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__false__method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__false",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.78
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge__method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition__method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__true",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__true",
          "kind": "condition-true",
          "label": "copy-content",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition__method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__false",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__condition",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__false",
          "kind": "condition-false",
          "label": "no-content",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__true__method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__true",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__false__method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__false",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "kind": "next",
          "line": 119,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge__method:oosx7v:clonehttprequestmessageasync__action_121_io_121__linear",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_121_io_121__linear",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_121_io_121__linear__method:oosx7v:clonehttprequestmessageasync__action_122_clonehttprequestmessageasync_await_122_1__await",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_121_io_121__linear",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_122_clonehttprequestmessageasync_await_122_1__await",
          "kind": "next",
          "line": 122,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.81
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_122_clonehttprequestmessageasync_await_122_1__await__method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_122_clonehttprequestmessageasync_await_122_1__await",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body",
          "kind": "loop-body",
          "label": "var h in req.Content.Headers",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body__method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_exit",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_exit__method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_exit",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body__method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_exit",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 126,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_exit__method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_exit",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body",
          "kind": "loop-body",
          "label": "var h in req.Headers",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body__method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_exit",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.86
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_exit__method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_exit",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "kind": "next",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body",
          "kind": "loop-body",
          "label": "iterate",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body__method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry__method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_exit",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_exit",
          "kind": "loop-exit",
          "label": "exit",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_exit__method:oosx7v:clonehttprequestmessageasync__action_137_mutation_137__linear",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_exit",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_137_mutation_137__linear",
          "kind": "next",
          "line": 137,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        },
        {
          "id": "method:oosx7v:clonehttprequestmessageasync__action_137_mutation_137__linear__method:oosx7v:clonehttprequestmessageasync__action_139_clonehttprequestmessageasync_return_139_4__return",
          "from": "method:oosx7v:clonehttprequestmessageasync__action_137_mutation_137__linear",
          "to": "method:oosx7v:clonehttprequestmessageasync__action_139_clonehttprequestmessageasync_return_139_4__return",
          "kind": "return",
          "line": 139,
          "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_body__method:oosx7v:clonehttprequestmessageasync__action_126_clonehttprequestmessageasync_loop_126_2__loop_entry",
        "method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_body__method:oosx7v:clonehttprequestmessageasync__action_126_loop_126__loop_entry",
        "method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_body__method:oosx7v:clonehttprequestmessageasync__action_132_clonehttprequestmessageasync_loop_132_3__loop_entry",
        "method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_body__method:oosx7v:clonehttprequestmessageasync__action_132_loop_132__loop_entry"
      ],
      "mergeNodeIds": [
        "method:oosx7v:clonehttprequestmessageasync__action_119_clonehttprequestmessageasync_branch_119_0__merge",
        "method:oosx7v:clonehttprequestmessageasync__action_119_branch_119__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 112,
        "end": 140
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs",
          "line": 112,
          "summary": "Control-flow fragment extracted for method CloneHttpRequestMessageAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1c802h4:program-top-level__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:1c802h4:program-top-level",
      "ownerSymbolName": "Program (top-level)",
      "entryNodeId": "method:1c802h4:program-top-level__entry",
      "exitNodeIds": [
        "method:1c802h4:program-top-level__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1c802h4:program-top-level__entry",
          "kind": "entry",
          "label": "Program (top-level) entry",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Creates the WebAssembly host builder, registers services (platform, UI, identity, AI, HTTP client, app services) and starts the WASM app."
        },
        {
          "id": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault",
          "kind": "call",
          "label": "WebAssemblyHostBuilder.CreateDefault",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "args from top-level"
        },
        {
          "id": "method:1c802h4:program-top-level__action_17_service_registration_17__linear",
          "kind": "statement",
          "label": "Platform & UI registrations",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "AddScoped registrations for IPlatformService, INativeStorageService, IThemeService, IQuizStateService, IFocusModeService, IReaderNavigationService, IKnowledgeGraphService, IReaderInteractionService, KnowledgeCoordinator, ISyncService (lines 18-27)"
        },
        {
          "id": "method:1c802h4:program-top-level__action_29_service_registration_29__linear",
          "kind": "statement",
          "label": "Identity & Auth registrations",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "AddOptions, AddAuthorizationCore, AddScoped IIdentityService, NexusAuthenticationStateProvider, AuthenticationStateProvider mapping, AddCascadingAuthenticationState (lines 30-35)"
        },
        {
          "id": "method:1c802h4:program-top-level__action_37_service_registration_37__linear",
          "kind": "statement",
          "label": "AI & content",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Register IKnowledgeService -> WasmKnowledgeService (line 38)"
        },
        {
          "id": "method:1c802h4:program-top-level__action_40_service_registration_40__linear",
          "kind": "statement",
          "label": "Http client setup",
          "line": 40,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Register AuthenticationHeaderHandler, configure named HttpClient 'NexusAPI' with BaseAddress and add message handler, then register default HttpClient instance (lines 40-46)"
        },
        {
          "id": "method:1c802h4:program-top-level__action_48_service_registration_48__linear",
          "kind": "statement",
          "label": "Server-only dummy stubs",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Register throwing singleton implementations for IDbContextFactory<AppDbContext>, IEmbeddingGenerator<...>, IBookStorageService, IEbookRepository, ISyncBroadcaster to satisfy DI validation in WASM (lines 49-53)"
        },
        {
          "id": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor",
          "kind": "call",
          "label": "ThrowingDbContextFactory..ctor",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "instance registered as IDbContextFactory<AppDbContext>"
        },
        {
          "id": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor",
          "kind": "call",
          "label": "ThrowingEmbeddingGenerator..ctor",
          "line": 50,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "instance registered as IEmbeddingGenerator<string,Embedding<float>>"
        },
        {
          "id": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor",
          "kind": "call",
          "label": "ThrowingBookStorageService..ctor",
          "line": 51,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "instance registered as IBookStorageService"
        },
        {
          "id": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor",
          "kind": "call",
          "label": "ThrowingEbookRepository..ctor",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "instance registered as IEbookRepository"
        },
        {
          "id": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor",
          "kind": "call",
          "label": "ThrowingSyncBroadcaster..ctor",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "instance registered as ISyncBroadcaster"
        },
        {
          "id": "method:1c802h4:program-top-level__action_55_service_registration_55__linear",
          "kind": "statement",
          "label": "Application layer wiring",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Call AddApplication() extension to register app services (line 55)"
        },
        {
          "id": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication",
          "kind": "call",
          "label": "ServiceCollectionExtensions.AddApplication",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "IServiceCollection extension to register application layer services"
        },
        {
          "id": "method:1c802h4:program-top-level__action_56_service_registration_56__linear",
          "kind": "statement",
          "label": "WASM-only EPUB readers",
          "line": 56,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Register IEpubReader and IEpubMetadataExtractor -> WASM implementations (lines 56-57)"
        },
        {
          "id": "method:1c802h4:program-top-level__action_59_program_top_level_await_59_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.81,
          "detail": "await builder.Build().RunAsync();"
        },
        {
          "id": "method:1c802h4:program-top-level__action_59_startup_run_59__linear",
          "kind": "statement",
          "label": "Start host",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "await builder.Build().RunAsync()"
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build",
          "kind": "call",
          "label": "WebAssemblyHostBuilder.Build",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "build host"
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync",
          "kind": "call",
          "label": "WebAssemblyHost.RunAsync",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88,
          "detail": "run the WASM host"
        },
        {
          "id": "method:1c802h4:program-top-level__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1c802h4:program-top-level__entry__call_method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault",
          "from": "method:1c802h4:program-top-level__entry",
          "to": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault",
          "kind": "call",
          "label": "args from top-level",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault__method:1c802h4:program-top-level__action_17_service_registration_17__linear",
          "from": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault",
          "to": "method:1c802h4:program-top-level__action_17_service_registration_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_17_service_registration_17__linear__method:1c802h4:program-top-level__action_29_service_registration_29__linear",
          "from": "method:1c802h4:program-top-level__action_17_service_registration_17__linear",
          "to": "method:1c802h4:program-top-level__action_29_service_registration_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_29_service_registration_29__linear__method:1c802h4:program-top-level__action_37_service_registration_37__linear",
          "from": "method:1c802h4:program-top-level__action_29_service_registration_29__linear",
          "to": "method:1c802h4:program-top-level__action_37_service_registration_37__linear",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_37_service_registration_37__linear__method:1c802h4:program-top-level__action_40_service_registration_40__linear",
          "from": "method:1c802h4:program-top-level__action_37_service_registration_37__linear",
          "to": "method:1c802h4:program-top-level__action_40_service_registration_40__linear",
          "kind": "next",
          "line": 40,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_40_service_registration_40__linear__method:1c802h4:program-top-level__action_48_service_registration_48__linear",
          "from": "method:1c802h4:program-top-level__action_40_service_registration_40__linear",
          "to": "method:1c802h4:program-top-level__action_48_service_registration_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_48_service_registration_48__linear__call_method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor",
          "from": "method:1c802h4:program-top-level__action_48_service_registration_48__linear",
          "to": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor",
          "kind": "call",
          "label": "instance registered as IDbContextFactory<AppDbContext>",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor__call_method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor",
          "from": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor",
          "to": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor",
          "kind": "call",
          "label": "instance registered as IEmbeddingGenerator<string,Embedding<float>>",
          "line": 50,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor__call_method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor",
          "from": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor",
          "to": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor",
          "kind": "call",
          "label": "instance registered as IBookStorageService",
          "line": 51,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor__call_method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor",
          "from": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor",
          "to": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor",
          "kind": "call",
          "label": "instance registered as IEbookRepository",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor__call_method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor",
          "from": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor",
          "to": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor",
          "kind": "call",
          "label": "instance registered as ISyncBroadcaster",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor__method:1c802h4:program-top-level__action_55_service_registration_55__linear",
          "from": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor",
          "to": "method:1c802h4:program-top-level__action_55_service_registration_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_55_service_registration_55__linear__call_method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication",
          "from": "method:1c802h4:program-top-level__action_55_service_registration_55__linear",
          "to": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication",
          "kind": "call",
          "label": "IServiceCollection extension to register application layer services",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication__method:1c802h4:program-top-level__action_56_service_registration_56__linear",
          "from": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication",
          "to": "method:1c802h4:program-top-level__action_56_service_registration_56__linear",
          "kind": "next",
          "line": 56,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_56_service_registration_56__linear__method:1c802h4:program-top-level__action_59_program_top_level_await_59_0__await",
          "from": "method:1c802h4:program-top-level__action_56_service_registration_56__linear",
          "to": "method:1c802h4:program-top-level__action_59_program_top_level_await_59_0__await",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1c802h4:program-top-level__action_59_program_top_level_await_59_0__await__method:1c802h4:program-top-level__action_59_startup_run_59__linear",
          "from": "method:1c802h4:program-top-level__action_59_program_top_level_await_59_0__await",
          "to": "method:1c802h4:program-top-level__action_59_startup_run_59__linear",
          "kind": "next",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1c802h4:program-top-level__action_59_startup_run_59__linear__call_method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build",
          "from": "method:1c802h4:program-top-level__action_59_startup_run_59__linear",
          "to": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build",
          "kind": "call",
          "label": "build host",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build__call_method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync",
          "from": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build",
          "to": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync",
          "kind": "call",
          "label": "run the WASM host",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync__implicit_return",
          "from": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync",
          "to": "method:1c802h4:program-top-level__implicit_return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault__jump_unknown_WebAssemblyHostBuilder_CreateDefault",
          "fromNodeId": "method:1c802h4:program-top-level__call_15_WebAssemblyHostBuilder_CreateDefault",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "WebAssemblyHostBuilder.CreateDefault",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target WebAssemblyHostBuilder.CreateDefault in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor__jump_NexusReader_Web_Client_Program_cs_ThrowingDbContextFactory_ctor",
          "fromNodeId": "method:1c802h4:program-top-level__call_49_ThrowingDbContextFactory_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Web.Client/Program.cs",
          "targetHint": "ThrowingDbContextFactory..ctor",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ThrowingDbContextFactory..ctor in NexusReader.Web.Client/Program.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor__jump_NexusReader_Web_Client_Program_cs_ThrowingEmbeddingGenerator_ctor",
          "fromNodeId": "method:1c802h4:program-top-level__call_50_ThrowingEmbeddingGenerator_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Web.Client/Program.cs",
          "targetHint": "ThrowingEmbeddingGenerator..ctor",
          "line": 50,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ThrowingEmbeddingGenerator..ctor in NexusReader.Web.Client/Program.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor__jump_NexusReader_Web_Client_Program_cs_ThrowingBookStorageService_ctor",
          "fromNodeId": "method:1c802h4:program-top-level__call_51_ThrowingBookStorageService_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Web.Client/Program.cs",
          "targetHint": "ThrowingBookStorageService..ctor",
          "line": 51,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ThrowingBookStorageService..ctor in NexusReader.Web.Client/Program.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor__jump_NexusReader_Web_Client_Program_cs_ThrowingEbookRepository_ctor",
          "fromNodeId": "method:1c802h4:program-top-level__call_52_ThrowingEbookRepository_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Web.Client/Program.cs",
          "targetHint": "ThrowingEbookRepository..ctor",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ThrowingEbookRepository..ctor in NexusReader.Web.Client/Program.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor__jump_NexusReader_Web_Client_Program_cs_ThrowingSyncBroadcaster_ctor",
          "fromNodeId": "method:1c802h4:program-top-level__call_53_ThrowingSyncBroadcaster_ctor",
          "kind": "call-target",
          "targetPath": "NexusReader.Web.Client/Program.cs",
          "targetHint": "ThrowingSyncBroadcaster..ctor",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ThrowingSyncBroadcaster..ctor in NexusReader.Web.Client/Program.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication__jump_NexusReader_Application_ServiceCollectionExtensions_AddApplication",
          "fromNodeId": "method:1c802h4:program-top-level__call_55_ServiceCollectionExtensions_AddApplication",
          "kind": "call-target",
          "targetPath": "NexusReader.Application",
          "targetHint": "ServiceCollectionExtensions.AddApplication",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target ServiceCollectionExtensions.AddApplication in NexusReader.Application could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build__jump_unknown_WebAssemblyHostBuilder_Build",
          "fromNodeId": "method:1c802h4:program-top-level__call_59_WebAssemblyHostBuilder_Build",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "WebAssemblyHostBuilder.Build",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target WebAssemblyHostBuilder.Build in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync__jump_unknown_WebAssemblyHost_RunAsync",
          "fromNodeId": "method:1c802h4:program-top-level__call_59_WebAssemblyHost_RunAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "WebAssemblyHost.RunAsync",
          "line": 59,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Call target WebAssemblyHost.RunAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8200000000000001,
      "lineSpan": {
        "start": 15,
        "end": 59
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 15,
          "summary": "Control-flow fragment extracted for method Program (top-level).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:9hjjot:createdbcontext__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:9hjjot:createdbcontext",
      "ownerSymbolName": "CreateDbContext",
      "entryNodeId": "method:9hjjot:createdbcontext__entry",
      "exitNodeIds": [
        "method:9hjjot:createdbcontext__action_63_throw_63__throw",
        "method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw"
      ],
      "nodes": [
        {
          "id": "method:9hjjot:createdbcontext__entry",
          "kind": "entry",
          "label": "CreateDbContext entry",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "IDbContextFactory implementation that prevents use of EF DbContext in the WASM client by always throwing."
        },
        {
          "id": "method:9hjjot:createdbcontext__action_63_throw_63__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException to block DbContext usage in WASM",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(\"DbContext cannot be used in WASM client.\")"
        },
        {
          "id": "method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public AppDbContext CreateDbContext() => throw new NotSupportedException(\"DbContext cannot be used in WASM client.\");"
        }
      ],
      "edges": [
        {
          "id": "method:9hjjot:createdbcontext__entry__method:9hjjot:createdbcontext__action_63_throw_63__throw",
          "from": "method:9hjjot:createdbcontext__entry",
          "to": "method:9hjjot:createdbcontext__action_63_throw_63__throw",
          "kind": "exception",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:9hjjot:createdbcontext__action_63_throw_63__throw__method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw",
          "from": "method:9hjjot:createdbcontext__action_63_throw_63__throw",
          "to": "method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw",
          "kind": "exception",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:9hjjot:createdbcontext__action_63_throw_63__throw__exception_escape",
          "fromNodeId": "method:9hjjot:createdbcontext__action_63_throw_63__throw",
          "kind": "exception-target",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw__exception_escape",
          "fromNodeId": "method:9hjjot:createdbcontext__action_63_createdbcontext_throw_63_0__throw",
          "kind": "exception-target",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 61,
        "end": 64
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 61,
          "summary": "Control-flow fragment extracted for method CreateDbContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:194t8sk:dispose__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:194t8sk:dispose",
      "ownerSymbolName": "Dispose",
      "entryNodeId": "method:194t8sk:dispose__entry",
      "exitNodeIds": [
        "method:194t8sk:dispose__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:194t8sk:dispose__entry",
          "kind": "entry",
          "label": "Dispose entry",
          "line": 66,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Dispose no-op for the throwing embedding generator."
        },
        {
          "id": "method:194t8sk:dispose__action_68_noop_68__linear",
          "kind": "statement",
          "label": "No-op dispose",
          "line": 68,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "Empty Dispose implementation"
        },
        {
          "id": "method:194t8sk:dispose__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:194t8sk:dispose__entry__method:194t8sk:dispose__action_68_noop_68__linear",
          "from": "method:194t8sk:dispose__entry",
          "to": "method:194t8sk:dispose__action_68_noop_68__linear",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:194t8sk:dispose__action_68_noop_68__linear__implicit_return",
          "from": "method:194t8sk:dispose__action_68_noop_68__linear",
          "to": "method:194t8sk:dispose__implicit_return",
          "kind": "return",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 66,
        "end": 69
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 66,
          "summary": "Control-flow fragment extracted for method Dispose.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:x4i3zt:generateasync__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:x4i3zt:generateasync",
      "ownerSymbolName": "GenerateAsync",
      "entryNodeId": "method:x4i3zt:generateasync__entry",
      "exitNodeIds": [
        "method:x4i3zt:generateasync__action_70_throw_70__throw",
        "method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw"
      ],
      "nodes": [
        {
          "id": "method:x4i3zt:generateasync__entry",
          "kind": "entry",
          "label": "GenerateAsync entry",
          "line": 69,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Stub embedding generation that always throws in the WASM client."
        },
        {
          "id": "method:x4i3zt:generateasync__action_70_throw_70__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException to block embedding generation in WASM",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(\"Embedding generation cannot be used in WASM client.\")"
        },
        {
          "id": "method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "=> throw new NotSupportedException(\"Embedding generation cannot be used in WASM client.\");"
        }
      ],
      "edges": [
        {
          "id": "method:x4i3zt:generateasync__entry__method:x4i3zt:generateasync__action_70_throw_70__throw",
          "from": "method:x4i3zt:generateasync__entry",
          "to": "method:x4i3zt:generateasync__action_70_throw_70__throw",
          "kind": "exception",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:x4i3zt:generateasync__action_70_throw_70__throw__method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw",
          "from": "method:x4i3zt:generateasync__action_70_throw_70__throw",
          "to": "method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw",
          "kind": "exception",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:x4i3zt:generateasync__action_70_throw_70__throw__exception_escape",
          "fromNodeId": "method:x4i3zt:generateasync__action_70_throw_70__throw",
          "kind": "exception-target",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw__exception_escape",
          "fromNodeId": "method:x4i3zt:generateasync__action_70_generateasync_throw_70_0__throw",
          "kind": "exception-target",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 69,
        "end": 71
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 69,
          "summary": "Control-flow fragment extracted for method GenerateAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:swctk:getservice__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:swctk:getservice",
      "ownerSymbolName": "GetService",
      "entryNodeId": "method:swctk:getservice__entry",
      "exitNodeIds": [
        "method:swctk:getservice__action_71_return_71__return"
      ],
      "nodes": [
        {
          "id": "method:swctk:getservice__entry",
          "kind": "entry",
          "label": "GetService entry",
          "line": 71,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Returns null for service lookup; minimal service accessor to satisfy interface."
        },
        {
          "id": "method:swctk:getservice__action_71_return_71__return",
          "kind": "return",
          "label": "Return null",
          "line": 71,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "returns null"
        }
      ],
      "edges": [
        {
          "id": "method:swctk:getservice__entry__method:swctk:getservice__action_71_return_71__return",
          "from": "method:swctk:getservice__entry",
          "to": "method:swctk:getservice__action_71_return_71__return",
          "kind": "return",
          "line": 71,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.73,
      "lineSpan": {
        "start": 71,
        "end": 72
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 71,
          "summary": "Control-flow fragment extracted for method GetService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:9ytc6k:saveebookasync-byte__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:9ytc6k:saveebookasync-byte",
      "ownerSymbolName": "SaveEbookAsync (byte[])",
      "entryNodeId": "method:9ytc6k:saveebookasync-byte__entry",
      "exitNodeIds": [
        "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
        "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
        "method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw"
      ],
      "nodes": [
        {
          "id": "method:9ytc6k:saveebookasync-byte__entry",
          "kind": "entry",
          "label": "SaveEbookAsync (byte[]) entry",
          "line": 74,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Stub storage operation that throws because file storage is unsupported in WASM client."
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:9ytc6k:saveebookasync-byte__entry__method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
          "from": "method:9ytc6k:saveebookasync-byte__entry",
          "to": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw__method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
          "from": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
          "to": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw__method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw",
          "from": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
          "to": "method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw__exception_escape",
          "fromNodeId": "method:9ytc6k:saveebookasync-byte__action_78_throw_78__throw",
          "kind": "exception-target",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw__exception_escape",
          "fromNodeId": "method:9ytc6k:saveebookasync-byte__action_78_saveebookasync_byte_throw_78_0__throw",
          "kind": "exception-target",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw__exception_escape",
          "fromNodeId": "method:9ytc6k:saveebookasync-byte__action_79_saveebookasync_byte_throw_79_1__throw",
          "kind": "exception-target",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 74,
        "end": 79
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync (byte[]).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:k4xtk2:saveebookasync-stream__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:k4xtk2:saveebookasync-stream",
      "ownerSymbolName": "SaveEbookAsync (Stream)",
      "entryNodeId": "method:k4xtk2:saveebookasync-stream__entry",
      "exitNodeIds": [
        "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
        "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
        "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
        "method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw"
      ],
      "nodes": [
        {
          "id": "method:k4xtk2:saveebookasync-stream__entry",
          "kind": "entry",
          "label": "SaveEbookAsync (Stream) entry",
          "line": 74,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Stub storage operation that throws because file storage is unsupported in WASM client."
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string?> SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:k4xtk2:saveebookasync-stream__entry__method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
          "from": "method:k4xtk2:saveebookasync-stream__entry",
          "to": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw__method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
          "from": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
          "to": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw__method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
          "from": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
          "to": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw__method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw",
          "from": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
          "to": "method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw__exception_escape",
          "fromNodeId": "method:k4xtk2:saveebookasync-stream__action_78_saveebookasync_stream_throw_78_0__throw",
          "kind": "exception-target",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw__exception_escape",
          "fromNodeId": "method:k4xtk2:saveebookasync-stream__action_79_throw_79__throw",
          "kind": "exception-target",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw__exception_escape",
          "fromNodeId": "method:k4xtk2:saveebookasync-stream__action_79_saveebookasync_stream_throw_79_1__throw",
          "kind": "exception-target",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw__exception_escape",
          "fromNodeId": "method:k4xtk2:saveebookasync-stream__action_80_saveebookasync_stream_throw_80_2__throw",
          "kind": "exception-target",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 74,
        "end": 80
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync (Stream).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:161c21f:savecoverasync-byte__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:161c21f:savecoverasync-byte",
      "ownerSymbolName": "SaveCoverAsync (byte[])",
      "entryNodeId": "method:161c21f:savecoverasync-byte__entry",
      "exitNodeIds": [
        "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
        "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
        "method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
        "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
        "method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw"
      ],
      "nodes": [
        {
          "id": "method:161c21f:savecoverasync-byte__entry",
          "kind": "entry",
          "label": "SaveCoverAsync (byte[]) entry",
          "line": 74,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Stub cover save that throws because file storage is unsupported in WASM client."
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string?> SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string?> SaveCoverAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:161c21f:savecoverasync-byte__entry__method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
          "from": "method:161c21f:savecoverasync-byte__entry",
          "to": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw__method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
          "from": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
          "to": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw__method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
          "from": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
          "to": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw__method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
          "from": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
          "to": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw__method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw",
          "from": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
          "to": "method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw",
          "kind": "exception",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw__exception_escape",
          "fromNodeId": "method:161c21f:savecoverasync-byte__action_78_savecoverasync_byte_throw_78_0__throw",
          "kind": "exception-target",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw__exception_escape",
          "fromNodeId": "method:161c21f:savecoverasync-byte__action_79_savecoverasync_byte_throw_79_1__throw",
          "kind": "exception-target",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw__exception_escape",
          "fromNodeId": "method:161c21f:savecoverasync-byte__action_80_throw_80__throw",
          "kind": "exception-target",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw__exception_escape",
          "fromNodeId": "method:161c21f:savecoverasync-byte__action_80_savecoverasync_byte_throw_80_2__throw",
          "kind": "exception-target",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw__exception_escape",
          "fromNodeId": "method:161c21f:savecoverasync-byte__action_81_savecoverasync_byte_throw_81_3__throw",
          "kind": "exception-target",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 74,
        "end": 81
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync (byte[]).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1xlrbb1:savecoverasync-stream__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:1xlrbb1:savecoverasync-stream",
      "ownerSymbolName": "SaveCoverAsync (Stream)",
      "entryNodeId": "method:1xlrbb1:savecoverasync-stream__entry",
      "exitNodeIds": [
        "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
        "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
        "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
        "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
        "method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw"
      ],
      "nodes": [
        {
          "id": "method:1xlrbb1:savecoverasync-stream__entry",
          "kind": "entry",
          "label": "SaveCoverAsync (Stream) entry",
          "line": 74,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Stub cover save that throws because file storage is unsupported in WASM client."
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string> SaveEbookAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string?> SaveCoverAsync(byte[] data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<string?> SaveCoverAsync(Stream data, string fileName) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:1xlrbb1:savecoverasync-stream__entry__method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
          "from": "method:1xlrbb1:savecoverasync-stream__entry",
          "to": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
          "kind": "exception",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw__method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
          "from": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
          "to": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
          "kind": "exception",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw__method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
          "from": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
          "to": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
          "kind": "exception",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw__method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
          "from": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
          "to": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
          "kind": "exception",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw__method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw",
          "from": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
          "to": "method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw",
          "kind": "exception",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw__exception_escape",
          "fromNodeId": "method:1xlrbb1:savecoverasync-stream__action_78_savecoverasync_stream_throw_78_0__throw",
          "kind": "exception-target",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw__exception_escape",
          "fromNodeId": "method:1xlrbb1:savecoverasync-stream__action_79_savecoverasync_stream_throw_79_1__throw",
          "kind": "exception-target",
          "line": 79,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw__exception_escape",
          "fromNodeId": "method:1xlrbb1:savecoverasync-stream__action_80_savecoverasync_stream_throw_80_2__throw",
          "kind": "exception-target",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw__exception_escape",
          "fromNodeId": "method:1xlrbb1:savecoverasync-stream__action_81_throw_81__throw",
          "kind": "exception-target",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw__exception_escape",
          "fromNodeId": "method:1xlrbb1:savecoverasync-stream__action_81_savecoverasync_stream_throw_81_3__throw",
          "kind": "exception-target",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 74,
        "end": 82
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 74,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync (Stream).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:s3i4fd:findauthorbynameasync__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:s3i4fd:findauthorbynameasync",
      "ownerSymbolName": "FindAuthorByNameAsync",
      "entryNodeId": "method:s3i4fd:findauthorbynameasync__entry",
      "exitNodeIds": [
        "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
        "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
        "method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw"
      ],
      "nodes": [
        {
          "id": "method:s3i4fd:findauthorbynameasync__entry",
          "kind": "entry",
          "label": "FindAuthorByNameAsync entry",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Ebook repository lookup stub that throws in WASM; repository operations should be done via server API."
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_repository_read_88_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:s3i4fd:findauthorbynameasync__entry__method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
          "from": "method:s3i4fd:findauthorbynameasync__entry",
          "to": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
          "kind": "exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw__method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
          "from": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
          "to": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
          "kind": "exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw__method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_repository_read_88_0__linear",
          "from": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
          "to": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_repository_read_88_0__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_repository_read_88_0__linear__method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw",
          "from": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_repository_read_88_0__linear",
          "to": "method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw",
          "kind": "exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw__exception_escape",
          "fromNodeId": "method:s3i4fd:findauthorbynameasync__action_88_throw_88__throw",
          "kind": "exception-target",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw__exception_escape",
          "fromNodeId": "method:s3i4fd:findauthorbynameasync__action_88_findauthorbynameasync_throw_88_1__throw",
          "kind": "exception-target",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw__exception_escape",
          "fromNodeId": "method:s3i4fd:findauthorbynameasync__action_89_findauthorbynameasync_throw_89_2__throw",
          "kind": "exception-target",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 84,
        "end": 89
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Control-flow fragment extracted for method FindAuthorByNameAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ulf8of:addauthor__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:ulf8of:addauthor",
      "ownerSymbolName": "AddAuthor",
      "entryNodeId": "method:ulf8of:addauthor__entry",
      "exitNodeIds": [
        "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
        "method:ulf8of:addauthor__action_89_throw_89__throw",
        "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
        "method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw"
      ],
      "nodes": [
        {
          "id": "method:ulf8of:addauthor__entry",
          "kind": "entry",
          "label": "AddAuthor entry",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Repository add stub that throws to prevent local data mutation in WASM."
        },
        {
          "id": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:ulf8of:addauthor__action_88_addauthor_repository_read_88_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:ulf8of:addauthor__action_89_throw_89__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:ulf8of:addauthor__entry__method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
          "from": "method:ulf8of:addauthor__entry",
          "to": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
          "kind": "exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw__method:ulf8of:addauthor__action_88_addauthor_repository_read_88_0__linear",
          "from": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
          "to": "method:ulf8of:addauthor__action_88_addauthor_repository_read_88_0__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:ulf8of:addauthor__action_88_addauthor_repository_read_88_0__linear__method:ulf8of:addauthor__action_89_throw_89__throw",
          "from": "method:ulf8of:addauthor__action_88_addauthor_repository_read_88_0__linear",
          "to": "method:ulf8of:addauthor__action_89_throw_89__throw",
          "kind": "exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ulf8of:addauthor__action_89_throw_89__throw__method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
          "from": "method:ulf8of:addauthor__action_89_throw_89__throw",
          "to": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
          "kind": "exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw__method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw",
          "from": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
          "to": "method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw",
          "kind": "exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw__exception_escape",
          "fromNodeId": "method:ulf8of:addauthor__action_88_addauthor_throw_88_1__throw",
          "kind": "exception-target",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:ulf8of:addauthor__action_89_throw_89__throw__exception_escape",
          "fromNodeId": "method:ulf8of:addauthor__action_89_throw_89__throw",
          "kind": "exception-target",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw__exception_escape",
          "fromNodeId": "method:ulf8of:addauthor__action_89_addauthor_throw_89_2__throw",
          "kind": "exception-target",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw__exception_escape",
          "fromNodeId": "method:ulf8of:addauthor__action_90_addauthor_throw_90_3__throw",
          "kind": "exception-target",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 84,
        "end": 90
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Control-flow fragment extracted for method AddAuthor.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:v3kul8:addebook__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:v3kul8:addebook",
      "ownerSymbolName": "AddEbook",
      "entryNodeId": "method:v3kul8:addebook__entry",
      "exitNodeIds": [
        "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
        "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
        "method:v3kul8:addebook__action_90_throw_90__throw",
        "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
        "method:v3kul8:addebook__action_91_addebook_throw_91_4__throw"
      ],
      "nodes": [
        {
          "id": "method:v3kul8:addebook__entry",
          "kind": "entry",
          "label": "AddEbook entry",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Repository add stub that throws to prevent local data mutation in WASM."
        },
        {
          "id": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:v3kul8:addebook__action_88_addebook_repository_read_88_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:v3kul8:addebook__action_90_throw_90__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:v3kul8:addebook__action_91_addebook_throw_91_4__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:v3kul8:addebook__entry__method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
          "from": "method:v3kul8:addebook__entry",
          "to": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
          "kind": "exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw__method:v3kul8:addebook__action_88_addebook_repository_read_88_0__linear",
          "from": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
          "to": "method:v3kul8:addebook__action_88_addebook_repository_read_88_0__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:v3kul8:addebook__action_88_addebook_repository_read_88_0__linear__method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
          "from": "method:v3kul8:addebook__action_88_addebook_repository_read_88_0__linear",
          "to": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
          "kind": "exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw__method:v3kul8:addebook__action_90_throw_90__throw",
          "from": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
          "to": "method:v3kul8:addebook__action_90_throw_90__throw",
          "kind": "exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:v3kul8:addebook__action_90_throw_90__throw__method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
          "from": "method:v3kul8:addebook__action_90_throw_90__throw",
          "to": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
          "kind": "exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw__method:v3kul8:addebook__action_91_addebook_throw_91_4__throw",
          "from": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
          "to": "method:v3kul8:addebook__action_91_addebook_throw_91_4__throw",
          "kind": "exception",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw__exception_escape",
          "fromNodeId": "method:v3kul8:addebook__action_88_addebook_throw_88_1__throw",
          "kind": "exception-target",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw__exception_escape",
          "fromNodeId": "method:v3kul8:addebook__action_89_addebook_throw_89_2__throw",
          "kind": "exception-target",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:v3kul8:addebook__action_90_throw_90__throw__exception_escape",
          "fromNodeId": "method:v3kul8:addebook__action_90_throw_90__throw",
          "kind": "exception-target",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw__exception_escape",
          "fromNodeId": "method:v3kul8:addebook__action_90_addebook_throw_90_3__throw",
          "kind": "exception-target",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:v3kul8:addebook__action_91_addebook_throw_91_4__throw__exception_escape",
          "fromNodeId": "method:v3kul8:addebook__action_91_addebook_throw_91_4__throw",
          "kind": "exception-target",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 84,
        "end": 91
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Control-flow fragment extracted for method AddEbook.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wp2z4z:savechangesasync__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:1wp2z4z:savechangesasync",
      "ownerSymbolName": "SaveChangesAsync",
      "entryNodeId": "method:1wp2z4z:savechangesasync__entry",
      "exitNodeIds": [
        "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
        "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
        "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
        "method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
        "method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw"
      ],
      "nodes": [
        {
          "id": "method:1wp2z4z:savechangesasync__entry",
          "kind": "entry",
          "label": "SaveChangesAsync entry",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Repository save stub that throws to prevent EF operations in WASM."
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_repository_read_88_0__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86,
          "detail": "public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddAuthor(Author author) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public void AddEbook(Ebook ebook) => throw new NotSupportedException(ErrorMessage);"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(ErrorMessage)"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "public Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);"
        }
      ],
      "edges": [
        {
          "id": "method:1wp2z4z:savechangesasync__entry__method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
          "from": "method:1wp2z4z:savechangesasync__entry",
          "to": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
          "kind": "exception",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw__method:1wp2z4z:savechangesasync__action_88_savechangesasync_repository_read_88_0__linear",
          "from": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
          "to": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_repository_read_88_0__linear",
          "kind": "next",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_repository_read_88_0__linear__method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
          "from": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_repository_read_88_0__linear",
          "to": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
          "kind": "exception",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw__method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
          "from": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
          "to": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
          "kind": "exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw__method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
          "from": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
          "to": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
          "kind": "exception",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw__method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw",
          "from": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
          "to": "method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw",
          "kind": "exception",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw__exception_escape",
          "fromNodeId": "method:1wp2z4z:savechangesasync__action_88_savechangesasync_throw_88_1__throw",
          "kind": "exception-target",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw__exception_escape",
          "fromNodeId": "method:1wp2z4z:savechangesasync__action_89_savechangesasync_throw_89_2__throw",
          "kind": "exception-target",
          "line": 89,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw__exception_escape",
          "fromNodeId": "method:1wp2z4z:savechangesasync__action_90_savechangesasync_throw_90_3__throw",
          "kind": "exception-target",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw__exception_escape",
          "fromNodeId": "method:1wp2z4z:savechangesasync__action_91_throw_91__throw",
          "kind": "exception-target",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw__exception_escape",
          "fromNodeId": "method:1wp2z4z:savechangesasync__action_91_savechangesasync_throw_91_4__throw",
          "kind": "exception-target",
          "line": 91,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 84,
        "end": 92
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 84,
          "summary": "Control-flow fragment extracted for method SaveChangesAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:11t39ko:broadcastprogressasync__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:11t39ko:broadcastprogressasync",
      "ownerSymbolName": "BroadcastProgressAsync",
      "entryNodeId": "method:11t39ko:broadcastprogressasync__entry",
      "exitNodeIds": [
        "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
        "method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw"
      ],
      "nodes": [
        {
          "id": "method:11t39ko:broadcastprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastProgressAsync entry",
          "line": 94,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Real-time broadcast stub that throws because server-only real-time broadcasting is unsupported in WASM."
        },
        {
          "id": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 96,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\")"
        },
        {
          "id": "method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");"
        }
      ],
      "edges": [
        {
          "id": "method:11t39ko:broadcastprogressasync__entry__method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
          "from": "method:11t39ko:broadcastprogressasync__entry",
          "to": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
          "kind": "exception",
          "line": 96,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw__method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw",
          "from": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
          "to": "method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw",
          "kind": "exception",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw__exception_escape",
          "fromNodeId": "method:11t39ko:broadcastprogressasync__action_96_throw_96__throw",
          "kind": "exception-target",
          "line": 96,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw__exception_escape",
          "fromNodeId": "method:11t39ko:broadcastprogressasync__action_97_broadcastprogressasync_throw_97_0__throw",
          "kind": "exception-target",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 94,
        "end": 98
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 94,
          "summary": "Control-flow fragment extracted for method BroadcastProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:yo2gbi:broadcastingestionprogressasync__fragment",
      "ownerFileId": "file:1dbwiwx:program-cs",
      "ownerSymbolId": "method:yo2gbi:broadcastingestionprogressasync",
      "ownerSymbolName": "BroadcastIngestionProgressAsync",
      "entryNodeId": "method:yo2gbi:broadcastingestionprogressasync__entry",
      "exitNodeIds": [
        "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
        "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
        "method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw"
      ],
      "nodes": [
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__entry",
          "kind": "entry",
          "label": "BroadcastIngestionProgressAsync entry",
          "line": 94,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.99,
          "detail": "Real-time ingestion progress broadcast stub that throws because server-only broadcasting is required."
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");"
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
          "kind": "throw",
          "label": "Throws NotSupportedException",
          "line": 99,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7,
          "detail": "throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\")"
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9,
          "detail": "=> throw new NotSupportedException(\"Real-time broadcasting can only be performed by the server.\");"
        }
      ],
      "edges": [
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__entry__method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
          "from": "method:yo2gbi:broadcastingestionprogressasync__entry",
          "to": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
          "kind": "exception",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw__method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
          "from": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
          "to": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
          "kind": "exception",
          "line": 99,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw__method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw",
          "from": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
          "to": "method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw",
          "kind": "exception",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "confidence": 0.9
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw__exception_escape",
          "fromNodeId": "method:yo2gbi:broadcastingestionprogressasync__action_97_broadcastingestionprogressasync_throw_97_0__throw",
          "kind": "exception-target",
          "line": 97,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw__exception_escape",
          "fromNodeId": "method:yo2gbi:broadcastingestionprogressasync__action_99_throw_99__throw",
          "kind": "exception-target",
          "line": 99,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw__exception_escape",
          "fromNodeId": "method:yo2gbi:broadcastingestionprogressasync__action_100_broadcastingestionprogressasync_throw_100_1__throw",
          "kind": "exception-target",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 94,
        "end": 101
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Program.cs",
          "line": 94,
          "summary": "Control-flow fragment extracted for method BroadcastIngestionProgressAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10zr37d:wasmepubreader__fragment",
      "ownerFileId": "file:hiutf5:wasmepubservice-cs",
      "ownerSymbolId": "method:10zr37d:wasmepubreader",
      "ownerSymbolName": "WasmEpubReader",
      "entryNodeId": "method:10zr37d:wasmepubreader__entry",
      "exitNodeIds": [
        "method:10zr37d:wasmepubreader__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10zr37d:wasmepubreader__entry",
          "kind": "entry",
          "label": "WasmEpubReader entry",
          "line": 12,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.99,
          "detail": "Constructor that stores the injected HttpClient for later HTTP calls."
        },
        {
          "id": "method:10zr37d:wasmepubreader__action_14_assignment_14__linear",
          "kind": "statement",
          "label": "Stores HttpClient dependency",
          "line": 14,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "_httpClient = httpClient"
        },
        {
          "id": "method:10zr37d:wasmepubreader__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10zr37d:wasmepubreader__entry__method:10zr37d:wasmepubreader__action_14_assignment_14__linear",
          "from": "method:10zr37d:wasmepubreader__entry",
          "to": "method:10zr37d:wasmepubreader__action_14_assignment_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10zr37d:wasmepubreader__action_14_assignment_14__linear__implicit_return",
          "from": "method:10zr37d:wasmepubreader__action_14_assignment_14__linear",
          "to": "method:10zr37d:wasmepubreader__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method WasmEpubReader.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10bpn0:getepubcontentasync__fragment",
      "ownerFileId": "file:hiutf5:wasmepubservice-cs",
      "ownerSymbolId": "method:10bpn0:getepubcontentasync",
      "ownerSymbolName": "GetEpubContentAsync",
      "entryNodeId": "method:10bpn0:getepubcontentasync__entry",
      "exitNodeIds": [
        "method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return",
        "method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return",
        "method:10bpn0:getepubcontentasync__action_33_return_33__return",
        "method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return",
        "method:10bpn0:getepubcontentasync__action_37_return_37__return"
      ],
      "nodes": [
        {
          "id": "method:10bpn0:getepubcontentasync__entry",
          "kind": "entry",
          "label": "GetEpubContentAsync entry",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.99,
          "detail": "Fetches a chapter's reader page from the server API and returns a Result-wrapped ReaderPageViewModel, handling deserialization and errors."
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_23_try_catch_23__linear",
          "kind": "statement",
          "label": "Network/deserialization protection",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Wraps HTTP call and parsing in try/catch; on exception returns Result.Fail with Error caused by exception."
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_23_getepubcontentasync_try_23_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_25_getepubcontentasync_await_25_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken);"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_25_external_call_25__linear",
          "kind": "http-call",
          "label": "HTTP GET to server EPUB endpoint",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Calls _httpClient.GetAsync($\"/api/epub/{ebookId}/{chapterIndex}\", cancellationToken) to retrieve chapter content."
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__true",
          "kind": "branch-true",
          "label": "success -> deserialize JSON to ReaderPageViewModel (line 28) and return Ok if not null (line 29)",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__false",
          "kind": "branch-false",
          "label": "failure -> read error body (line 32) and return Fail with status and body (line 33)",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_28_getepubcontentasync_await_28_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81,
          "detail": "var viewModel = await response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_28_external_call_28__linear",
          "kind": "http-call",
          "label": "Deserialize JSON response",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<ReaderPageViewModel>(cancellationToken: cancellationToken)"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "return viewModel != null ? Result.Ok(viewModel) : Result.Fail(\"Failed to deserialize response.\");"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition",
          "kind": "condition",
          "label": "viewModel != null",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__true",
          "kind": "branch-true",
          "label": "return Result.Ok(viewModel)",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__false",
          "kind": "branch-false",
          "label": "return Result.Fail(\"Failed to deserialize response.\")",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "kind": "statement",
          "label": "merge",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_32_getepubcontentasync_await_32_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_32_external_call_32__linear",
          "kind": "http-call",
          "label": "Read error response body",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadAsStringAsync(cancellationToken)"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 33,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_33_return_33__return",
          "kind": "return",
          "label": "Return failure Result for HTTP error",
          "line": 33,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail with server status and body"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_35_getepubcontentasync_catch_35_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 35,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network or parsing error: {ex.Message}\").CausedBy(ex));"
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_37_return_37__return",
          "kind": "return",
          "label": "Return failure Result for exception",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(new Error(...).CausedBy(ex))"
        }
      ],
      "edges": [
        {
          "id": "method:10bpn0:getepubcontentasync__entry__method:10bpn0:getepubcontentasync__action_23_try_catch_23__linear",
          "from": "method:10bpn0:getepubcontentasync__entry",
          "to": "method:10bpn0:getepubcontentasync__action_23_try_catch_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_23_try_catch_23__linear__method:10bpn0:getepubcontentasync__action_23_getepubcontentasync_try_23_0__try",
          "from": "method:10bpn0:getepubcontentasync__action_23_try_catch_23__linear",
          "to": "method:10bpn0:getepubcontentasync__action_23_getepubcontentasync_try_23_0__try",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_23_getepubcontentasync_try_23_0__try__method:10bpn0:getepubcontentasync__action_25_getepubcontentasync_await_25_1__await",
          "from": "method:10bpn0:getepubcontentasync__action_23_getepubcontentasync_try_23_0__try",
          "to": "method:10bpn0:getepubcontentasync__action_25_getepubcontentasync_await_25_1__await",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_25_getepubcontentasync_await_25_1__await__method:10bpn0:getepubcontentasync__action_25_external_call_25__linear",
          "from": "method:10bpn0:getepubcontentasync__action_25_getepubcontentasync_await_25_1__await",
          "to": "method:10bpn0:getepubcontentasync__action_25_external_call_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_25_external_call_25__linear__method:10bpn0:getepubcontentasync__action_26_branch_26__condition",
          "from": "method:10bpn0:getepubcontentasync__action_25_external_call_25__linear",
          "to": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition__method:10bpn0:getepubcontentasync__action_26_branch_26__true",
          "from": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition",
          "to": "method:10bpn0:getepubcontentasync__action_26_branch_26__true",
          "kind": "condition-true",
          "label": "success -> deserialize JSON to ReaderPageViewModel (line 28) and return Ok if not null (line 29)",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition__method:10bpn0:getepubcontentasync__action_26_branch_26__false",
          "from": "method:10bpn0:getepubcontentasync__action_26_branch_26__condition",
          "to": "method:10bpn0:getepubcontentasync__action_26_branch_26__false",
          "kind": "condition-false",
          "label": "failure -> read error body (line 32) and return Fail with status and body (line 33)",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__true__method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "from": "method:10bpn0:getepubcontentasync__action_26_branch_26__true",
          "to": "method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__false__method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "from": "method:10bpn0:getepubcontentasync__action_26_branch_26__false",
          "to": "method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_branch_26__merge__method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition",
          "from": "method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
          "to": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition__method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__true",
          "from": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition",
          "to": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition__method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__false",
          "from": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__condition",
          "to": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__true__method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "from": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__true",
          "to": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__false__method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "from": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__false",
          "to": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "kind": "next",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge__method:10bpn0:getepubcontentasync__action_28_getepubcontentasync_await_28_3__await",
          "from": "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
          "to": "method:10bpn0:getepubcontentasync__action_28_getepubcontentasync_await_28_3__await",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_28_getepubcontentasync_await_28_3__await__method:10bpn0:getepubcontentasync__action_28_external_call_28__linear",
          "from": "method:10bpn0:getepubcontentasync__action_28_getepubcontentasync_await_28_3__await",
          "to": "method:10bpn0:getepubcontentasync__action_28_external_call_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_28_external_call_28__linear__method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return",
          "from": "method:10bpn0:getepubcontentasync__action_28_external_call_28__linear",
          "to": "method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return",
          "kind": "return",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return__method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition",
          "from": "method:10bpn0:getepubcontentasync__action_29_getepubcontentasync_return_29_4__return",
          "to": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition__method:10bpn0:getepubcontentasync__action_29_guard_clause_29__true",
          "from": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition",
          "to": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__true",
          "kind": "condition-true",
          "label": "return Result.Ok(viewModel)",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition__method:10bpn0:getepubcontentasync__action_29_guard_clause_29__false",
          "from": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__condition",
          "to": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__false",
          "kind": "condition-false",
          "label": "return Result.Fail(\"Failed to deserialize response.\")",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__true__method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "from": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__true",
          "to": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__false__method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "from": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__false",
          "to": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge__method:10bpn0:getepubcontentasync__action_32_getepubcontentasync_await_32_5__await",
          "from": "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge",
          "to": "method:10bpn0:getepubcontentasync__action_32_getepubcontentasync_await_32_5__await",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_32_getepubcontentasync_await_32_5__await__method:10bpn0:getepubcontentasync__action_32_external_call_32__linear",
          "from": "method:10bpn0:getepubcontentasync__action_32_getepubcontentasync_await_32_5__await",
          "to": "method:10bpn0:getepubcontentasync__action_32_external_call_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_32_external_call_32__linear__method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return",
          "from": "method:10bpn0:getepubcontentasync__action_32_external_call_32__linear",
          "to": "method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return__method:10bpn0:getepubcontentasync__action_33_return_33__return",
          "from": "method:10bpn0:getepubcontentasync__action_33_getepubcontentasync_return_33_6__return",
          "to": "method:10bpn0:getepubcontentasync__action_33_return_33__return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_33_return_33__return__method:10bpn0:getepubcontentasync__action_35_getepubcontentasync_catch_35_7__catch",
          "from": "method:10bpn0:getepubcontentasync__action_33_return_33__return",
          "to": "method:10bpn0:getepubcontentasync__action_35_getepubcontentasync_catch_35_7__catch",
          "kind": "exception",
          "line": 35,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_35_getepubcontentasync_catch_35_7__catch__method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return",
          "from": "method:10bpn0:getepubcontentasync__action_35_getepubcontentasync_catch_35_7__catch",
          "to": "method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return__method:10bpn0:getepubcontentasync__action_37_return_37__return",
          "from": "method:10bpn0:getepubcontentasync__action_37_getepubcontentasync_return_37_8__return",
          "to": "method:10bpn0:getepubcontentasync__action_37_return_37__return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:10bpn0:getepubcontentasync__action_26_branch_26__merge",
        "method:10bpn0:getepubcontentasync__action_26_getepubcontentasync_branch_26_2__merge",
        "method:10bpn0:getepubcontentasync__action_29_guard_clause_29__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 17,
        "end": 39
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method GetEpubContentAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1do3jf2:extractmetadataasync__fragment",
      "ownerFileId": "file:hiutf5:wasmepubservice-cs",
      "ownerSymbolId": "method:1do3jf2:extractmetadataasync",
      "ownerSymbolName": "ExtractMetadataAsync",
      "entryNodeId": "method:1do3jf2:extractmetadataasync__entry",
      "exitNodeIds": [
        "method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return",
        "method:1do3jf2:extractmetadataasync__action_53_return_53__return",
        "method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return",
        "method:1do3jf2:extractmetadataasync__action_57_return_57__return"
      ],
      "nodes": [
        {
          "id": "method:1do3jf2:extractmetadataasync__entry",
          "kind": "entry",
          "label": "ExtractMetadataAsync entry",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.99,
          "detail": "Opens an EPUB stream locally, extracts title, author, and cover image, and returns them in a LocalEpubMetadata wrapped in a Result."
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_47_try_catch_47__linear",
          "kind": "statement",
          "label": "Local EPUB parsing protection",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Wraps EPUB parsing in try/catch; on exception returns Result.Fail with Error caused by exception."
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_47_extractmetadataasync_try_47_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_49_extractmetadataasync_await_49_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81,
          "detail": "using var bookRef = await VersOne.Epub.EpubReader.OpenBookAsync(epubStream);"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_49_external_call_49__linear",
          "kind": "http-call",
          "label": "Open EPUB book asynchronously",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "VersOne.Epub.EpubReader.OpenBookAsync(epubStream) to obtain book reference."
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_50_assignment_50__linear",
          "kind": "statement",
          "label": "Normalize title and author with fallbacks",
          "line": 50,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "title = bookRef.Title ?? \"Unknown Title\"; author = bookRef.Author ?? \"Unknown Author\""
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_52_extractmetadataasync_await_52_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81,
          "detail": "byte[]? cover = await bookRef.ReadCoverAsync();"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_52_external_call_52__linear",
          "kind": "http-call",
          "label": "Read cover image bytes",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "bookRef.ReadCoverAsync()"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new LocalEpubMetadata { Title = title, Author = author, CoverImage = cover });"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_53_return_53__return",
          "kind": "return",
          "label": "Return success Result with LocalEpubMetadata",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(new LocalEpubMetadata { Title, Author, CoverImage })"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_55_extractmetadataasync_catch_55_4__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 57,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Failed to extract EPUB metadata locally: {ex.Message}\").CausedBy(ex));"
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_57_return_57__return",
          "kind": "return",
          "label": "Return failure Result for exception",
          "line": 57,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(new Error(...).CausedBy(ex))"
        }
      ],
      "edges": [
        {
          "id": "method:1do3jf2:extractmetadataasync__entry__method:1do3jf2:extractmetadataasync__action_47_try_catch_47__linear",
          "from": "method:1do3jf2:extractmetadataasync__entry",
          "to": "method:1do3jf2:extractmetadataasync__action_47_try_catch_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_47_try_catch_47__linear__method:1do3jf2:extractmetadataasync__action_47_extractmetadataasync_try_47_0__try",
          "from": "method:1do3jf2:extractmetadataasync__action_47_try_catch_47__linear",
          "to": "method:1do3jf2:extractmetadataasync__action_47_extractmetadataasync_try_47_0__try",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_47_extractmetadataasync_try_47_0__try__method:1do3jf2:extractmetadataasync__action_49_extractmetadataasync_await_49_1__await",
          "from": "method:1do3jf2:extractmetadataasync__action_47_extractmetadataasync_try_47_0__try",
          "to": "method:1do3jf2:extractmetadataasync__action_49_extractmetadataasync_await_49_1__await",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_49_extractmetadataasync_await_49_1__await__method:1do3jf2:extractmetadataasync__action_49_external_call_49__linear",
          "from": "method:1do3jf2:extractmetadataasync__action_49_extractmetadataasync_await_49_1__await",
          "to": "method:1do3jf2:extractmetadataasync__action_49_external_call_49__linear",
          "kind": "next",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_49_external_call_49__linear__method:1do3jf2:extractmetadataasync__action_50_assignment_50__linear",
          "from": "method:1do3jf2:extractmetadataasync__action_49_external_call_49__linear",
          "to": "method:1do3jf2:extractmetadataasync__action_50_assignment_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_50_assignment_50__linear__method:1do3jf2:extractmetadataasync__action_52_extractmetadataasync_await_52_2__await",
          "from": "method:1do3jf2:extractmetadataasync__action_50_assignment_50__linear",
          "to": "method:1do3jf2:extractmetadataasync__action_52_extractmetadataasync_await_52_2__await",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_52_extractmetadataasync_await_52_2__await__method:1do3jf2:extractmetadataasync__action_52_external_call_52__linear",
          "from": "method:1do3jf2:extractmetadataasync__action_52_extractmetadataasync_await_52_2__await",
          "to": "method:1do3jf2:extractmetadataasync__action_52_external_call_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_52_external_call_52__linear__method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return",
          "from": "method:1do3jf2:extractmetadataasync__action_52_external_call_52__linear",
          "to": "method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return",
          "kind": "return",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return__method:1do3jf2:extractmetadataasync__action_53_return_53__return",
          "from": "method:1do3jf2:extractmetadataasync__action_53_extractmetadataasync_return_53_3__return",
          "to": "method:1do3jf2:extractmetadataasync__action_53_return_53__return",
          "kind": "return",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_53_return_53__return__method:1do3jf2:extractmetadataasync__action_55_extractmetadataasync_catch_55_4__catch",
          "from": "method:1do3jf2:extractmetadataasync__action_53_return_53__return",
          "to": "method:1do3jf2:extractmetadataasync__action_55_extractmetadataasync_catch_55_4__catch",
          "kind": "exception",
          "line": 55,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_55_extractmetadataasync_catch_55_4__catch__method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return",
          "from": "method:1do3jf2:extractmetadataasync__action_55_extractmetadataasync_catch_55_4__catch",
          "to": "method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return__method:1do3jf2:extractmetadataasync__action_57_return_57__return",
          "from": "method:1do3jf2:extractmetadataasync__action_57_extractmetadataasync_return_57_5__return",
          "to": "method:1do3jf2:extractmetadataasync__action_57_return_57__return",
          "kind": "return",
          "line": 57,
          "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 45,
        "end": 59
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmEpubService.cs",
          "line": 45,
          "summary": "Control-flow fragment extracted for method ExtractMetadataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1k4gp5:wasmknowledgeservice__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1k4gp5:wasmknowledgeservice",
      "ownerSymbolName": "WasmKnowledgeService",
      "entryNodeId": "method:1k4gp5:wasmknowledgeservice__entry",
      "exitNodeIds": [
        "method:1k4gp5:wasmknowledgeservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1k4gp5:wasmknowledgeservice__entry",
          "kind": "entry",
          "label": "WasmKnowledgeService entry",
          "line": 12,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Constructs the service and stores an HttpClient for API calls."
        },
        {
          "id": "method:1k4gp5:wasmknowledgeservice__action_14_assign_14__linear",
          "kind": "statement",
          "label": "Store HttpClient",
          "line": 14,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "_httpClient = httpClient"
        },
        {
          "id": "method:1k4gp5:wasmknowledgeservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1k4gp5:wasmknowledgeservice__entry__method:1k4gp5:wasmknowledgeservice__action_14_assign_14__linear",
          "from": "method:1k4gp5:wasmknowledgeservice__entry",
          "to": "method:1k4gp5:wasmknowledgeservice__action_14_assign_14__linear",
          "kind": "next",
          "line": 14,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1k4gp5:wasmknowledgeservice__action_14_assign_14__linear__implicit_return",
          "from": "method:1k4gp5:wasmknowledgeservice__action_14_assign_14__linear",
          "to": "method:1k4gp5:wasmknowledgeservice__implicit_return",
          "kind": "return",
          "line": 15,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 12,
        "end": 15
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 12,
          "summary": "Control-flow fragment extracted for method WasmKnowledgeService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jw3y39:getknowledgeasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1jw3y39:getknowledgeasync",
      "ownerSymbolName": "GetKnowledgeAsync",
      "entryNodeId": "method:1jw3y39:getknowledgeasync__entry",
      "exitNodeIds": [
        "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return",
        "method:1jw3y39:getknowledgeasync__action_19_return_19__return",
        "method:1jw3y39:getknowledgeasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jw3y39:getknowledgeasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeAsync entry",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Requests a general knowledge packet from the backend for the provided text and optional ebookId."
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_await_19_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_return_19__return",
          "kind": "return",
          "label": "Return task result",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Returns the Result<KnowledgePacket> from CallKnowledgeApiAsync"
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_orchestration_19__linear",
          "kind": "statement",
          "label": "Delegate to generic knowledge API caller",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Calls CallKnowledgeApiAsync with '/api/knowledge'"
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "CallKnowledgeApiAsync",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88,
          "detail": "endpoint '/api/knowledge', text, ebookId, cancellationToken"
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 20,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jw3y39:getknowledgeasync__entry__method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_await_19_0__await",
          "from": "method:1jw3y39:getknowledgeasync__entry",
          "to": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_await_19_0__await",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_await_19_0__await__method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return",
          "from": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_await_19_0__await",
          "to": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return__method:1jw3y39:getknowledgeasync__action_19_return_19__return",
          "from": "method:1jw3y39:getknowledgeasync__action_19_getknowledgeasync_return_19_1__return",
          "to": "method:1jw3y39:getknowledgeasync__action_19_return_19__return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_return_19__return__method:1jw3y39:getknowledgeasync__action_19_orchestration_19__linear",
          "from": "method:1jw3y39:getknowledgeasync__action_19_return_19__return",
          "to": "method:1jw3y39:getknowledgeasync__action_19_orchestration_19__linear",
          "kind": "next",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__action_19_orchestration_19__linear__call_method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync",
          "from": "method:1jw3y39:getknowledgeasync__action_19_orchestration_19__linear",
          "to": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "endpoint '/api/knowledge', text, ebookId, cancellationToken",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync__implicit_return",
          "from": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync",
          "to": "method:1jw3y39:getknowledgeasync__implicit_return",
          "kind": "return",
          "line": 20,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync__jump_NexusReader_Web_Client_Services_WasmKnowledgeService_cs_CallKnowledgeApiAsync",
          "fromNodeId": "method:1jw3y39:getknowledgeasync__call_19_CallKnowledgeApiAsync",
          "kind": "call-target",
          "targetNodeId": "method:3dd3av:callknowledgeapiasync",
          "targetPath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "targetHint": "CallKnowledgeApiAsync",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "reason": "Call target CallKnowledgeApiAsync resolved to NexusReader.Web.Client/Services/WasmKnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 17,
        "end": 20
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method GetKnowledgeAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:wcjzgl:getgraphdataasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:wcjzgl:getgraphdataasync",
      "ownerSymbolName": "GetGraphDataAsync",
      "entryNodeId": "method:wcjzgl:getgraphdataasync__entry",
      "exitNodeIds": [
        "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return",
        "method:wcjzgl:getgraphdataasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:wcjzgl:getgraphdataasync__entry",
          "kind": "entry",
          "label": "GetGraphDataAsync entry",
          "line": 22,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Requests graph-form knowledge data from backend."
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_await_24_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/graph\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/graph\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_orchestration_24__linear",
          "kind": "statement",
          "label": "Delegate to generic knowledge API caller (graph)",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "CallKnowledgeApiAsync",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88,
          "detail": "endpoint '/api/knowledge/graph', text, ebookId, cancellationToken"
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:wcjzgl:getgraphdataasync__entry__method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_await_24_0__await",
          "from": "method:wcjzgl:getgraphdataasync__entry",
          "to": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_await_24_0__await",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_await_24_0__await__method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return",
          "from": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_await_24_0__await",
          "to": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return__method:wcjzgl:getgraphdataasync__action_24_orchestration_24__linear",
          "from": "method:wcjzgl:getgraphdataasync__action_24_getgraphdataasync_return_24_1__return",
          "to": "method:wcjzgl:getgraphdataasync__action_24_orchestration_24__linear",
          "kind": "next",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__action_24_orchestration_24__linear__call_method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync",
          "from": "method:wcjzgl:getgraphdataasync__action_24_orchestration_24__linear",
          "to": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "endpoint '/api/knowledge/graph', text, ebookId, cancellationToken",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync__implicit_return",
          "from": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync",
          "to": "method:wcjzgl:getgraphdataasync__implicit_return",
          "kind": "return",
          "line": 25,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync__jump_NexusReader_Web_Client_Services_WasmKnowledgeService_cs_CallKnowledgeApiAsync",
          "fromNodeId": "method:wcjzgl:getgraphdataasync__call_24_CallKnowledgeApiAsync",
          "kind": "call-target",
          "targetNodeId": "method:3dd3av:callknowledgeapiasync",
          "targetPath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "targetHint": "CallKnowledgeApiAsync",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "reason": "Call target CallKnowledgeApiAsync resolved to NexusReader.Web.Client/Services/WasmKnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 22,
        "end": 25
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 22,
          "summary": "Control-flow fragment extracted for method GetGraphDataAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jq1xnu:getknowledgemapasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:jq1xnu:getknowledgemapasync",
      "ownerSymbolName": "GetKnowledgeMapAsync",
      "entryNodeId": "method:jq1xnu:getknowledgemapasync__entry",
      "exitNodeIds": [
        "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return",
        "method:jq1xnu:getknowledgemapasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:jq1xnu:getknowledgemapasync__entry",
          "kind": "entry",
          "label": "GetKnowledgeMapAsync entry",
          "line": 27,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Requests a knowledge map from the backend."
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_await_29_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/map\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/map\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_orchestration_29__linear",
          "kind": "statement",
          "label": "Delegate to generic knowledge API caller (map)",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "CallKnowledgeApiAsync",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88,
          "detail": "endpoint '/api/knowledge/map', text, ebookId, cancellationToken"
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 30,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:jq1xnu:getknowledgemapasync__entry__method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_await_29_0__await",
          "from": "method:jq1xnu:getknowledgemapasync__entry",
          "to": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_await_29_0__await",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_await_29_0__await__method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return",
          "from": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_await_29_0__await",
          "to": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return",
          "kind": "return",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return__method:jq1xnu:getknowledgemapasync__action_29_orchestration_29__linear",
          "from": "method:jq1xnu:getknowledgemapasync__action_29_getknowledgemapasync_return_29_1__return",
          "to": "method:jq1xnu:getknowledgemapasync__action_29_orchestration_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__action_29_orchestration_29__linear__call_method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync",
          "from": "method:jq1xnu:getknowledgemapasync__action_29_orchestration_29__linear",
          "to": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "endpoint '/api/knowledge/map', text, ebookId, cancellationToken",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync__implicit_return",
          "from": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync",
          "to": "method:jq1xnu:getknowledgemapasync__implicit_return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync__jump_NexusReader_Web_Client_Services_WasmKnowledgeService_cs_CallKnowledgeApiAsync",
          "fromNodeId": "method:jq1xnu:getknowledgemapasync__call_29_CallKnowledgeApiAsync",
          "kind": "call-target",
          "targetNodeId": "method:3dd3av:callknowledgeapiasync",
          "targetPath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "targetHint": "CallKnowledgeApiAsync",
          "line": 29,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "reason": "Call target CallKnowledgeApiAsync resolved to NexusReader.Web.Client/Services/WasmKnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 27,
        "end": 30
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 27,
          "summary": "Control-flow fragment extracted for method GetKnowledgeMapAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oz3km6:getsummaryandquizasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1oz3km6:getsummaryandquizasync",
      "ownerSymbolName": "GetSummaryAndQuizAsync",
      "entryNodeId": "method:1oz3km6:getsummaryandquizasync__entry",
      "exitNodeIds": [
        "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return",
        "method:1oz3km6:getsummaryandquizasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oz3km6:getsummaryandquizasync__entry",
          "kind": "entry",
          "label": "GetSummaryAndQuizAsync entry",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Requests summary and quiz content for given text from the backend."
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_await_34_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/summary\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return await CallKnowledgeApiAsync(\"/api/knowledge/summary\", text, ebookId, cancellationToken);"
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_orchestration_34__linear",
          "kind": "statement",
          "label": "Delegate to generic knowledge API caller (summary)",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "CallKnowledgeApiAsync",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88,
          "detail": "endpoint '/api/knowledge/summary', text, ebookId, cancellationToken"
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 35,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oz3km6:getsummaryandquizasync__entry__method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_await_34_0__await",
          "from": "method:1oz3km6:getsummaryandquizasync__entry",
          "to": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_await_34_0__await",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_await_34_0__await__method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return",
          "from": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_await_34_0__await",
          "to": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return__method:1oz3km6:getsummaryandquizasync__action_34_orchestration_34__linear",
          "from": "method:1oz3km6:getsummaryandquizasync__action_34_getsummaryandquizasync_return_34_1__return",
          "to": "method:1oz3km6:getsummaryandquizasync__action_34_orchestration_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__action_34_orchestration_34__linear__call_method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync",
          "from": "method:1oz3km6:getsummaryandquizasync__action_34_orchestration_34__linear",
          "to": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync",
          "kind": "call",
          "label": "endpoint '/api/knowledge/summary', text, ebookId, cancellationToken",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync__implicit_return",
          "from": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync",
          "to": "method:1oz3km6:getsummaryandquizasync__implicit_return",
          "kind": "return",
          "line": 35,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync__jump_NexusReader_Web_Client_Services_WasmKnowledgeService_cs_CallKnowledgeApiAsync",
          "fromNodeId": "method:1oz3km6:getsummaryandquizasync__call_34_CallKnowledgeApiAsync",
          "kind": "call-target",
          "targetNodeId": "method:3dd3av:callknowledgeapiasync",
          "targetPath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "targetHint": "CallKnowledgeApiAsync",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "reason": "Call target CallKnowledgeApiAsync resolved to NexusReader.Web.Client/Services/WasmKnowledgeService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.85,
      "lineSpan": {
        "start": 32,
        "end": 35
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 32,
          "summary": "Control-flow fragment extracted for method GetSummaryAndQuizAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ca58m3:getrelevantcontextasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1ca58m3:getrelevantcontextasync",
      "ownerSymbolName": "GetRelevantContextAsync",
      "entryNodeId": "method:1ca58m3:getrelevantcontextasync__entry",
      "exitNodeIds": [
        "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return",
        "method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return",
        "method:1ca58m3:getrelevantcontextasync__action_53_getrelevantcontextasync_return_53_9__return"
      ],
      "nodes": [
        {
          "id": "method:1ca58m3:getrelevantcontextasync__entry",
          "kind": "entry",
          "label": "GetRelevantContextAsync entry",
          "line": 37,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Posts a query to backend to retrieve a list of relevant contexts (semantic retrieval)."
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_39_try_catch_39__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 39,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_39_getrelevantcontextasync_try_39_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 39,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_41_getrelevantcontextasync_await_41_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 41,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"/api/knowledge/relevant\", new { query, tenantId }, cancellationToken);"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_41_external_call_41__linear",
          "kind": "http-call",
          "label": "POST /api/knowledge/relevant",
          "line": 41,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Sends payload { query, tenantId } via HttpClient.PostAsJsonAsync"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__true",
          "kind": "branch-true",
          "label": "success -> deserialize",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "kind": "statement",
          "label": "merge",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_44_getrelevantcontextasync_await_44_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 44,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var context = await response.Content.ReadFromJsonAsync<List<RelevantContext>>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_44_deserialize_44__linear",
          "kind": "statement",
          "label": "Read List<RelevantContext>",
          "line": 44,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<List<RelevantContext>>()"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_repository_read_45_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "return context != null ? Result.Ok(context) : Result.Fail(\"Failed to deserialize relevant context.\");"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition",
          "kind": "condition",
          "label": "context == null",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Returns Result.Fail when deserialization yields null"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__false",
          "kind": "branch-false",
          "label": "ok",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_48_getrelevantcontextasync_await_48_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_48_error_path_48__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_51_getrelevantcontextasync_catch_51_8__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 51,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_53_getrelevantcontextasync_return_53_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1ca58m3:getrelevantcontextasync__entry__method:1ca58m3:getrelevantcontextasync__action_39_try_catch_39__linear",
          "from": "method:1ca58m3:getrelevantcontextasync__entry",
          "to": "method:1ca58m3:getrelevantcontextasync__action_39_try_catch_39__linear",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_39_try_catch_39__linear__method:1ca58m3:getrelevantcontextasync__action_39_getrelevantcontextasync_try_39_0__try",
          "from": "method:1ca58m3:getrelevantcontextasync__action_39_try_catch_39__linear",
          "to": "method:1ca58m3:getrelevantcontextasync__action_39_getrelevantcontextasync_try_39_0__try",
          "kind": "next",
          "line": 39,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_39_getrelevantcontextasync_try_39_0__try__method:1ca58m3:getrelevantcontextasync__action_41_getrelevantcontextasync_await_41_1__await",
          "from": "method:1ca58m3:getrelevantcontextasync__action_39_getrelevantcontextasync_try_39_0__try",
          "to": "method:1ca58m3:getrelevantcontextasync__action_41_getrelevantcontextasync_await_41_1__await",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_41_getrelevantcontextasync_await_41_1__await__method:1ca58m3:getrelevantcontextasync__action_41_external_call_41__linear",
          "from": "method:1ca58m3:getrelevantcontextasync__action_41_getrelevantcontextasync_await_41_1__await",
          "to": "method:1ca58m3:getrelevantcontextasync__action_41_external_call_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_41_external_call_41__linear__method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition",
          "from": "method:1ca58m3:getrelevantcontextasync__action_41_external_call_41__linear",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition__method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__true",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition__method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__false",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__true__method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__true",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__false__method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__false",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge__method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition__method:1ca58m3:getrelevantcontextasync__action_42_branch_42__true",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__true",
          "kind": "condition-true",
          "label": "success -> deserialize",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition__method:1ca58m3:getrelevantcontextasync__action_42_branch_42__false",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__true__method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__true",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__false__method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__false",
          "to": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "kind": "next",
          "line": 42,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge__method:1ca58m3:getrelevantcontextasync__action_44_getrelevantcontextasync_await_44_3__await",
          "from": "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
          "to": "method:1ca58m3:getrelevantcontextasync__action_44_getrelevantcontextasync_await_44_3__await",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_44_getrelevantcontextasync_await_44_3__await__method:1ca58m3:getrelevantcontextasync__action_44_deserialize_44__linear",
          "from": "method:1ca58m3:getrelevantcontextasync__action_44_getrelevantcontextasync_await_44_3__await",
          "to": "method:1ca58m3:getrelevantcontextasync__action_44_deserialize_44__linear",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_44_deserialize_44__linear__method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return",
          "from": "method:1ca58m3:getrelevantcontextasync__action_44_deserialize_44__linear",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return",
          "kind": "return",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return__method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_repository_read_45_4__linear",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_return_45_5__return",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_repository_read_45_4__linear",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_repository_read_45_4__linear__method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_getrelevantcontextasync_repository_read_45_4__linear",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition__method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__true",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition__method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__false",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__condition",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__false",
          "kind": "condition-false",
          "label": "ok",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__true__method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__true",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__false__method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__false",
          "to": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge__method:1ca58m3:getrelevantcontextasync__action_48_getrelevantcontextasync_await_48_6__await",
          "from": "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge",
          "to": "method:1ca58m3:getrelevantcontextasync__action_48_getrelevantcontextasync_await_48_6__await",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_48_getrelevantcontextasync_await_48_6__await__method:1ca58m3:getrelevantcontextasync__action_48_error_path_48__linear",
          "from": "method:1ca58m3:getrelevantcontextasync__action_48_getrelevantcontextasync_await_48_6__await",
          "to": "method:1ca58m3:getrelevantcontextasync__action_48_error_path_48__linear",
          "kind": "next",
          "line": 48,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_48_error_path_48__linear__method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return",
          "from": "method:1ca58m3:getrelevantcontextasync__action_48_error_path_48__linear",
          "to": "method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return",
          "kind": "return",
          "line": 49,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return__method:1ca58m3:getrelevantcontextasync__action_51_getrelevantcontextasync_catch_51_8__catch",
          "from": "method:1ca58m3:getrelevantcontextasync__action_49_getrelevantcontextasync_return_49_7__return",
          "to": "method:1ca58m3:getrelevantcontextasync__action_51_getrelevantcontextasync_catch_51_8__catch",
          "kind": "exception",
          "line": 51,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ca58m3:getrelevantcontextasync__action_51_getrelevantcontextasync_catch_51_8__catch__method:1ca58m3:getrelevantcontextasync__action_53_getrelevantcontextasync_return_53_9__return",
          "from": "method:1ca58m3:getrelevantcontextasync__action_51_getrelevantcontextasync_catch_51_8__catch",
          "to": "method:1ca58m3:getrelevantcontextasync__action_53_getrelevantcontextasync_return_53_9__return",
          "kind": "return",
          "line": 53,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ca58m3:getrelevantcontextasync__action_42_getrelevantcontextasync_branch_42_2__merge",
        "method:1ca58m3:getrelevantcontextasync__action_42_branch_42__merge",
        "method:1ca58m3:getrelevantcontextasync__action_45_guard_clause_45__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 37,
        "end": 55
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 37,
          "summary": "Control-flow fragment extracted for method GetRelevantContextAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ol1cx2:verifygroundednessasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1ol1cx2:verifygroundednessasync",
      "ownerSymbolName": "VerifyGroundednessAsync",
      "entryNodeId": "method:1ol1cx2:verifygroundednessasync__entry",
      "exitNodeIds": [
        "method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return",
        "method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return",
        "method:1ol1cx2:verifygroundednessasync__action_72_verifygroundednessasync_return_72_8__return"
      ],
      "nodes": [
        {
          "id": "method:1ol1cx2:verifygroundednessasync__entry",
          "kind": "entry",
          "label": "VerifyGroundednessAsync entry",
          "line": 56,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Sends answer+context to backend to verify groundedness and returns structured result."
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_58_try_catch_58__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_58_verifygroundednessasync_try_58_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_60_verifygroundednessasync_await_60_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"/api/knowledge/verify-groundedness\", new { answer, context, tenantId }, cancellationToken);"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_60_external_call_60__linear",
          "kind": "http-call",
          "label": "POST /api/knowledge/verify-groundedness",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Sends payload { answer, context, tenantId } via HttpClient.PostAsJsonAsync"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__true",
          "kind": "branch-true",
          "label": "success -> deserialize",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "kind": "statement",
          "label": "merge",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_63_verifygroundednessasync_await_63_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var result = await response.Content.ReadFromJsonAsync<GroundednessResult>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_63_deserialize_63__linear",
          "kind": "statement",
          "label": "Read GroundednessResult",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<GroundednessResult>()"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return result != null ? Result.Ok(result) : Result.Fail(\"Failed to deserialize groundedness result.\");"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition",
          "kind": "condition",
          "label": "result == null",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__false",
          "kind": "branch-false",
          "label": "ok",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "kind": "statement",
          "label": "merge",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_67_verifygroundednessasync_await_67_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 67,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_67_error_path_67__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 67,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 68,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_70_verifygroundednessasync_catch_70_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_72_verifygroundednessasync_return_72_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 72,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1ol1cx2:verifygroundednessasync__entry__method:1ol1cx2:verifygroundednessasync__action_58_try_catch_58__linear",
          "from": "method:1ol1cx2:verifygroundednessasync__entry",
          "to": "method:1ol1cx2:verifygroundednessasync__action_58_try_catch_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_58_try_catch_58__linear__method:1ol1cx2:verifygroundednessasync__action_58_verifygroundednessasync_try_58_0__try",
          "from": "method:1ol1cx2:verifygroundednessasync__action_58_try_catch_58__linear",
          "to": "method:1ol1cx2:verifygroundednessasync__action_58_verifygroundednessasync_try_58_0__try",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_58_verifygroundednessasync_try_58_0__try__method:1ol1cx2:verifygroundednessasync__action_60_verifygroundednessasync_await_60_1__await",
          "from": "method:1ol1cx2:verifygroundednessasync__action_58_verifygroundednessasync_try_58_0__try",
          "to": "method:1ol1cx2:verifygroundednessasync__action_60_verifygroundednessasync_await_60_1__await",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_60_verifygroundednessasync_await_60_1__await__method:1ol1cx2:verifygroundednessasync__action_60_external_call_60__linear",
          "from": "method:1ol1cx2:verifygroundednessasync__action_60_verifygroundednessasync_await_60_1__await",
          "to": "method:1ol1cx2:verifygroundednessasync__action_60_external_call_60__linear",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_60_external_call_60__linear__method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition",
          "from": "method:1ol1cx2:verifygroundednessasync__action_60_external_call_60__linear",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition__method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__true",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition__method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__false",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__true__method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__true",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__false__method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__false",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge__method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition__method:1ol1cx2:verifygroundednessasync__action_61_branch_61__true",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__true",
          "kind": "condition-true",
          "label": "success -> deserialize",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition__method:1ol1cx2:verifygroundednessasync__action_61_branch_61__false",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__true__method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__true",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__false__method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__false",
          "to": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "kind": "next",
          "line": 61,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge__method:1ol1cx2:verifygroundednessasync__action_63_verifygroundednessasync_await_63_3__await",
          "from": "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
          "to": "method:1ol1cx2:verifygroundednessasync__action_63_verifygroundednessasync_await_63_3__await",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_63_verifygroundednessasync_await_63_3__await__method:1ol1cx2:verifygroundednessasync__action_63_deserialize_63__linear",
          "from": "method:1ol1cx2:verifygroundednessasync__action_63_verifygroundednessasync_await_63_3__await",
          "to": "method:1ol1cx2:verifygroundednessasync__action_63_deserialize_63__linear",
          "kind": "next",
          "line": 63,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_63_deserialize_63__linear__method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return",
          "from": "method:1ol1cx2:verifygroundednessasync__action_63_deserialize_63__linear",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return__method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_verifygroundednessasync_return_64_4__return",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition__method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__true",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition__method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__false",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__condition",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__false",
          "kind": "condition-false",
          "label": "ok",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__true__method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__true",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__false__method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__false",
          "to": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "kind": "next",
          "line": 64,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge__method:1ol1cx2:verifygroundednessasync__action_67_verifygroundednessasync_await_67_5__await",
          "from": "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge",
          "to": "method:1ol1cx2:verifygroundednessasync__action_67_verifygroundednessasync_await_67_5__await",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_67_verifygroundednessasync_await_67_5__await__method:1ol1cx2:verifygroundednessasync__action_67_error_path_67__linear",
          "from": "method:1ol1cx2:verifygroundednessasync__action_67_verifygroundednessasync_await_67_5__await",
          "to": "method:1ol1cx2:verifygroundednessasync__action_67_error_path_67__linear",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_67_error_path_67__linear__method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return",
          "from": "method:1ol1cx2:verifygroundednessasync__action_67_error_path_67__linear",
          "to": "method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return__method:1ol1cx2:verifygroundednessasync__action_70_verifygroundednessasync_catch_70_7__catch",
          "from": "method:1ol1cx2:verifygroundednessasync__action_68_verifygroundednessasync_return_68_6__return",
          "to": "method:1ol1cx2:verifygroundednessasync__action_70_verifygroundednessasync_catch_70_7__catch",
          "kind": "exception",
          "line": 70,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ol1cx2:verifygroundednessasync__action_70_verifygroundednessasync_catch_70_7__catch__method:1ol1cx2:verifygroundednessasync__action_72_verifygroundednessasync_return_72_8__return",
          "from": "method:1ol1cx2:verifygroundednessasync__action_70_verifygroundednessasync_catch_70_7__catch",
          "to": "method:1ol1cx2:verifygroundednessasync__action_72_verifygroundednessasync_return_72_8__return",
          "kind": "return",
          "line": 72,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ol1cx2:verifygroundednessasync__action_61_verifygroundednessasync_branch_61_2__merge",
        "method:1ol1cx2:verifygroundednessasync__action_61_branch_61__merge",
        "method:1ol1cx2:verifygroundednessasync__action_64_guard_clause_64__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 56,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 56,
          "summary": "Control-flow fragment extracted for method VerifyGroundednessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1sn20bf:searchlibrarysemanticallyasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1sn20bf:searchlibrarysemanticallyasync",
      "ownerSymbolName": "SearchLibrarySemanticallyAsync",
      "entryNodeId": "method:1sn20bf:searchlibrarysemanticallyasync__entry",
      "exitNodeIds": [
        "method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return",
        "method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return",
        "method:1sn20bf:searchlibrarysemanticallyasync__action_92_searchlibrarysemanticallyasync_return_92_8__return"
      ],
      "nodes": [
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__entry",
          "kind": "entry",
          "label": "SearchLibrarySemanticallyAsync entry",
          "line": 76,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Performs semantic search against the library via backend endpoint and returns result list."
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_try_catch_78__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_searchlibrarysemanticallyasync_try_78_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_searchlibrarysemanticallyasync_await_80_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"/api/knowledge/search\", new { queryText, tenantId, limit }, cancellationToken);"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_external_call_80__linear",
          "kind": "http-call",
          "label": "POST /api/knowledge/search",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Sends payload { queryText, tenantId, limit } via HttpClient.PostAsJsonAsync"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__true",
          "kind": "branch-true",
          "label": "success -> deserialize or return empty list",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "kind": "statement",
          "label": "merge",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_searchlibrarysemanticallyasync_await_83_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 83,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var searchResults = await response.Content.ReadFromJsonAsync<List<SemanticSearchResultDto>>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_deserialize_83__linear",
          "kind": "statement",
          "label": "Read List<SemanticSearchResultDto>",
          "line": 83,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<List<SemanticSearchResultDto>>()"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return searchResults != null ? Result.Ok(searchResults) : Result.Ok(new List<SemanticSearchResultDto>());"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition",
          "kind": "condition",
          "label": "Return empty list on null deserialization",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "If deserialized list is null, return empty List<SemanticSearchResultDto>"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__true",
          "kind": "branch-true",
          "label": "true",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__false",
          "kind": "branch-false",
          "label": "false",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "kind": "statement",
          "label": "merge",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_searchlibrarysemanticallyasync_await_87_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_error_path_87__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_90_searchlibrarysemanticallyasync_catch_90_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_92_searchlibrarysemanticallyasync_return_92_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 92,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__entry__method:1sn20bf:searchlibrarysemanticallyasync__action_78_try_catch_78__linear",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__entry",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_try_catch_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_try_catch_78__linear__method:1sn20bf:searchlibrarysemanticallyasync__action_78_searchlibrarysemanticallyasync_try_78_0__try",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_try_catch_78__linear",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_searchlibrarysemanticallyasync_try_78_0__try",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_searchlibrarysemanticallyasync_try_78_0__try__method:1sn20bf:searchlibrarysemanticallyasync__action_80_searchlibrarysemanticallyasync_await_80_1__await",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_78_searchlibrarysemanticallyasync_try_78_0__try",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_searchlibrarysemanticallyasync_await_80_1__await",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_searchlibrarysemanticallyasync_await_80_1__await__method:1sn20bf:searchlibrarysemanticallyasync__action_80_external_call_80__linear",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_searchlibrarysemanticallyasync_await_80_1__await",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_external_call_80__linear",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_external_call_80__linear__method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_80_external_call_80__linear",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__true",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__false",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__true__method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__true",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__false__method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__false",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge__method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__true",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__true",
          "kind": "condition-true",
          "label": "success -> deserialize or return empty list",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__false",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__true__method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__true",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__false__method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__false",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge__method:1sn20bf:searchlibrarysemanticallyasync__action_83_searchlibrarysemanticallyasync_await_83_3__await",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_searchlibrarysemanticallyasync_await_83_3__await",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_searchlibrarysemanticallyasync_await_83_3__await__method:1sn20bf:searchlibrarysemanticallyasync__action_83_deserialize_83__linear",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_searchlibrarysemanticallyasync_await_83_3__await",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_deserialize_83__linear",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_deserialize_83__linear__method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_83_deserialize_83__linear",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return",
          "kind": "return",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return__method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_searchlibrarysemanticallyasync_return_84_4__return",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition",
          "kind": "fallback",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__true",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__true",
          "kind": "condition-true",
          "label": "true",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition__method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__false",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__condition",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__false",
          "kind": "condition-false",
          "label": "false",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__true__method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__true",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__false__method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__false",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "kind": "next",
          "line": 84,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge__method:1sn20bf:searchlibrarysemanticallyasync__action_87_searchlibrarysemanticallyasync_await_87_5__await",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_searchlibrarysemanticallyasync_await_87_5__await",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_searchlibrarysemanticallyasync_await_87_5__await__method:1sn20bf:searchlibrarysemanticallyasync__action_87_error_path_87__linear",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_searchlibrarysemanticallyasync_await_87_5__await",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_error_path_87__linear",
          "kind": "next",
          "line": 87,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_error_path_87__linear__method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_87_error_path_87__linear",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return",
          "kind": "return",
          "line": 88,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return__method:1sn20bf:searchlibrarysemanticallyasync__action_90_searchlibrarysemanticallyasync_catch_90_7__catch",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_88_searchlibrarysemanticallyasync_return_88_6__return",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_90_searchlibrarysemanticallyasync_catch_90_7__catch",
          "kind": "exception",
          "line": 90,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1sn20bf:searchlibrarysemanticallyasync__action_90_searchlibrarysemanticallyasync_catch_90_7__catch__method:1sn20bf:searchlibrarysemanticallyasync__action_92_searchlibrarysemanticallyasync_return_92_8__return",
          "from": "method:1sn20bf:searchlibrarysemanticallyasync__action_90_searchlibrarysemanticallyasync_catch_90_7__catch",
          "to": "method:1sn20bf:searchlibrarysemanticallyasync__action_92_searchlibrarysemanticallyasync_return_92_8__return",
          "kind": "return",
          "line": 92,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1sn20bf:searchlibrarysemanticallyasync__action_81_searchlibrarysemanticallyasync_branch_81_2__merge",
        "method:1sn20bf:searchlibrarysemanticallyasync__action_81_branch_81__merge",
        "method:1sn20bf:searchlibrarysemanticallyasync__action_84_fallback_84__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 76,
        "end": 94
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 76,
          "summary": "Control-flow fragment extracted for method SearchLibrarySemanticallyAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:jffhoh:askquestionasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:jffhoh:askquestionasync",
      "ownerSymbolName": "AskQuestionAsync",
      "entryNodeId": "method:jffhoh:askquestionasync__entry",
      "exitNodeIds": [
        "method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return",
        "method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return",
        "method:jffhoh:askquestionasync__action_112_askquestionasync_return_112_8__return"
      ],
      "nodes": [
        {
          "id": "method:jffhoh:askquestionasync__entry",
          "kind": "entry",
          "label": "AskQuestionAsync entry",
          "line": 96,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Sends a question to the backend QA endpoint and returns a grounded response DTO."
        },
        {
          "id": "method:jffhoh:askquestionasync__action_98_try_catch_98__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_98_askquestionasync_try_98_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_100_askquestionasync_await_100_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(\"/api/knowledge/ask\", new { question, tenantId, ebookId, limit }, cancellationToken);"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_100_external_call_100__linear",
          "kind": "http-call",
          "label": "POST /api/knowledge/ask",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Sends payload { question, tenantId, ebookId, limit } via HttpClient.PostAsJsonAsync"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__true",
          "kind": "branch-true",
          "label": "success -> deserialize",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "kind": "statement",
          "label": "merge",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_103_askquestionasync_await_103_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var result = await response.Content.ReadFromJsonAsync<GroundedResponseDto>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_103_deserialize_103__linear",
          "kind": "statement",
          "label": "Read GroundedResponseDto",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<GroundedResponseDto>()"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return result != null ? Result.Ok(result) : Result.Fail(\"Failed to deserialize grounded response.\");"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition",
          "kind": "condition",
          "label": "result == null",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__false",
          "kind": "branch-false",
          "label": "ok",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "kind": "statement",
          "label": "merge",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_107_askquestionasync_await_107_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 107,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_107_error_path_107__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 107,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 108,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_110_askquestionasync_catch_110_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 110,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:jffhoh:askquestionasync__action_112_askquestionasync_return_112_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 112,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:jffhoh:askquestionasync__entry__method:jffhoh:askquestionasync__action_98_try_catch_98__linear",
          "from": "method:jffhoh:askquestionasync__entry",
          "to": "method:jffhoh:askquestionasync__action_98_try_catch_98__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_98_try_catch_98__linear__method:jffhoh:askquestionasync__action_98_askquestionasync_try_98_0__try",
          "from": "method:jffhoh:askquestionasync__action_98_try_catch_98__linear",
          "to": "method:jffhoh:askquestionasync__action_98_askquestionasync_try_98_0__try",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:jffhoh:askquestionasync__action_98_askquestionasync_try_98_0__try__method:jffhoh:askquestionasync__action_100_askquestionasync_await_100_1__await",
          "from": "method:jffhoh:askquestionasync__action_98_askquestionasync_try_98_0__try",
          "to": "method:jffhoh:askquestionasync__action_100_askquestionasync_await_100_1__await",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:jffhoh:askquestionasync__action_100_askquestionasync_await_100_1__await__method:jffhoh:askquestionasync__action_100_external_call_100__linear",
          "from": "method:jffhoh:askquestionasync__action_100_askquestionasync_await_100_1__await",
          "to": "method:jffhoh:askquestionasync__action_100_external_call_100__linear",
          "kind": "next",
          "line": 100,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_100_external_call_100__linear__method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition",
          "from": "method:jffhoh:askquestionasync__action_100_external_call_100__linear",
          "to": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition__method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__true",
          "from": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition",
          "to": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition__method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__false",
          "from": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__condition",
          "to": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__true__method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "from": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__true",
          "to": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__false__method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "from": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__false",
          "to": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge__method:jffhoh:askquestionasync__action_101_branch_101__condition",
          "from": "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
          "to": "method:jffhoh:askquestionasync__action_101_branch_101__condition",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__condition__method:jffhoh:askquestionasync__action_101_branch_101__true",
          "from": "method:jffhoh:askquestionasync__action_101_branch_101__condition",
          "to": "method:jffhoh:askquestionasync__action_101_branch_101__true",
          "kind": "condition-true",
          "label": "success -> deserialize",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__condition__method:jffhoh:askquestionasync__action_101_branch_101__false",
          "from": "method:jffhoh:askquestionasync__action_101_branch_101__condition",
          "to": "method:jffhoh:askquestionasync__action_101_branch_101__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__true__method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "from": "method:jffhoh:askquestionasync__action_101_branch_101__true",
          "to": "method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__false__method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "from": "method:jffhoh:askquestionasync__action_101_branch_101__false",
          "to": "method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "kind": "next",
          "line": 101,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_101_branch_101__merge__method:jffhoh:askquestionasync__action_103_askquestionasync_await_103_3__await",
          "from": "method:jffhoh:askquestionasync__action_101_branch_101__merge",
          "to": "method:jffhoh:askquestionasync__action_103_askquestionasync_await_103_3__await",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:jffhoh:askquestionasync__action_103_askquestionasync_await_103_3__await__method:jffhoh:askquestionasync__action_103_deserialize_103__linear",
          "from": "method:jffhoh:askquestionasync__action_103_askquestionasync_await_103_3__await",
          "to": "method:jffhoh:askquestionasync__action_103_deserialize_103__linear",
          "kind": "next",
          "line": 103,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_103_deserialize_103__linear__method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return",
          "from": "method:jffhoh:askquestionasync__action_103_deserialize_103__linear",
          "to": "method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return",
          "kind": "return",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return__method:jffhoh:askquestionasync__action_104_guard_clause_104__condition",
          "from": "method:jffhoh:askquestionasync__action_104_askquestionasync_return_104_4__return",
          "to": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition__method:jffhoh:askquestionasync__action_104_guard_clause_104__true",
          "from": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition",
          "to": "method:jffhoh:askquestionasync__action_104_guard_clause_104__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition__method:jffhoh:askquestionasync__action_104_guard_clause_104__false",
          "from": "method:jffhoh:askquestionasync__action_104_guard_clause_104__condition",
          "to": "method:jffhoh:askquestionasync__action_104_guard_clause_104__false",
          "kind": "condition-false",
          "label": "ok",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__true__method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "from": "method:jffhoh:askquestionasync__action_104_guard_clause_104__true",
          "to": "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__false__method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "from": "method:jffhoh:askquestionasync__action_104_guard_clause_104__false",
          "to": "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "kind": "next",
          "line": 104,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge__method:jffhoh:askquestionasync__action_107_askquestionasync_await_107_5__await",
          "from": "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge",
          "to": "method:jffhoh:askquestionasync__action_107_askquestionasync_await_107_5__await",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:jffhoh:askquestionasync__action_107_askquestionasync_await_107_5__await__method:jffhoh:askquestionasync__action_107_error_path_107__linear",
          "from": "method:jffhoh:askquestionasync__action_107_askquestionasync_await_107_5__await",
          "to": "method:jffhoh:askquestionasync__action_107_error_path_107__linear",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_107_error_path_107__linear__method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return",
          "from": "method:jffhoh:askquestionasync__action_107_error_path_107__linear",
          "to": "method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return",
          "kind": "return",
          "line": 108,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return__method:jffhoh:askquestionasync__action_110_askquestionasync_catch_110_7__catch",
          "from": "method:jffhoh:askquestionasync__action_108_askquestionasync_return_108_6__return",
          "to": "method:jffhoh:askquestionasync__action_110_askquestionasync_catch_110_7__catch",
          "kind": "exception",
          "line": 110,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:jffhoh:askquestionasync__action_110_askquestionasync_catch_110_7__catch__method:jffhoh:askquestionasync__action_112_askquestionasync_return_112_8__return",
          "from": "method:jffhoh:askquestionasync__action_110_askquestionasync_catch_110_7__catch",
          "to": "method:jffhoh:askquestionasync__action_112_askquestionasync_return_112_8__return",
          "kind": "return",
          "line": 112,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:jffhoh:askquestionasync__action_101_askquestionasync_branch_101_2__merge",
        "method:jffhoh:askquestionasync__action_101_branch_101__merge",
        "method:jffhoh:askquestionasync__action_104_guard_clause_104__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 96,
        "end": 114
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 96,
          "summary": "Control-flow fragment extracted for method AskQuestionAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:3dd3av:callknowledgeapiasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:3dd3av:callknowledgeapiasync",
      "ownerSymbolName": "CallKnowledgeApiAsync",
      "entryNodeId": "method:3dd3av:callknowledgeapiasync__entry",
      "exitNodeIds": [
        "method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return",
        "method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return",
        "method:3dd3av:callknowledgeapiasync__action_132_callknowledgeapiasync_return_132_8__return"
      ],
      "nodes": [
        {
          "id": "method:3dd3av:callknowledgeapiasync__entry",
          "kind": "entry",
          "label": "CallKnowledgeApiAsync entry",
          "line": 116,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Generic helper that POSTs text to a given endpoint and deserializes a KnowledgePacket, handling HTTP errors and exceptions."
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_118_try_catch_118__linear",
          "kind": "statement",
          "label": "Network or parsing exception handling",
          "line": 118,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_118_callknowledgeapiasync_try_118_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 118,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_120_callknowledgeapiasync_await_120_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 120,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.PostAsJsonAsync(endpoint, new { text, ebookId }, cancellationToken);"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_120_external_call_120__linear",
          "kind": "http-call",
          "label": "POST to provided endpoint",
          "line": 120,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "HttpClient.PostAsJsonAsync(endpoint, new { text, ebookId })"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__true",
          "kind": "branch-true",
          "label": "success -> deserialize",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "kind": "statement",
          "label": "merge",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_123_callknowledgeapiasync_await_123_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 123,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var packet = await response.Content.ReadFromJsonAsync<KnowledgePacket>(cancellationToken: cancellationToken);"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_123_deserialize_123__linear",
          "kind": "statement",
          "label": "Read KnowledgePacket",
          "line": 123,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "response.Content.ReadFromJsonAsync<KnowledgePacket>()"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return packet != null ? Result.Ok(packet) : Result.Fail(\"Failed to deserialize knowledge packet.\");"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition",
          "kind": "condition",
          "label": "packet == null",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__true",
          "kind": "branch-true",
          "label": "fail",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__false",
          "kind": "branch-false",
          "label": "ok",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "kind": "statement",
          "label": "merge",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_127_callknowledgeapiasync_await_127_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 127,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_127_error_path_127__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 127,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 128,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_130_callknowledgeapiasync_catch_130_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 130,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_132_callknowledgeapiasync_return_132_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network or parsing error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:3dd3av:callknowledgeapiasync__entry__method:3dd3av:callknowledgeapiasync__action_118_try_catch_118__linear",
          "from": "method:3dd3av:callknowledgeapiasync__entry",
          "to": "method:3dd3av:callknowledgeapiasync__action_118_try_catch_118__linear",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_118_try_catch_118__linear__method:3dd3av:callknowledgeapiasync__action_118_callknowledgeapiasync_try_118_0__try",
          "from": "method:3dd3av:callknowledgeapiasync__action_118_try_catch_118__linear",
          "to": "method:3dd3av:callknowledgeapiasync__action_118_callknowledgeapiasync_try_118_0__try",
          "kind": "next",
          "line": 118,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_118_callknowledgeapiasync_try_118_0__try__method:3dd3av:callknowledgeapiasync__action_120_callknowledgeapiasync_await_120_1__await",
          "from": "method:3dd3av:callknowledgeapiasync__action_118_callknowledgeapiasync_try_118_0__try",
          "to": "method:3dd3av:callknowledgeapiasync__action_120_callknowledgeapiasync_await_120_1__await",
          "kind": "next",
          "line": 120,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_120_callknowledgeapiasync_await_120_1__await__method:3dd3av:callknowledgeapiasync__action_120_external_call_120__linear",
          "from": "method:3dd3av:callknowledgeapiasync__action_120_callknowledgeapiasync_await_120_1__await",
          "to": "method:3dd3av:callknowledgeapiasync__action_120_external_call_120__linear",
          "kind": "next",
          "line": 120,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_120_external_call_120__linear__method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition",
          "from": "method:3dd3av:callknowledgeapiasync__action_120_external_call_120__linear",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition__method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__true",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition__method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__false",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__true__method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__true",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__false__method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__false",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge__method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition__method:3dd3av:callknowledgeapiasync__action_121_branch_121__true",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__true",
          "kind": "condition-true",
          "label": "success -> deserialize",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition__method:3dd3av:callknowledgeapiasync__action_121_branch_121__false",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__true__method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__true",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__false__method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__false",
          "to": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "kind": "next",
          "line": 121,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge__method:3dd3av:callknowledgeapiasync__action_123_callknowledgeapiasync_await_123_3__await",
          "from": "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
          "to": "method:3dd3av:callknowledgeapiasync__action_123_callknowledgeapiasync_await_123_3__await",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_123_callknowledgeapiasync_await_123_3__await__method:3dd3av:callknowledgeapiasync__action_123_deserialize_123__linear",
          "from": "method:3dd3av:callknowledgeapiasync__action_123_callknowledgeapiasync_await_123_3__await",
          "to": "method:3dd3av:callknowledgeapiasync__action_123_deserialize_123__linear",
          "kind": "next",
          "line": 123,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_123_deserialize_123__linear__method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return",
          "from": "method:3dd3av:callknowledgeapiasync__action_123_deserialize_123__linear",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return",
          "kind": "return",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return__method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_callknowledgeapiasync_return_124_4__return",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition__method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__true",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__true",
          "kind": "condition-true",
          "label": "fail",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition__method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__false",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__condition",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__false",
          "kind": "condition-false",
          "label": "ok",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__true__method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__true",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__false__method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__false",
          "to": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "kind": "next",
          "line": 124,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge__method:3dd3av:callknowledgeapiasync__action_127_callknowledgeapiasync_await_127_5__await",
          "from": "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge",
          "to": "method:3dd3av:callknowledgeapiasync__action_127_callknowledgeapiasync_await_127_5__await",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_127_callknowledgeapiasync_await_127_5__await__method:3dd3av:callknowledgeapiasync__action_127_error_path_127__linear",
          "from": "method:3dd3av:callknowledgeapiasync__action_127_callknowledgeapiasync_await_127_5__await",
          "to": "method:3dd3av:callknowledgeapiasync__action_127_error_path_127__linear",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_127_error_path_127__linear__method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return",
          "from": "method:3dd3av:callknowledgeapiasync__action_127_error_path_127__linear",
          "to": "method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return",
          "kind": "return",
          "line": 128,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return__method:3dd3av:callknowledgeapiasync__action_130_callknowledgeapiasync_catch_130_7__catch",
          "from": "method:3dd3av:callknowledgeapiasync__action_128_callknowledgeapiasync_return_128_6__return",
          "to": "method:3dd3av:callknowledgeapiasync__action_130_callknowledgeapiasync_catch_130_7__catch",
          "kind": "exception",
          "line": 130,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:3dd3av:callknowledgeapiasync__action_130_callknowledgeapiasync_catch_130_7__catch__method:3dd3av:callknowledgeapiasync__action_132_callknowledgeapiasync_return_132_8__return",
          "from": "method:3dd3av:callknowledgeapiasync__action_130_callknowledgeapiasync_catch_130_7__catch",
          "to": "method:3dd3av:callknowledgeapiasync__action_132_callknowledgeapiasync_return_132_8__return",
          "kind": "return",
          "line": 132,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:3dd3av:callknowledgeapiasync__action_121_callknowledgeapiasync_branch_121_2__merge",
        "method:3dd3av:callknowledgeapiasync__action_121_branch_121__merge",
        "method:3dd3av:callknowledgeapiasync__action_124_guard_clause_124__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 116,
        "end": 134
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 116,
          "summary": "Control-flow fragment extracted for method CallKnowledgeApiAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1wz04qu:clearcacheasync__fragment",
      "ownerFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "ownerSymbolId": "method:1wz04qu:clearcacheasync",
      "ownerSymbolName": "ClearCacheAsync",
      "entryNodeId": "method:1wz04qu:clearcacheasync__entry",
      "exitNodeIds": [
        "method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return",
        "method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return",
        "method:1wz04qu:clearcacheasync__action_153_clearcacheasync_return_153_7__return"
      ],
      "nodes": [
        {
          "id": "method:1wz04qu:clearcacheasync__entry",
          "kind": "entry",
          "label": "ClearCacheAsync entry",
          "line": 136,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.99,
          "detail": "Requests the server to clear the knowledge cache via DELETE /api/knowledge and logs simple console messages."
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_138_try_catch_138__linear",
          "kind": "statement",
          "label": "Network exception handling",
          "line": 138,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Catches Exception and returns Result.Fail(Error(...).CausedBy(ex))"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_138_clearcacheasync_try_138_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 138,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_140_log_140__linear",
          "kind": "statement",
          "label": "Log request start",
          "line": 140,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[WasmKnowledgeService] Requesting cache clear...\")"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_141_clearcacheasync_await_141_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 141,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var response = await _httpClient.DeleteAsync(\"/api/knowledge\", cancellationToken);"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_141_external_call_141__linear",
          "kind": "http-call",
          "label": "DELETE /api/knowledge",
          "line": 141,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "HttpClient.DeleteAsync(\"/api/knowledge\")"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78,
          "detail": "if (response.IsSuccessStatusCode)"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition",
          "kind": "condition",
          "label": "response.IsSuccessStatusCode",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__true",
          "kind": "branch-true",
          "label": "success -> log success and return Ok",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__false",
          "kind": "branch-false",
          "label": "failure -> read error and fail",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "kind": "statement",
          "label": "merge",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_144_log_144__linear",
          "kind": "statement",
          "label": "Log success",
          "line": 144,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Console.WriteLine(\"[WasmKnowledgeService] Cache cleared successfully.\")"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 145,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_148_clearcacheasync_await_148_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 148,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81,
          "detail": "var errorBody = await response.Content.ReadAsStringAsync(cancellationToken);"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_148_error_path_148__linear",
          "kind": "statement",
          "label": "Server error handling",
          "line": 148,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "Reads response body and returns Result.Fail with status code and body"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 149,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail($\"Server error ({response.StatusCode}): {errorBody}\");"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_151_clearcacheasync_catch_151_6__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 151,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_153_clearcacheasync_return_153_7__return",
          "kind": "return",
          "label": "Returns result",
          "line": 153,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Network error: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1wz04qu:clearcacheasync__entry__method:1wz04qu:clearcacheasync__action_138_try_catch_138__linear",
          "from": "method:1wz04qu:clearcacheasync__entry",
          "to": "method:1wz04qu:clearcacheasync__action_138_try_catch_138__linear",
          "kind": "next",
          "line": 138,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_138_try_catch_138__linear__method:1wz04qu:clearcacheasync__action_138_clearcacheasync_try_138_0__try",
          "from": "method:1wz04qu:clearcacheasync__action_138_try_catch_138__linear",
          "to": "method:1wz04qu:clearcacheasync__action_138_clearcacheasync_try_138_0__try",
          "kind": "next",
          "line": 138,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_138_clearcacheasync_try_138_0__try__method:1wz04qu:clearcacheasync__action_140_log_140__linear",
          "from": "method:1wz04qu:clearcacheasync__action_138_clearcacheasync_try_138_0__try",
          "to": "method:1wz04qu:clearcacheasync__action_140_log_140__linear",
          "kind": "next",
          "line": 140,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_140_log_140__linear__method:1wz04qu:clearcacheasync__action_141_clearcacheasync_await_141_1__await",
          "from": "method:1wz04qu:clearcacheasync__action_140_log_140__linear",
          "to": "method:1wz04qu:clearcacheasync__action_141_clearcacheasync_await_141_1__await",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_141_clearcacheasync_await_141_1__await__method:1wz04qu:clearcacheasync__action_141_external_call_141__linear",
          "from": "method:1wz04qu:clearcacheasync__action_141_clearcacheasync_await_141_1__await",
          "to": "method:1wz04qu:clearcacheasync__action_141_external_call_141__linear",
          "kind": "next",
          "line": 141,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_141_external_call_141__linear__method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition",
          "from": "method:1wz04qu:clearcacheasync__action_141_external_call_141__linear",
          "to": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition__method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__true",
          "from": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition",
          "to": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition__method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__false",
          "from": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__condition",
          "to": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__true__method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "from": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__true",
          "to": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__false__method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "from": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__false",
          "to": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge__method:1wz04qu:clearcacheasync__action_142_branch_142__condition",
          "from": "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
          "to": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition__method:1wz04qu:clearcacheasync__action_142_branch_142__true",
          "from": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition",
          "to": "method:1wz04qu:clearcacheasync__action_142_branch_142__true",
          "kind": "condition-true",
          "label": "success -> log success and return Ok",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition__method:1wz04qu:clearcacheasync__action_142_branch_142__false",
          "from": "method:1wz04qu:clearcacheasync__action_142_branch_142__condition",
          "to": "method:1wz04qu:clearcacheasync__action_142_branch_142__false",
          "kind": "condition-false",
          "label": "failure -> read error and fail",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__true__method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "from": "method:1wz04qu:clearcacheasync__action_142_branch_142__true",
          "to": "method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__false__method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "from": "method:1wz04qu:clearcacheasync__action_142_branch_142__false",
          "to": "method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "kind": "next",
          "line": 142,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_142_branch_142__merge__method:1wz04qu:clearcacheasync__action_144_log_144__linear",
          "from": "method:1wz04qu:clearcacheasync__action_142_branch_142__merge",
          "to": "method:1wz04qu:clearcacheasync__action_144_log_144__linear",
          "kind": "next",
          "line": 144,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_144_log_144__linear__method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return",
          "from": "method:1wz04qu:clearcacheasync__action_144_log_144__linear",
          "to": "method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return",
          "kind": "return",
          "line": 145,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return__method:1wz04qu:clearcacheasync__action_148_clearcacheasync_await_148_4__await",
          "from": "method:1wz04qu:clearcacheasync__action_145_clearcacheasync_return_145_3__return",
          "to": "method:1wz04qu:clearcacheasync__action_148_clearcacheasync_await_148_4__await",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_148_clearcacheasync_await_148_4__await__method:1wz04qu:clearcacheasync__action_148_error_path_148__linear",
          "from": "method:1wz04qu:clearcacheasync__action_148_clearcacheasync_await_148_4__await",
          "to": "method:1wz04qu:clearcacheasync__action_148_error_path_148__linear",
          "kind": "next",
          "line": 148,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_148_error_path_148__linear__method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return",
          "from": "method:1wz04qu:clearcacheasync__action_148_error_path_148__linear",
          "to": "method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return",
          "kind": "return",
          "line": 149,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return__method:1wz04qu:clearcacheasync__action_151_clearcacheasync_catch_151_6__catch",
          "from": "method:1wz04qu:clearcacheasync__action_149_clearcacheasync_return_149_5__return",
          "to": "method:1wz04qu:clearcacheasync__action_151_clearcacheasync_catch_151_6__catch",
          "kind": "exception",
          "line": 151,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1wz04qu:clearcacheasync__action_151_clearcacheasync_catch_151_6__catch__method:1wz04qu:clearcacheasync__action_153_clearcacheasync_return_153_7__return",
          "from": "method:1wz04qu:clearcacheasync__action_151_clearcacheasync_catch_151_6__catch",
          "to": "method:1wz04qu:clearcacheasync__action_153_clearcacheasync_return_153_7__return",
          "kind": "return",
          "line": 153,
          "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1wz04qu:clearcacheasync__action_142_clearcacheasync_branch_142_2__merge",
        "method:1wz04qu:clearcacheasync__action_142_branch_142__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 136,
        "end": 155
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs",
          "line": 136,
          "summary": "Control-flow fragment extracted for method ClearCacheAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ev8hjj:vibratesuccessasync__fragment",
      "ownerFileId": "file:qt46oq:webplatformservice-cs",
      "ownerSymbolId": "method:ev8hjj:vibratesuccessasync",
      "ownerSymbolName": "VibrateSuccessAsync",
      "entryNodeId": "method:ev8hjj:vibratesuccessasync__entry",
      "exitNodeIds": [
        "method:ev8hjj:vibratesuccessasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ev8hjj:vibratesuccessasync__entry",
          "kind": "entry",
          "label": "VibrateSuccessAsync entry",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.99,
          "detail": "Convenience method to trigger a short success vibration (100ms) by delegating to VibrateAsync."
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__action_16_vibratesuccessasync_await_16_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result> VibrateSuccessAsync() => await VibrateAsync(100);"
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__action_16_orchestration_16__linear",
          "kind": "statement",
          "label": "Delegates to VibrateAsync",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "Expression-bodied forwarder to VibrateAsync(100)"
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync",
          "kind": "call",
          "label": "VibrateAsync",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.88,
          "detail": "100 (milliseconds)"
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ev8hjj:vibratesuccessasync__entry__method:ev8hjj:vibratesuccessasync__action_16_vibratesuccessasync_await_16_0__await",
          "from": "method:ev8hjj:vibratesuccessasync__entry",
          "to": "method:ev8hjj:vibratesuccessasync__action_16_vibratesuccessasync_await_16_0__await",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__action_16_vibratesuccessasync_await_16_0__await__method:ev8hjj:vibratesuccessasync__action_16_orchestration_16__linear",
          "from": "method:ev8hjj:vibratesuccessasync__action_16_vibratesuccessasync_await_16_0__await",
          "to": "method:ev8hjj:vibratesuccessasync__action_16_orchestration_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__action_16_orchestration_16__linear__call_method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync",
          "from": "method:ev8hjj:vibratesuccessasync__action_16_orchestration_16__linear",
          "to": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync",
          "kind": "call",
          "label": "100 (milliseconds)",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync__implicit_return",
          "from": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync",
          "to": "method:ev8hjj:vibratesuccessasync__implicit_return",
          "kind": "return",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync__jump_NexusReader_Web_Client_Services_WebPlatformService_cs_VibrateAsync",
          "fromNodeId": "method:ev8hjj:vibratesuccessasync__call_16_VibrateAsync",
          "kind": "call-target",
          "targetNodeId": "method:1lfokb3:vibrateasync",
          "targetPath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "targetHint": "VibrateAsync",
          "line": 16,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "reason": "Call target VibrateAsync resolved to NexusReader.Web.Client/Services/WebPlatformService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 16,
        "end": 16
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method VibrateSuccessAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:eown21:vibrateerrorasync__fragment",
      "ownerFileId": "file:qt46oq:webplatformservice-cs",
      "ownerSymbolId": "method:eown21:vibrateerrorasync",
      "ownerSymbolName": "VibrateErrorAsync",
      "entryNodeId": "method:eown21:vibrateerrorasync__entry",
      "exitNodeIds": [
        "method:eown21:vibrateerrorasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:eown21:vibrateerrorasync__entry",
          "kind": "entry",
          "label": "VibrateErrorAsync entry",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.99,
          "detail": "Convenience method to trigger a longer error vibration (300ms) by delegating to VibrateAsync."
        },
        {
          "id": "method:eown21:vibrateerrorasync__action_17_vibrateerrorasync_await_17_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result> VibrateErrorAsync() => await VibrateAsync(300);"
        },
        {
          "id": "method:eown21:vibrateerrorasync__action_17_orchestration_17__linear",
          "kind": "statement",
          "label": "Delegates to VibrateAsync",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "Expression-bodied forwarder to VibrateAsync(300)"
        },
        {
          "id": "method:eown21:vibrateerrorasync__call_17_VibrateAsync",
          "kind": "call",
          "label": "VibrateAsync",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.88,
          "detail": "300 (milliseconds)"
        },
        {
          "id": "method:eown21:vibrateerrorasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:eown21:vibrateerrorasync__entry__method:eown21:vibrateerrorasync__action_17_vibrateerrorasync_await_17_0__await",
          "from": "method:eown21:vibrateerrorasync__entry",
          "to": "method:eown21:vibrateerrorasync__action_17_vibrateerrorasync_await_17_0__await",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:eown21:vibrateerrorasync__action_17_vibrateerrorasync_await_17_0__await__method:eown21:vibrateerrorasync__action_17_orchestration_17__linear",
          "from": "method:eown21:vibrateerrorasync__action_17_vibrateerrorasync_await_17_0__await",
          "to": "method:eown21:vibrateerrorasync__action_17_orchestration_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eown21:vibrateerrorasync__action_17_orchestration_17__linear__call_method:eown21:vibrateerrorasync__call_17_VibrateAsync",
          "from": "method:eown21:vibrateerrorasync__action_17_orchestration_17__linear",
          "to": "method:eown21:vibrateerrorasync__call_17_VibrateAsync",
          "kind": "call",
          "label": "300 (milliseconds)",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:eown21:vibrateerrorasync__call_17_VibrateAsync__implicit_return",
          "from": "method:eown21:vibrateerrorasync__call_17_VibrateAsync",
          "to": "method:eown21:vibrateerrorasync__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:eown21:vibrateerrorasync__call_17_VibrateAsync__jump_NexusReader_Web_Client_Services_WebPlatformService_cs_VibrateAsync",
          "fromNodeId": "method:eown21:vibrateerrorasync__call_17_VibrateAsync",
          "kind": "call-target",
          "targetNodeId": "method:1lfokb3:vibrateasync",
          "targetPath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "targetHint": "VibrateAsync",
          "line": 17,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "reason": "Call target VibrateAsync resolved to NexusReader.Web.Client/Services/WebPlatformService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 17,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 17,
          "summary": "Control-flow fragment extracted for method VibrateErrorAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1lfokb3:vibrateasync__fragment",
      "ownerFileId": "file:qt46oq:webplatformservice-cs",
      "ownerSymbolId": "method:1lfokb3:vibrateasync",
      "ownerSymbolName": "VibrateAsync",
      "entryNodeId": "method:1lfokb3:vibrateasync__entry",
      "exitNodeIds": [
        "method:1lfokb3:vibrateasync__action_24_return_24__return",
        "method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return",
        "method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return",
        "method:1lfokb3:vibrateasync__action_28_return_28__return"
      ],
      "nodes": [
        {
          "id": "method:1lfokb3:vibrateasync__entry",
          "kind": "entry",
          "label": "VibrateAsync entry",
          "line": 19,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.99,
          "detail": "Attempts to vibrate the user's device for the specified duration via JS interop, returning Ok on success or Fail with the exception message on error."
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_21_try_catch_21__linear",
          "kind": "statement",
          "label": "Handles JS invocation errors",
          "line": 21,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "Try the JS call and return Result.Ok(); catch Exception and return Result.Fail(ex.Message)"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_21_vibrateasync_try_21_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 21,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_23_vibrateasync_await_23_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds);"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_23_external_call_23__linear",
          "kind": "http-call",
          "label": "Invokes browser vibration via JS interop",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime.InvokeVoidAsync(\"navigator.vibrate\", milliseconds) -- external/framework call to IJSRuntime (browser)"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_24_return_24__return",
          "kind": "return",
          "label": "Success path",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_26_vibrateasync_catch_26_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_28_return_28__return",
          "kind": "return",
          "label": "Failure path",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:1lfokb3:vibrateasync__entry__method:1lfokb3:vibrateasync__action_21_try_catch_21__linear",
          "from": "method:1lfokb3:vibrateasync__entry",
          "to": "method:1lfokb3:vibrateasync__action_21_try_catch_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_21_try_catch_21__linear__method:1lfokb3:vibrateasync__action_21_vibrateasync_try_21_0__try",
          "from": "method:1lfokb3:vibrateasync__action_21_try_catch_21__linear",
          "to": "method:1lfokb3:vibrateasync__action_21_vibrateasync_try_21_0__try",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_21_vibrateasync_try_21_0__try__method:1lfokb3:vibrateasync__action_23_vibrateasync_await_23_1__await",
          "from": "method:1lfokb3:vibrateasync__action_21_vibrateasync_try_21_0__try",
          "to": "method:1lfokb3:vibrateasync__action_23_vibrateasync_await_23_1__await",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_23_vibrateasync_await_23_1__await__method:1lfokb3:vibrateasync__action_23_external_call_23__linear",
          "from": "method:1lfokb3:vibrateasync__action_23_vibrateasync_await_23_1__await",
          "to": "method:1lfokb3:vibrateasync__action_23_external_call_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_23_external_call_23__linear__method:1lfokb3:vibrateasync__action_24_return_24__return",
          "from": "method:1lfokb3:vibrateasync__action_23_external_call_23__linear",
          "to": "method:1lfokb3:vibrateasync__action_24_return_24__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_24_return_24__return__method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return",
          "from": "method:1lfokb3:vibrateasync__action_24_return_24__return",
          "to": "method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return",
          "kind": "return",
          "line": 24,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return__method:1lfokb3:vibrateasync__action_26_vibrateasync_catch_26_3__catch",
          "from": "method:1lfokb3:vibrateasync__action_24_vibrateasync_return_24_2__return",
          "to": "method:1lfokb3:vibrateasync__action_26_vibrateasync_catch_26_3__catch",
          "kind": "exception",
          "line": 26,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_26_vibrateasync_catch_26_3__catch__method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return",
          "from": "method:1lfokb3:vibrateasync__action_26_vibrateasync_catch_26_3__catch",
          "to": "method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return__method:1lfokb3:vibrateasync__action_28_return_28__return",
          "from": "method:1lfokb3:vibrateasync__action_28_vibrateasync_return_28_4__return",
          "to": "method:1lfokb3:vibrateasync__action_28_return_28__return",
          "kind": "return",
          "line": 28,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 19,
        "end": 30
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method VibrateAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:fmgrt8:getdevicecontext__fragment",
      "ownerFileId": "file:qt46oq:webplatformservice-cs",
      "ownerSymbolId": "method:fmgrt8:getdevicecontext",
      "ownerSymbolName": "GetDeviceContext",
      "entryNodeId": "method:fmgrt8:getdevicecontext__entry",
      "exitNodeIds": [
        "method:fmgrt8:getdevicecontext__action_34_return_34__return",
        "method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return",
        "method:fmgrt8:getdevicecontext__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:fmgrt8:getdevicecontext__entry",
          "kind": "entry",
          "label": "GetDeviceContext entry",
          "line": 32,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.99,
          "detail": "Provides a DeviceContext describing the running platform (hardcoded for browser/web) wrapped in a FluentResults Result."
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_return_34__return",
          "kind": "return",
          "label": "Wraps created context in Result.Ok",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(DeviceContext)"
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(new DeviceContext("
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_create_34__linear",
          "kind": "statement",
          "label": "Creates DeviceContext DTO",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7,
          "detail": "new DeviceContext(\"Browser\", \"Web\", DeviceType.Desktop, DisplayOrientation.Unknown)"
        },
        {
          "id": "method:fmgrt8:getdevicecontext__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 40,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:fmgrt8:getdevicecontext__entry__method:fmgrt8:getdevicecontext__action_34_return_34__return",
          "from": "method:fmgrt8:getdevicecontext__entry",
          "to": "method:fmgrt8:getdevicecontext__action_34_return_34__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_return_34__return__method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return",
          "from": "method:fmgrt8:getdevicecontext__action_34_return_34__return",
          "to": "method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return",
          "kind": "return",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return__method:fmgrt8:getdevicecontext__action_34_create_34__linear",
          "from": "method:fmgrt8:getdevicecontext__action_34_getdevicecontext_return_34_0__return",
          "to": "method:fmgrt8:getdevicecontext__action_34_create_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:fmgrt8:getdevicecontext__action_34_create_34__linear__implicit_return",
          "from": "method:fmgrt8:getdevicecontext__action_34_create_34__linear",
          "to": "method:fmgrt8:getdevicecontext__implicit_return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 32,
        "end": 40
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web.Client/Services/WebPlatformService.cs",
          "line": 32,
          "summary": "Control-flow fragment extracted for method GetDeviceContext.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:boip8u:render-razor-markup__fragment",
      "ownerFileId": "file:qvoxmq:app-razor",
      "ownerSymbolId": "method:boip8u:render-razor-markup",
      "ownerSymbolName": "Render (razor markup)",
      "entryNodeId": "method:boip8u:render-razor-markup__entry",
      "exitNodeIds": [
        "method:boip8u:render-razor-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:boip8u:render-razor-markup__entry",
          "kind": "entry",
          "label": "Render (razor markup) entry",
          "line": 1,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.99,
          "detail": "Renders the app HTML shell, includes CSS, HeadOutlet, top-level routes and modal components, and references scripts required to start the Blazor client."
        },
        {
          "id": "method:boip8u:render-razor-markup__action_8_include_static_8__linear",
          "kind": "statement",
          "label": "Include CSS",
          "line": 8,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "Links shared and app CSS files"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_12_render_component_12__linear",
          "kind": "statement",
          "label": "Render HeadOutlet",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "HeadOutlet component injected for head content"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_12_HeadOutlet",
          "kind": "call",
          "label": "HeadOutlet",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "@rendermode=\"InteractiveAuto\""
        },
        {
          "id": "method:boip8u:render-razor-markup__action_21_render_component_21__linear",
          "kind": "statement",
          "label": "Render SPA routes",
          "line": 21,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "Top-level router component renders application pages"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes",
          "kind": "call",
          "label": "NexusReader.UI.Shared.Routes",
          "line": 21,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "@rendermode=\"InteractiveAuto\" (renders SPA routes)"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_22_render_component_22__linear",
          "kind": "statement",
          "label": "Render ReconnectModal",
          "line": 22,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "Global reconnect modal included in app shell"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_22_ReconnectModal",
          "kind": "call",
          "label": "ReconnectModal",
          "line": 22,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "renders reconnect modal component"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_23_script_include_23__linear",
          "kind": "statement",
          "label": "Load Blazor runtime",
          "line": 23,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "Includes _framework/blazor.web.js to bootstrap Blazor client"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file_",
          "kind": "call",
          "label": "Blazor client runtime (static file)",
          "line": 23,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "loads Blazor WebAssembly/Server client runtime"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition",
          "kind": "condition",
          "label": "preloader",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78,
          "detail": "if (preloader) {"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition",
          "kind": "condition",
          "label": "document.readyState === 'complete'",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78,
          "detail": "if (document.readyState === 'complete') {"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84,
          "detail": "} else {"
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__call_45_auth_js_static_file_",
          "kind": "call",
          "label": "auth.js (static file)",
          "line": 45,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "authentication helper script"
        },
        {
          "id": "method:boip8u:render-razor-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 49,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:boip8u:render-razor-markup__entry__method:boip8u:render-razor-markup__action_8_include_static_8__linear",
          "from": "method:boip8u:render-razor-markup__entry",
          "to": "method:boip8u:render-razor-markup__action_8_include_static_8__linear",
          "kind": "next",
          "line": 8,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:boip8u:render-razor-markup__action_8_include_static_8__linear__method:boip8u:render-razor-markup__action_12_render_component_12__linear",
          "from": "method:boip8u:render-razor-markup__action_8_include_static_8__linear",
          "to": "method:boip8u:render-razor-markup__action_12_render_component_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:boip8u:render-razor-markup__action_12_render_component_12__linear__call_method:boip8u:render-razor-markup__call_12_HeadOutlet",
          "from": "method:boip8u:render-razor-markup__action_12_render_component_12__linear",
          "to": "method:boip8u:render-razor-markup__call_12_HeadOutlet",
          "kind": "call",
          "label": "@rendermode=\"InteractiveAuto\"",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:boip8u:render-razor-markup__call_12_HeadOutlet__method:boip8u:render-razor-markup__action_21_render_component_21__linear",
          "from": "method:boip8u:render-razor-markup__call_12_HeadOutlet",
          "to": "method:boip8u:render-razor-markup__action_21_render_component_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:boip8u:render-razor-markup__action_21_render_component_21__linear__call_method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes",
          "from": "method:boip8u:render-razor-markup__action_21_render_component_21__linear",
          "to": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes",
          "kind": "call",
          "label": "@rendermode=\"InteractiveAuto\" (renders SPA routes)",
          "line": 21,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes__method:boip8u:render-razor-markup__action_22_render_component_22__linear",
          "from": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes",
          "to": "method:boip8u:render-razor-markup__action_22_render_component_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:boip8u:render-razor-markup__action_22_render_component_22__linear__call_method:boip8u:render-razor-markup__call_22_ReconnectModal",
          "from": "method:boip8u:render-razor-markup__action_22_render_component_22__linear",
          "to": "method:boip8u:render-razor-markup__call_22_ReconnectModal",
          "kind": "call",
          "label": "renders reconnect modal component",
          "line": 22,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:boip8u:render-razor-markup__call_22_ReconnectModal__method:boip8u:render-razor-markup__action_23_script_include_23__linear",
          "from": "method:boip8u:render-razor-markup__call_22_ReconnectModal",
          "to": "method:boip8u:render-razor-markup__action_23_script_include_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:boip8u:render-razor-markup__action_23_script_include_23__linear__call_method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file_",
          "from": "method:boip8u:render-razor-markup__action_23_script_include_23__linear",
          "to": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file_",
          "kind": "call",
          "label": "loads Blazor WebAssembly/Server client runtime",
          "line": 23,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file___method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition",
          "from": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file_",
          "to": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition__method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__true",
          "from": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition",
          "to": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition__method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__false",
          "from": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__condition",
          "to": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__true__method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "from": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__true",
          "to": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__false__method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "from": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__false",
          "to": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge__method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition",
          "from": "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
          "to": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition__method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__true",
          "from": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition",
          "to": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition__method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__false",
          "from": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__condition",
          "to": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__true__method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "from": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__true",
          "to": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__false__method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "from": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__false",
          "to": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge__method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition",
          "from": "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
          "to": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition",
          "kind": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition__method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__true",
          "from": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition",
          "to": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition__method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__false",
          "from": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__condition",
          "to": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__true__method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "from": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__true",
          "to": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__false__method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "from": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__false",
          "to": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge__call_method:boip8u:render-razor-markup__call_45_auth_js_static_file_",
          "from": "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge",
          "to": "method:boip8u:render-razor-markup__call_45_auth_js_static_file_",
          "kind": "call",
          "label": "authentication helper script",
          "line": 45,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:boip8u:render-razor-markup__call_45_auth_js_static_file___implicit_return",
          "from": "method:boip8u:render-razor-markup__call_45_auth_js_static_file_",
          "to": "method:boip8u:render-razor-markup__implicit_return",
          "kind": "return",
          "line": 49,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:boip8u:render-razor-markup__call_12_HeadOutlet__jump_unknown_HeadOutlet",
          "fromNodeId": "method:boip8u:render-razor-markup__call_12_HeadOutlet",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "HeadOutlet",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target HeadOutlet in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes__jump_NexusReader_UI_Shared_Routes_razor_NexusReader_UI_Shared_Routes",
          "fromNodeId": "method:boip8u:render-razor-markup__call_21_NexusReader_UI_Shared_Routes",
          "kind": "call-target",
          "targetPath": "NexusReader.UI.Shared/Routes.razor",
          "targetHint": "NexusReader.UI.Shared.Routes",
          "line": 21,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target NexusReader.UI.Shared.Routes in NexusReader.UI.Shared/Routes.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_22_ReconnectModal__jump_Components_ReconnectModal_razor_ReconnectModal",
          "fromNodeId": "method:boip8u:render-razor-markup__call_22_ReconnectModal",
          "kind": "call-target",
          "targetPath": "Components/ReconnectModal.razor",
          "targetHint": "ReconnectModal",
          "line": 22,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target ReconnectModal in Components/ReconnectModal.razor could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file___jump__framework_blazor_web_js_Blazor_client_runtime_static_file_",
          "fromNodeId": "method:boip8u:render-razor-markup__call_23_Blazor_client_runtime_static_file_",
          "kind": "call-target",
          "targetPath": "_framework/blazor.web.js",
          "targetHint": "Blazor client runtime (static file)",
          "line": 23,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target Blazor client runtime (static file) in _framework/blazor.web.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:boip8u:render-razor-markup__call_45_auth_js_static_file___jump__content_NexusReader_UI_Shared_js_auth_js_auth_js_static_file_",
          "fromNodeId": "method:boip8u:render-razor-markup__call_45_auth_js_static_file_",
          "kind": "call-target",
          "targetPath": "_content/NexusReader.UI.Shared/js/auth.js",
          "targetHint": "auth.js (static file)",
          "line": 45,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target auth.js (static file) in _content/NexusReader.UI.Shared/js/auth.js could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:boip8u:render-razor-markup__action_28_render_razor_markup_branch_28_0__merge",
        "method:boip8u:render-razor-markup__action_35_render_razor_markup_branch_35_1__merge",
        "method:boip8u:render-razor-markup__action_37_render_razor_markup_fallback_37_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 1,
        "end": 49
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 1,
          "summary": "Control-flow fragment extracted for method Render (razor markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:x1z3b8:hidepreloader__fragment",
      "ownerFileId": "file:qvoxmq:app-razor",
      "ownerSymbolId": "method:x1z3b8:hidepreloader",
      "ownerSymbolName": "hidePreloader",
      "entryNodeId": "method:x1z3b8:hidepreloader__entry",
      "exitNodeIds": [
        "method:x1z3b8:hidepreloader__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:x1z3b8:hidepreloader__entry",
          "kind": "entry",
          "label": "hidePreloader entry",
          "line": 26,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.99,
          "detail": "Hides the #app-preloader element visually then removes it from layout after a transition timeout."
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition",
          "kind": "condition",
          "label": "preloader element presence",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "if (preloader) { ... }"
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__true",
          "kind": "branch-true",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__false",
          "kind": "branch-false",
          "label": "proceed",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "kind": "statement",
          "label": "merge",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition",
          "kind": "condition",
          "label": "preloader",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78,
          "detail": "if (preloader) {"
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_29_dom_manipulation_29__linear",
          "kind": "statement",
          "label": "Trigger loaded state and schedule removal",
          "line": 29,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "preloader.classList.add('loaded') and setTimeout(() => preloader.style.display = 'none', 1000)"
        },
        {
          "id": "method:x1z3b8:hidepreloader__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 33,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:x1z3b8:hidepreloader__entry__method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition",
          "from": "method:x1z3b8:hidepreloader__entry",
          "to": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition__method:x1z3b8:hidepreloader__action_27_guard_clause_27__true",
          "from": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition",
          "to": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__true",
          "kind": "condition-true",
          "label": "skip",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition__method:x1z3b8:hidepreloader__action_27_guard_clause_27__false",
          "from": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__condition",
          "to": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__false",
          "kind": "condition-false",
          "label": "proceed",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__true__method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "from": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__true",
          "to": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__false__method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "from": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__false",
          "to": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge__method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition",
          "from": "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
          "to": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition__method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__true",
          "from": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition",
          "to": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition__method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__false",
          "from": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__condition",
          "to": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__true__method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "from": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__true",
          "to": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__false__method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "from": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__false",
          "to": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge__method:x1z3b8:hidepreloader__action_29_dom_manipulation_29__linear",
          "from": "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge",
          "to": "method:x1z3b8:hidepreloader__action_29_dom_manipulation_29__linear",
          "kind": "next",
          "line": 29,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:x1z3b8:hidepreloader__action_29_dom_manipulation_29__linear__implicit_return",
          "from": "method:x1z3b8:hidepreloader__action_29_dom_manipulation_29__linear",
          "to": "method:x1z3b8:hidepreloader__implicit_return",
          "kind": "return",
          "line": 33,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:x1z3b8:hidepreloader__action_27_guard_clause_27__merge",
        "method:x1z3b8:hidepreloader__action_28_hidepreloader_branch_28_0__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 26,
        "end": 33
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 26,
          "summary": "Control-flow fragment extracted for method hidePreloader.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:kjs6w7:iife-bootstrap-preloader-handlers__fragment",
      "ownerFileId": "file:qvoxmq:app-razor",
      "ownerSymbolId": "method:kjs6w7:iife-bootstrap-preloader-handlers",
      "ownerSymbolName": "IIFE — bootstrap preloader handlers",
      "entryNodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers__entry",
      "exitNodeIds": [
        "method:kjs6w7:iife-bootstrap-preloader-handlers__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__entry",
          "kind": "entry",
          "label": "IIFE — bootstrap preloader handlers entry",
          "line": 25,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.99,
          "detail": "Initializes preloader lifecycle: hides immediately if document is ready, otherwise waits for window load; also registers a fallback timeout to ensure the preloader is removed even if load does not fire."
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition",
          "kind": "condition",
          "label": "preloader",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78,
          "detail": "if (preloader) {"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition",
          "kind": "condition",
          "label": "document.readyState === 'complete'",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78,
          "detail": "if (document.readyState === 'complete') {"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__true",
          "kind": "branch-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__false",
          "kind": "branch-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition",
          "kind": "condition",
          "label": "document.readyState === 'complete'",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "If ready -> hidePreloader(); else -> window.addEventListener('load', hidePreloader)"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__true",
          "kind": "branch-true",
          "label": "call hidePreloader immediately",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__false",
          "kind": "branch-false",
          "label": "register load event",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader",
          "kind": "call",
          "label": "hidePreloader",
          "line": 36,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "none (direct invocation)"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84,
          "detail": "} else {"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_38_event_registration_38__linear",
          "kind": "statement",
          "label": "Register window 'load' listener",
          "line": 38,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "window.addEventListener('load', hidePreloader)"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_41_fallback_timeout_41__linear",
          "kind": "statement",
          "label": "Fallback hide after 3s",
          "line": 41,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7,
          "detail": "setTimeout(hidePreloader, 3000)"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader",
          "kind": "call",
          "label": "hidePreloader",
          "line": 42,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88,
          "detail": "none (fallback timeout)"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 43,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__entry__method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__entry",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__true",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__false",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__true__method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__true",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__false__method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__false",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__true",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__true",
          "kind": "condition-true",
          "label": "true",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__false",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__false",
          "kind": "condition-false",
          "label": "false",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__true__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__true",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__false__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__false",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.78
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__true",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__true",
          "kind": "condition-true",
          "label": "call hidePreloader immediately",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__false",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__false",
          "kind": "condition-false",
          "label": "register load event",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__true__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__true",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__false__method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__false",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge__call_method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader",
          "kind": "call",
          "label": "none (direct invocation)",
          "line": 36,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader__method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition",
          "kind": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__true",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition__method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__false",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__condition",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__true__method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__true",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__false__method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__false",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "kind": "next",
          "line": 37,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.84
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge__method:kjs6w7:iife-bootstrap-preloader-handlers__action_38_event_registration_38__linear",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_38_event_registration_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_38_event_registration_38__linear__method:kjs6w7:iife-bootstrap-preloader-handlers__action_41_fallback_timeout_41__linear",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_38_event_registration_38__linear",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_41_fallback_timeout_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.7
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_41_fallback_timeout_41__linear__call_method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__action_41_fallback_timeout_41__linear",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader",
          "kind": "call",
          "label": "none (fallback timeout)",
          "line": 42,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.88
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader__implicit_return",
          "from": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader",
          "to": "method:kjs6w7:iife-bootstrap-preloader-handlers__implicit_return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader__jump_NexusReader_Web_Components_App_razor_hidePreloader",
          "fromNodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_36_hidePreloader",
          "kind": "call-target",
          "targetNodeId": "method:x1z3b8:hidepreloader",
          "targetPath": "NexusReader.Web/Components/App.razor",
          "targetHint": "hidePreloader",
          "line": 36,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target hidePreloader resolved to NexusReader.Web/Components/App.razor.",
          "status": "resolved"
        },
        {
          "id": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader__jump_NexusReader_Web_Components_App_razor_hidePreloader",
          "fromNodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers__call_42_hidePreloader",
          "kind": "call-target",
          "targetNodeId": "method:x1z3b8:hidepreloader",
          "targetPath": "NexusReader.Web/Components/App.razor",
          "targetHint": "hidePreloader",
          "line": 42,
          "sourcePath": "NexusReader.Web/Components/App.razor",
          "reason": "Call target hidePreloader resolved to NexusReader.Web/Components/App.razor.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:kjs6w7:iife-bootstrap-preloader-handlers__action_28_iife_bootstrap_preloader_handlers_branch_28_0__merge",
        "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_iife_bootstrap_preloader_handlers_branch_35_1__merge",
        "method:kjs6w7:iife-bootstrap-preloader-handlers__action_35_branch_35__merge",
        "method:kjs6w7:iife-bootstrap-preloader-handlers__action_37_iife_bootstrap_preloader_handlers_fallback_37_2__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 25,
        "end": 43
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/App.razor",
          "line": 25,
          "summary": "Control-flow fragment extracted for method IIFE — bootstrap preloader handlers.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:fu1sr5:oninitialized__fragment",
      "ownerFileId": "file:1awldsb:error-razor",
      "ownerSymbolId": "method:fu1sr5:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:fu1sr5:oninitialized__entry",
      "exitNodeIds": [
        "method:fu1sr5:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:fu1sr5:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 5,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.99,
          "detail": "Component lifecycle hook called during initialization; currently contains a placeholder for logging the exception."
        },
        {
          "id": "method:fu1sr5:oninitialized__action_5_lifecycle_5__linear",
          "kind": "statement",
          "label": "override OnInitialized",
          "line": 5,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "protected override void OnInitialized() — lifecycle entrypoint for component initialization"
        },
        {
          "id": "method:fu1sr5:oninitialized__action_7_log_7__linear",
          "kind": "statement",
          "label": "placeholder to log exception",
          "line": 7,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "comment suggests logging the Exception using a logging service (no implementation)"
        },
        {
          "id": "method:fu1sr5:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 8,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:fu1sr5:oninitialized__entry__method:fu1sr5:oninitialized__action_5_lifecycle_5__linear",
          "from": "method:fu1sr5:oninitialized__entry",
          "to": "method:fu1sr5:oninitialized__action_5_lifecycle_5__linear",
          "kind": "next",
          "line": 5,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:fu1sr5:oninitialized__action_5_lifecycle_5__linear__method:fu1sr5:oninitialized__action_7_log_7__linear",
          "from": "method:fu1sr5:oninitialized__action_5_lifecycle_5__linear",
          "to": "method:fu1sr5:oninitialized__action_7_log_7__linear",
          "kind": "next",
          "line": 7,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:fu1sr5:oninitialized__action_7_log_7__linear__implicit_return",
          "from": "method:fu1sr5:oninitialized__action_7_log_7__linear",
          "to": "method:fu1sr5:oninitialized__implicit_return",
          "kind": "return",
          "line": 8,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 5,
        "end": 8
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "line": 5,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:u5zr3n:render-component-markup__fragment",
      "ownerFileId": "file:1awldsb:error-razor",
      "ownerSymbolId": "method:u5zr3n:render-component-markup",
      "ownerSymbolName": "Render (component markup)",
      "entryNodeId": "method:u5zr3n:render-component-markup__entry",
      "exitNodeIds": [
        "method:u5zr3n:render-component-markup__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:u5zr3n:render-component-markup__entry",
          "kind": "entry",
          "label": "Render (component markup) entry",
          "line": 11,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.99,
          "detail": "Renders a user-facing error message and conditionally shows expandable technical details when Exception is present."
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_11_render_11__linear",
          "kind": "statement",
          "label": "render generic error header",
          "line": 11,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "Outputs: <h3 class=\"text-danger\">An unexpected error occurred.</h3>"
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_12_render_12__linear",
          "kind": "statement",
          "label": "render generic guidance paragraph",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "Outputs guidance to reload or contact support"
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition",
          "kind": "condition",
          "label": "Exception != null",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78,
          "detail": "@if (Exception != null)"
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__condition",
          "kind": "condition",
          "label": "Exception != null",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "If Exception is not null, renders <details> with Exception.ToString() inside a <pre> block"
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__true",
          "kind": "branch-true",
          "label": "show details",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__false",
          "kind": "branch-false",
          "label": "skip details",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "kind": "statement",
          "label": "merge",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_17_render_17__linear",
          "kind": "statement",
          "label": "render exception details",
          "line": 17,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7,
          "detail": "Calls Exception.ToString() to produce textual technical details (framework call)"
        },
        {
          "id": "method:u5zr3n:render-component-markup__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:u5zr3n:render-component-markup__entry__method:u5zr3n:render-component-markup__action_11_render_11__linear",
          "from": "method:u5zr3n:render-component-markup__entry",
          "to": "method:u5zr3n:render-component-markup__action_11_render_11__linear",
          "kind": "next",
          "line": 11,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_11_render_11__linear__method:u5zr3n:render-component-markup__action_12_render_12__linear",
          "from": "method:u5zr3n:render-component-markup__action_11_render_11__linear",
          "to": "method:u5zr3n:render-component-markup__action_12_render_12__linear",
          "kind": "next",
          "line": 12,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_12_render_12__linear__method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition",
          "from": "method:u5zr3n:render-component-markup__action_12_render_12__linear",
          "to": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition__method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__true",
          "from": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition",
          "to": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition__method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__false",
          "from": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__condition",
          "to": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__true__method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "from": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__true",
          "to": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__false__method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "from": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__false",
          "to": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge__method:u5zr3n:render-component-markup__action_13_branch_13__condition",
          "from": "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
          "to": "method:u5zr3n:render-component-markup__action_13_branch_13__condition",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__condition__method:u5zr3n:render-component-markup__action_13_branch_13__true",
          "from": "method:u5zr3n:render-component-markup__action_13_branch_13__condition",
          "to": "method:u5zr3n:render-component-markup__action_13_branch_13__true",
          "kind": "condition-true",
          "label": "show details",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__condition__method:u5zr3n:render-component-markup__action_13_branch_13__false",
          "from": "method:u5zr3n:render-component-markup__action_13_branch_13__condition",
          "to": "method:u5zr3n:render-component-markup__action_13_branch_13__false",
          "kind": "condition-false",
          "label": "skip details",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__true__method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "from": "method:u5zr3n:render-component-markup__action_13_branch_13__true",
          "to": "method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__false__method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "from": "method:u5zr3n:render-component-markup__action_13_branch_13__false",
          "to": "method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "kind": "next",
          "line": 13,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_13_branch_13__merge__method:u5zr3n:render-component-markup__action_17_render_17__linear",
          "from": "method:u5zr3n:render-component-markup__action_13_branch_13__merge",
          "to": "method:u5zr3n:render-component-markup__action_17_render_17__linear",
          "kind": "next",
          "line": 17,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:u5zr3n:render-component-markup__action_17_render_17__linear__implicit_return",
          "from": "method:u5zr3n:render-component-markup__action_17_render_17__linear",
          "to": "method:u5zr3n:render-component-markup__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web/Components/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:u5zr3n:render-component-markup__action_13_render_component_markup_branch_13_0__merge",
        "method:u5zr3n:render-component-markup__action_13_branch_13__merge"
      ],
      "language": "unknown",
      "confidence": 0.98,
      "lineSpan": {
        "start": 11,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Error.razor",
          "line": 11,
          "summary": "Control-flow fragment extracted for method Render (component markup).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:76zo3r:httpcontext-cascadingparameter-property__fragment",
      "ownerFileId": "file:p5ean4:error-razor",
      "ownerSymbolId": "method:76zo3r:httpcontext-cascadingparameter-property",
      "ownerSymbolName": "HttpContext (CascadingParameter property)",
      "entryNodeId": "method:76zo3r:httpcontext-cascadingparameter-property__entry",
      "exitNodeIds": [
        "method:76zo3r:httpcontext-cascadingparameter-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:76zo3r:httpcontext-cascadingparameter-property__entry",
          "kind": "entry",
          "label": "HttpContext (CascadingParameter property) entry",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.99,
          "detail": "Receives the current HttpContext as a cascading parameter so the component can access TraceIdentifier when Activity is not available."
        },
        {
          "id": "method:76zo3r:httpcontext-cascadingparameter-property__action_28_injection_28__linear",
          "kind": "statement",
          "label": "CascadingParameter provided",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "[CascadingParameter] attribute marks this property as injected from the cascading context."
        },
        {
          "id": "method:76zo3r:httpcontext-cascadingparameter-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 29,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:76zo3r:httpcontext-cascadingparameter-property__entry__method:76zo3r:httpcontext-cascadingparameter-property__action_28_injection_28__linear",
          "from": "method:76zo3r:httpcontext-cascadingparameter-property__entry",
          "to": "method:76zo3r:httpcontext-cascadingparameter-property__action_28_injection_28__linear",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:76zo3r:httpcontext-cascadingparameter-property__action_28_injection_28__linear__implicit_return",
          "from": "method:76zo3r:httpcontext-cascadingparameter-property__action_28_injection_28__linear",
          "to": "method:76zo3r:httpcontext-cascadingparameter-property__implicit_return",
          "kind": "return",
          "line": 29,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 28,
        "end": 29
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 28,
          "summary": "Control-flow fragment extracted for method HttpContext (CascadingParameter property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1jr0xbp:requestid-backing-state__fragment",
      "ownerFileId": "file:p5ean4:error-razor",
      "ownerSymbolId": "method:1jr0xbp:requestid-backing-state",
      "ownerSymbolName": "RequestId (backing state)",
      "entryNodeId": "method:1jr0xbp:requestid-backing-state__entry",
      "exitNodeIds": [
        "method:1jr0xbp:requestid-backing-state__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1jr0xbp:requestid-backing-state__entry",
          "kind": "entry",
          "label": "RequestId (backing state) entry",
          "line": 31,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.99,
          "detail": "Holds the resolved request identifier used by the UI."
        },
        {
          "id": "method:1jr0xbp:requestid-backing-state__action_31_state_31__linear",
          "kind": "statement",
          "label": "Stores resolved request identifier",
          "line": 31,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "Assigned in OnInitialized from Activity.Current?.Id or HttpContext?.TraceIdentifier."
        },
        {
          "id": "method:1jr0xbp:requestid-backing-state__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 31,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1jr0xbp:requestid-backing-state__entry__method:1jr0xbp:requestid-backing-state__action_31_state_31__linear",
          "from": "method:1jr0xbp:requestid-backing-state__entry",
          "to": "method:1jr0xbp:requestid-backing-state__action_31_state_31__linear",
          "kind": "next",
          "line": 31,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1jr0xbp:requestid-backing-state__action_31_state_31__linear__implicit_return",
          "from": "method:1jr0xbp:requestid-backing-state__action_31_state_31__linear",
          "to": "method:1jr0xbp:requestid-backing-state__implicit_return",
          "kind": "return",
          "line": 31,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "unknown",
      "confidence": 0.76,
      "lineSpan": {
        "start": 31,
        "end": 31
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 31,
          "summary": "Control-flow fragment extracted for method RequestId (backing state).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:z2iy0h:showrequestid-computed-property__fragment",
      "ownerFileId": "file:p5ean4:error-razor",
      "ownerSymbolId": "method:z2iy0h:showrequestid-computed-property",
      "ownerSymbolName": "ShowRequestId (computed property)",
      "entryNodeId": "method:z2iy0h:showrequestid-computed-property__entry",
      "exitNodeIds": [
        "method:z2iy0h:showrequestid-computed-property__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:z2iy0h:showrequestid-computed-property__entry",
          "kind": "entry",
          "label": "ShowRequestId (computed property) entry",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.99,
          "detail": "Returns true when RequestId is non-empty so the UI can conditionally render the Request ID block."
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition",
          "kind": "condition",
          "label": "RequestId is not null or empty",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "Computed getter uses string.IsNullOrEmpty(RequestId) negated."
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__true",
          "kind": "branch-true",
          "label": "visible",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__false",
          "kind": "branch-false",
          "label": "hidden",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "kind": "statement",
          "label": "merge",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:z2iy0h:showrequestid-computed-property__entry__method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition",
          "from": "method:z2iy0h:showrequestid-computed-property__entry",
          "to": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition__method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__true",
          "from": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition",
          "to": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__true",
          "kind": "condition-true",
          "label": "visible",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition__method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__false",
          "from": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__condition",
          "to": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__false",
          "kind": "condition-false",
          "label": "hidden",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__true__method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "from": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__true",
          "to": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__false__method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "from": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__false",
          "to": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge__implicit_return",
          "from": "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge",
          "to": "method:z2iy0h:showrequestid-computed-property__implicit_return",
          "kind": "return",
          "line": 32,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:z2iy0h:showrequestid-computed-property__action_32_guard_clause_32__merge"
      ],
      "language": "unknown",
      "confidence": 0.85,
      "lineSpan": {
        "start": 32,
        "end": 32
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 32,
          "summary": "Control-flow fragment extracted for method ShowRequestId (computed property).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:7gn3l8:oninitialized__fragment",
      "ownerFileId": "file:p5ean4:error-razor",
      "ownerSymbolId": "method:7gn3l8:oninitialized",
      "ownerSymbolName": "OnInitialized",
      "entryNodeId": "method:7gn3l8:oninitialized__entry",
      "exitNodeIds": [
        "method:7gn3l8:oninitialized__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:7gn3l8:oninitialized__entry",
          "kind": "entry",
          "label": "OnInitialized entry",
          "line": 34,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.99,
          "detail": "Initializes component state by resolving the request identifier from Activity.Current or falling back to HttpContext.TraceIdentifier."
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_assignment_35__linear",
          "kind": "statement",
          "label": "Resolve RequestId with fallback",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; uses Activity.Current?.Id first, falls back to HttpContext?.TraceIdentifier."
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__condition",
          "kind": "condition",
          "label": "Activity.Current?.Id is null",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "Null-coalescing operator implements fallback path for RequestId resolution."
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__true",
          "kind": "branch-true",
          "label": "use Activity.Current?.Id",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__false",
          "kind": "branch-false",
          "label": "use HttpContext?.TraceIdentifier",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 36,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:7gn3l8:oninitialized__entry__method:7gn3l8:oninitialized__action_35_assignment_35__linear",
          "from": "method:7gn3l8:oninitialized__entry",
          "to": "method:7gn3l8:oninitialized__action_35_assignment_35__linear",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_assignment_35__linear__method:7gn3l8:oninitialized__action_35_fallback_35__condition",
          "from": "method:7gn3l8:oninitialized__action_35_assignment_35__linear",
          "to": "method:7gn3l8:oninitialized__action_35_fallback_35__condition",
          "kind": "fallback",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__condition__method:7gn3l8:oninitialized__action_35_fallback_35__true",
          "from": "method:7gn3l8:oninitialized__action_35_fallback_35__condition",
          "to": "method:7gn3l8:oninitialized__action_35_fallback_35__true",
          "kind": "condition-true",
          "label": "use Activity.Current?.Id",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__condition__method:7gn3l8:oninitialized__action_35_fallback_35__false",
          "from": "method:7gn3l8:oninitialized__action_35_fallback_35__condition",
          "to": "method:7gn3l8:oninitialized__action_35_fallback_35__false",
          "kind": "condition-false",
          "label": "use HttpContext?.TraceIdentifier",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__true__method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "from": "method:7gn3l8:oninitialized__action_35_fallback_35__true",
          "to": "method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__false__method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "from": "method:7gn3l8:oninitialized__action_35_fallback_35__false",
          "to": "method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:7gn3l8:oninitialized__action_35_fallback_35__merge__implicit_return",
          "from": "method:7gn3l8:oninitialized__action_35_fallback_35__merge",
          "to": "method:7gn3l8:oninitialized__implicit_return",
          "kind": "return",
          "line": 36,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:7gn3l8:oninitialized__action_35_fallback_35__merge"
      ],
      "language": "unknown",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 34,
        "end": 36
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 34,
          "summary": "Control-flow fragment extracted for method OnInitialized.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1oj8i7o:render-conditional-requestid-block__fragment",
      "ownerFileId": "file:p5ean4:error-razor",
      "ownerSymbolId": "method:1oj8i7o:render-conditional-requestid-block",
      "ownerSymbolName": "Render: conditional RequestId block",
      "entryNodeId": "method:1oj8i7o:render-conditional-requestid-block__entry",
      "exitNodeIds": [
        "method:1oj8i7o:render-conditional-requestid-block__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__entry",
          "kind": "entry",
          "label": "Render: conditional RequestId block entry",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.99,
          "detail": "Razor conditional block that renders the Request ID markup only when ShowRequestId is true."
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition",
          "kind": "condition",
          "label": "ShowRequestId",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78,
          "detail": "@if (ShowRequestId)"
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition",
          "kind": "condition",
          "label": "ShowRequestId is true",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7,
          "detail": "Razor @if block controls whether the Request ID paragraph is included in the output (lines 9-14)."
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__true",
          "kind": "branch-true",
          "label": "render <p> with Request ID",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__false",
          "kind": "branch-false",
          "label": "skip rendering Request ID",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 14,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__entry__method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition",
          "from": "method:1oj8i7o:render-conditional-requestid-block__entry",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition__method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__true",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition__method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__false",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__condition",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__true__method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__true",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__false__method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__false",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.78
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge__method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition__method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__true",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__true",
          "kind": "condition-true",
          "label": "render <p> with Request ID",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition__method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__false",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__condition",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__false",
          "kind": "condition-false",
          "label": "skip rendering Request ID",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__true__method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__true",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__false__method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__false",
          "to": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "kind": "next",
          "line": 9,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.7
        },
        {
          "id": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge__implicit_return",
          "from": "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge",
          "to": "method:1oj8i7o:render-conditional-requestid-block__implicit_return",
          "kind": "return",
          "line": 14,
          "sourcePath": "NexusReader.Web/Components/Pages/Error.razor",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1oj8i7o:render-conditional-requestid-block__action_9_render_conditional_requestid_block_branch_9_0__merge",
        "method:1oj8i7o:render-conditional-requestid-block__action_9_branch_9__merge"
      ],
      "language": "unknown",
      "confidence": 0.97,
      "lineSpan": {
        "start": 9,
        "end": 14
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Components/Pages/Error.razor",
          "line": 9,
          "summary": "Control-flow fragment extracted for method Render: conditional RequestId block.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1uibcuk:program-top-level__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:1uibcuk:program-top-level",
      "ownerSymbolName": "Program (top-level)",
      "entryNodeId": "method:1uibcuk:program-top-level__entry",
      "exitNodeIds": [
        "method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return",
        "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
        "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
        "method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return",
        "method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return",
        "method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return",
        "method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return",
        "method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return",
        "method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return",
        "method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return",
        "method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return",
        "method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return",
        "method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return",
        "method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return",
        "method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return",
        "method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return",
        "method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return",
        "method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return",
        "method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return",
        "method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return",
        "method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return",
        "method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return",
        "method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return",
        "method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return",
        "method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return",
        "method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return",
        "method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return",
        "method:1uibcuk:program-top-level__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1uibcuk:program-top-level__entry",
          "kind": "entry",
          "label": "Program (top-level) entry",
          "line": 29,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Configure DI, middleware, authentication/authorization, register endpoints and run the web host."
        },
        {
          "id": "method:1uibcuk:program-top-level__action_34_service_registration_34__linear",
          "kind": "statement",
          "label": "Add Razor/Blazor and server/client services",
          "line": 34,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "AddRazorComponents(), AddServerSideBlazor(), AddSignalR(), AddHttpContextAccessor()"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_47_service_registration_47__linear",
          "kind": "statement",
          "label": "Register scoped app services",
          "line": 47,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Multiple AddScoped registrations for platform, storage, theme, state, services (IPlatformService, INativeStorageService, etc.)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_58_httpclient_config_58__linear",
          "kind": "statement",
          "label": "Configure named HttpClient 'NexusAPI' with fallback",
          "line": 58,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Sets BaseAddress from configuration ApiBaseUrl or NavigationManager.BaseUri; branch on presence of ApiBaseUrl (lines 62-71)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition",
          "kind": "condition",
          "label": "!string.IsNullOrEmpty(apiBaseUrl)",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (!string.IsNullOrEmpty(apiBaseUrl))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "kind": "statement",
          "label": "merge",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__call_78_AddApplication",
          "kind": "call",
          "label": "AddApplication",
          "line": 78,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_79_AddInfrastructure",
          "kind": "call",
          "label": "AddInfrastructure",
          "line": 79,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "builder.Configuration"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_96_auth_registration_96__linear",
          "kind": "statement",
          "label": "Configure authentication and Google external login",
          "line": 96,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "AddAuthentication().AddGoogle(...)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_107_identity_registration_107__linear",
          "kind": "statement",
          "label": "Add Identity and EF stores",
          "line": 107,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "AddIdentityApiEndpoints<NexusUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<AppDbContext>()"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_111_config_111__linear",
          "kind": "statement",
          "label": "Configure application cookie with custom redirect for API requests",
          "line": 111,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "OnRedirectToLogin checks API request and returns 401 for API paths; otherwise redirect (lines 123-138)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_125_program_top_level_repository_read_125_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 125,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var isApiRequest = context.Request.Path.StartsWithSegments(\"/api\") ||"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_126_program_top_level_repository_read_126_3__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 126,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Request.Path.StartsWithSegments(\"/identity\") ||"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_127_program_top_level_repository_read_127_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 127,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Request.Headers[\"Accept\"].ToString().Contains(\"application/json\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition",
          "kind": "condition",
          "label": "isApiRequest",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (isApiRequest)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_131_program_top_level_repository_read_131_6__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 131,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Response.StatusCode = StatusCodes.Status401Unauthorized;"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_135_program_top_level_repository_read_135_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 135,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Response.Redirect(context.RedirectUri);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 137,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Task.CompletedTask;"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition",
          "kind": "condition",
          "label": "marker == null",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Throws InvalidOperationException if IInfrastructureMarker not registered (lines 166-173)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__true",
          "kind": "branch-true",
          "label": "throw",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "kind": "statement",
          "label": "merge",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition",
          "kind": "condition",
          "label": "marker == null",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (marker == null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition",
          "kind": "condition",
          "label": "Validates input or state",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "throw new InvalidOperationException(\"CRITICAL: Infrastructure layer was not registered. Ensure AddInfrastructure() is called in Program.cs.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__true",
          "kind": "branch-true",
          "label": "true",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__false",
          "kind": "branch-false",
          "label": "false",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "kind": "statement",
          "label": "merge",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "throw new InvalidOperationException(\"CRITICAL: Infrastructure layer was not registered. Ensure AddInfrastructure() is called in Program.cs.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_176_retry_loop_176__linear",
          "kind": "statement",
          "label": "Database migration + seed with retries & exponential backoff",
          "line": 176,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "for loop with maxRetries=5, calls MigrateAsync and DbInitializer.SeedAsync, catches Npgsql.NpgsqlException to retry with delayMs*=2 (lines 183-223)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_181_program_top_level_await_181_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 181,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "kind": "loop-entry",
          "label": "int i = 0; i < maxRetries; i++",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "for (int i = 0; i < maxRetries; i++)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body",
          "kind": "loop-body",
          "label": "for (int i = 0; i < maxRetries; i++)",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_188_program_top_level_try_188_15__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 188,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_log_190_16__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "if (logger.IsEnabled(LogLevel.Information))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition",
          "kind": "condition",
          "label": "logger.IsEnabled(LogLevel.Information)",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (logger.IsEnabled(LogLevel.Information))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__true",
          "kind": "branch-true",
          "label": "true",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__false",
          "kind": "branch-false",
          "label": "false",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_192_program_top_level_log_192_18__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 192,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"Próba połączenia z bazą danych (próba {Attempt}/{MaxRetries})...\", i + 1, maxRetries);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_195_program_top_level_await_195_19__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 195,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await dbContext.Database.MigrateAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_196_program_top_level_await_196_20__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 196,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await DbInitializer.SeedAsync(services);"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync",
          "kind": "call",
          "label": "DbInitializer.SeedAsync",
          "line": 196,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "services"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_log_198_21__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "if (logger.IsEnabled(LogLevel.Information))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition",
          "kind": "condition",
          "label": "logger.IsEnabled(LogLevel.Information)",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (logger.IsEnabled(LogLevel.Information))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__true",
          "kind": "branch-true",
          "label": "true",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__false",
          "kind": "branch-false",
          "label": "false",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "kind": "statement",
          "label": "merge",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_200_program_top_level_log_200_23__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 200,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"Baza danych zainicjowana pomyślnie.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_204_program_top_level_catch_204_24__catch",
          "kind": "catch",
          "label": "catch Npgsql.NpgsqlException ex",
          "line": 204,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "catch (Npgsql.NpgsqlException ex) when (i < maxRetries - 1)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_log_206_25__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "if (logger.IsEnabled(LogLevel.Warning))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition",
          "kind": "condition",
          "label": "logger.IsEnabled(LogLevel.Warning)",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (logger.IsEnabled(LogLevel.Warning))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__true",
          "kind": "branch-true",
          "label": "true",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__false",
          "kind": "branch-false",
          "label": "false",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "kind": "statement",
          "label": "merge",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_208_program_top_level_log_208_27__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 208,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogWarning(ex, \"Błąd połączenia z bazą danych. Ponowna próba za {Delay}ms...\", delayMs);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_211_program_top_level_await_211_28__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 211,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await Task.Delay(delayMs);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_214_program_top_level_catch_214_29__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 214,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_log_216_30__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "if (logger.IsEnabled(LogLevel.Critical))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition",
          "kind": "condition",
          "label": "logger.IsEnabled(LogLevel.Critical)",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (logger.IsEnabled(LogLevel.Critical))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__true",
          "kind": "branch-true",
          "label": "true",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__false",
          "kind": "branch-false",
          "label": "false",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "kind": "statement",
          "label": "merge",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_218_program_top_level_log_218_32__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 218,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogCritical(ex, \"Krytyczny błąd podczas inicjalizacji bazy danych.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
          "kind": "throw",
          "label": "Throws exception",
          "line": 220,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "throw;"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_225_routing_setup_225__linear",
          "kind": "statement",
          "label": "Configure middleware pipeline and routing/auth",
          "line": 225,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "UseExceptionHandler/UseHsts for non-dev, UseStatusCodePagesWithReExecute, UseHttpsRedirection, UseRouting, UseAuthentication, UseAuthorization, UseAntiforgery"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition",
          "kind": "condition",
          "label": "app.Environment.IsDevelopment()",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (app.Environment.IsDevelopment())"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__true",
          "kind": "branch-true",
          "label": "true",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__false",
          "kind": "branch-false",
          "label": "false",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "kind": "statement",
          "label": "merge",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition",
          "kind": "condition",
          "label": "Falls back to alternate path",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "else"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__true",
          "kind": "branch-true",
          "label": "fallback",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "kind": "statement",
          "label": "merge",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition",
          "kind": "condition",
          "label": "!app.Environment.IsDevelopment()",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (!app.Environment.IsDevelopment())"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__true",
          "kind": "branch-true",
          "label": "true",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__false",
          "kind": "branch-false",
          "label": "false",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "kind": "statement",
          "label": "merge",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_246_map_endpoints_246__linear",
          "kind": "statement",
          "label": "Register hubs, static assets, API routes and Razor components",
          "line": 246,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "MapHub SyncHub, MapGet/MapPost endpoints for API, MapRazorComponents and app.Run()"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_246_program_top_level_mapping_246_37__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 246,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapStaticAssets();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_247_program_top_level_mapping_247_38__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 247,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapHub<NexusReader.Infrastructure.RealTime.SyncHub>(\"/synchub\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_250_program_top_level_mapping_250_39__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 250,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/api/epub/{ebookId:guid}/{index:int}\", async (Guid ebookId, int index, IEpubReader epubService, ClaimsPrincipal user) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_252_program_top_level_repository_read_252_40__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_253_program_top_level_await_253_41__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await epubService.GetEpubContentAsync(ebookId, index, userId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "kind": "statement",
          "label": "merge",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return",
          "kind": "return",
          "label": "Returns result",
          "line": 258,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_261_program_top_level_mapping_261_44__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "var knowledgeApi = app.MapGroup(\"/api/knowledge\")"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_265_program_top_level_mapping_265_45__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 265,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_267_program_top_level_repository_read_267_46__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_268_program_top_level_await_268_47__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetKnowledgeAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "kind": "statement",
          "label": "merge",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return",
          "kind": "return",
          "label": "Returns result",
          "line": 270,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_273_program_top_level_mapping_273_50__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 273,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/graph\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_275_program_top_level_repository_read_275_51__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 275,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_276_program_top_level_await_276_52__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetGraphDataAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "kind": "statement",
          "label": "merge",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return",
          "kind": "return",
          "label": "Returns result",
          "line": 278,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_281_program_top_level_mapping_281_55__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 281,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/summary\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_283_program_top_level_repository_read_283_56__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 283,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_284_program_top_level_await_284_57__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetSummaryAndQuizAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "kind": "statement",
          "label": "merge",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return",
          "kind": "return",
          "label": "Returns result",
          "line": 286,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_289_program_top_level_mapping_289_60__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 289,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/map\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_291_program_top_level_repository_read_291_61__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 291,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_292_program_top_level_await_292_62__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetKnowledgeMapAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "kind": "statement",
          "label": "merge",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return",
          "kind": "return",
          "label": "Returns result",
          "line": 294,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_297_program_top_level_mapping_297_65__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 297,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/verify-groundedness\", async (GroundednessRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_299_program_top_level_repository_read_299_66__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 299,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_300_program_top_level_await_300_67__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.VerifyGroundednessAsync(request.Answer, request.Context, tenantId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "kind": "statement",
          "label": "merge",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return",
          "kind": "return",
          "label": "Returns result",
          "line": 302,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_305_program_top_level_mapping_305_70__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 305,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/search\", async (SemanticSearchRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_307_program_top_level_repository_read_307_71__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 307,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_308_program_top_level_await_308_72__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.SearchLibrarySemanticallyAsync(request.QueryText, tenantId, request.Limit);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "kind": "statement",
          "label": "merge",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return",
          "kind": "return",
          "label": "Returns result",
          "line": 310,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_313_program_top_level_mapping_313_75__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 313,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/ask\", async (AskQuestionRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_315_program_top_level_repository_read_315_76__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 315,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_316_program_top_level_await_316_77__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.AskQuestionAsync(request.Question, tenantId, request.EbookId, request.Limit);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "kind": "statement",
          "label": "merge",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return",
          "kind": "return",
          "label": "Returns result",
          "line": 318,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_321_program_top_level_mapping_321_80__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 321,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapDelete(\"/\", async (IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_323_program_top_level_await_323_81__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.ClearCacheAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "kind": "statement",
          "label": "merge",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return",
          "kind": "return",
          "label": "Returns result",
          "line": 327,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_330_program_top_level_mapping_330_84__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 330,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/api/library/ingest\", async ([FromBody] IngestEbookRequest request, ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_332_program_top_level_repository_read_332_85__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)) return Results.Unauthorized(",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(userId)) return Results.Unauthorized();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "kind": "statement",
          "label": "merge",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_349_program_top_level_await_349_87__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(command);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(new { Id = result.Value }",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(new { Id = result.Value });"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "kind": "statement",
          "label": "merge",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return",
          "kind": "return",
          "label": "Returns result",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.FirstOrDefault()?.Message ?? \"Ingestion failed\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_352_program_top_level_repository_read_352_89__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "return Results.BadRequest(result.Errors.FirstOrDefault()?.Message ?? \"Ingestion failed\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_355_program_top_level_mapping_355_91__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 355,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/api/library/books\", async (ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_357_program_top_level_repository_read_357_92__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)) return Results.Unauthorized(",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(userId)) return Results.Unauthorized();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "kind": "statement",
          "label": "merge",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_360_program_top_level_await_360_94__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(new GetMyEbooksQuery(userId));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "kind": "statement",
          "label": "merge",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return",
          "kind": "return",
          "label": "Returns result",
          "line": 364,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_367_program_top_level_mapping_367_97__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 367,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/api/StripeWebhook\", async ("
        },
        {
          "id": "method:1uibcuk:program-top-level__action_373_program_top_level_await_373_98__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 373,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_374_program_top_level_await_374_100__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var json = await new StreamReader(context.Request.Body).ReadToEndAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_374_program_top_level_repository_read_374_99__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var json = await new StreamReader(context.Request.Body).ReadToEndAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_377_program_top_level_try_377_101__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 377,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_381_program_top_level_repository_read_381_102__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 381,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Request.Headers[\"Stripe-Signature\"],"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch",
          "kind": "switch",
          "label": "stripeEvent.Type",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82,
          "detail": "switch (stripeEvent.Type)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge",
          "kind": "statement",
          "label": "merge",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__case_0",
          "kind": "case",
          "label": "case",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1uibcuk:program-top-level__action_389_program_top_level_await_389_104__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionSuccess(session?.CustomerEmail, session?.Metadata, userManager, dbContext);"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "HandleSubscriptionSuccess",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "session?.CustomerEmail, session?.Metadata, userManager, dbContext"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_394_program_top_level_await_394_105__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionSuccess(subscription?.Metadata[\"CustomerEmail\"], subscription?.Metadata, userManager, dbContext);"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "HandleSubscriptionSuccess",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "subscription?.Metadata[\"CustomerEmail\"], subscription?.Metadata, userManager, dbContext"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_399_program_top_level_await_399_106__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionCancellation(deletedSubscription?.Metadata[\"CustomerEmail\"], userManager, dbContext);"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation",
          "kind": "call",
          "label": "HandleSubscriptionCancellation",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "deletedSubscription?.Metadata[\"CustomerEmail\"], userManager, dbContext"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return",
          "kind": "return",
          "label": "Returns result",
          "line": 402,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Ok();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_404_program_top_level_catch_404_108__catch",
          "kind": "catch",
          "label": "catch StripeException e",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "catch (StripeException e)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return",
          "kind": "return",
          "label": "Returns result",
          "line": 406,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(e.Message);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(email)) return;"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "kind": "statement",
          "label": "merge",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_418_program_top_level_await_418_112__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_418_program_top_level_repository_read_418_111__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition",
          "kind": "condition",
          "label": "user != null",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (user != null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__true",
          "kind": "branch-true",
          "label": "true",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__false",
          "kind": "branch-false",
          "label": "false",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "kind": "statement",
          "label": "merge",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_422_program_top_level_await_422_114__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var plan = await dbContext.SubscriptionPlans.FirstOrDefaultAsync(p => p.PlanName == planName);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition",
          "kind": "condition",
          "label": "plan != null",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (plan != null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__true",
          "kind": "branch-true",
          "label": "true",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__false",
          "kind": "branch-false",
          "label": "false",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "kind": "statement",
          "label": "merge",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_430_program_top_level_await_430_116__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.UpdateAsync(user);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(email)) return;"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "kind": "statement",
          "label": "merge",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_441_program_top_level_await_441_119__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_441_program_top_level_repository_read_441_118__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition",
          "kind": "condition",
          "label": "user != null",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (user != null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__true",
          "kind": "branch-true",
          "label": "true",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__false",
          "kind": "branch-false",
          "label": "false",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "kind": "statement",
          "label": "merge",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_444_program_top_level_await_444_122__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var freePlan = await dbContext.SubscriptionPlans.FindAsync(SubscriptionPlan.FreeId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_444_program_top_level_repository_read_444_121__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var freePlan = await dbContext.SubscriptionPlans.FindAsync(SubscriptionPlan.FreeId);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_447_program_top_level_await_447_123__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.UpdateAsync(user);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_451_program_top_level_mapping_451_124__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGroup(\"/identity\").MapIdentityApi<NexusUser>();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_453_program_top_level_mapping_453_125__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 453,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/login/google\", (string? returnUrl) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return",
          "kind": "return",
          "label": "Returns result",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Challenge(properties, new[] { \"Google\" });"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_463_program_top_level_mapping_463_127__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 463,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/callback/google\", async ("
        },
        {
          "id": "method:1uibcuk:program-top-level__action_469_program_top_level_await_469_128__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var info = await signInManager.GetExternalLoginInfoAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition",
          "kind": "condition",
          "label": "info == null",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (info == null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__true",
          "kind": "branch-true",
          "label": "true",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__false",
          "kind": "branch-false",
          "label": "false",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "kind": "statement",
          "label": "merge",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_472_program_top_level_log_472_130__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 472,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogWarning(\"External login info from Google is null.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return",
          "kind": "return",
          "label": "Returns result",
          "line": 473,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=ExternalLoginFailed\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_476_program_top_level_await_476_132__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.Succeeded)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__true",
          "kind": "branch-true",
          "label": "true",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__false",
          "kind": "branch-false",
          "label": "false",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "kind": "statement",
          "label": "merge",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_479_program_top_level_repository_read_479_135__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "logger.LogInformation(\"User logged in via Google: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_479_program_top_level_log_479_134__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged in via Google: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return",
          "kind": "return",
          "label": "Returns result",
          "line": 480,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition",
          "kind": "condition",
          "label": "result.IsLockedOut",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.IsLockedOut)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__true",
          "kind": "branch-true",
          "label": "true",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__false",
          "kind": "branch-false",
          "label": "false",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "kind": "statement",
          "label": "merge",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_485_program_top_level_repository_read_485_139__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "logger.LogWarning(\"User account locked out during Google login: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_485_program_top_level_log_485_138__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogWarning(\"User account locked out during Google login: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return",
          "kind": "return",
          "label": "Returns result",
          "line": 486,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=LockedOut\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_490_program_top_level_repository_read_490_141__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var email = info.Principal.FindFirstValue(ClaimTypes.Email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition",
          "kind": "condition",
          "label": "email != null",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (email != null)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__true",
          "kind": "branch-true",
          "label": "true",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__false",
          "kind": "branch-false",
          "label": "false",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "kind": "statement",
          "label": "merge",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_494_program_top_level_await_494_143__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var createResult = await userManager.CreateAsync(user);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition",
          "kind": "condition",
          "label": "createResult.Succeeded",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (createResult.Succeeded)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__true",
          "kind": "branch-true",
          "label": "true",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__false",
          "kind": "branch-false",
          "label": "false",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "kind": "statement",
          "label": "merge",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_498_program_top_level_await_498_145__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.AddLoginAsync(user, info);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_499_program_top_level_await_499_146__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await signInManager.SignInAsync(user, isPersistent: false);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_500_program_top_level_log_500_147__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 500,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"New user provisioned via Google: {Email}\", email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return",
          "kind": "return",
          "label": "Returns result",
          "line": 501,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "kind": "loop-entry",
          "label": "var error in createResult.Errors",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "foreach (var error in createResult.Errors)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body",
          "kind": "loop-body",
          "label": "foreach (var error in createResult.Errors)",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_507_program_top_level_log_507_150__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 507,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogError(\"Google provisioning failed for {Email}: {Code} - {Description}\", email, error.Code, error.Description);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition",
          "kind": "condition",
          "label": "createResult.Errors.Any(e => e.Code == \"DuplicateEmail\" || e.Code == \"DuplicateUserName\")",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (createResult.Errors.Any(e => e.Code == \"DuplicateEmail\" || e.Code == \"DuplicateUserName\"))"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__true",
          "kind": "branch-true",
          "label": "true",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__false",
          "kind": "branch-false",
          "label": "false",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "kind": "statement",
          "label": "merge",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return",
          "kind": "return",
          "label": "Returns result",
          "line": 512,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=UserAlreadyExists\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_516_program_top_level_log_516_153__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 516,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogError(\"Google provisioning failed - unknown reason for email {Email}\", email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return",
          "kind": "return",
          "label": "Returns result",
          "line": 517,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=ProvisioningFailed\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_520_program_top_level_mapping_520_155__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 520,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/account/login-form\", async ("
        },
        {
          "id": "method:1uibcuk:program-top-level__action_528_program_top_level_await_528_156__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await signInManager.PasswordSignInAsync(email, password, rememberMe, lockoutOnFailure: true);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.Succeeded)"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__true",
          "kind": "branch-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__false",
          "kind": "branch-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "kind": "statement",
          "label": "merge",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_531_program_top_level_log_531_158__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 531,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged in: {Email}\", email);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return",
          "kind": "return",
          "label": "Returns result",
          "line": 532,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(returnUrl ?? \"/\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return",
          "kind": "return",
          "label": "Returns result",
          "line": 536,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect($\"/account/login?error={error}\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_539_program_top_level_mapping_539_161__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 539,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/account/logout-form\", async ("
        },
        {
          "id": "method:1uibcuk:program-top-level__action_543_program_top_level_await_543_162__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await signInManager.SignOutAsync();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_544_program_top_level_log_544_163__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged out via form.\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return",
          "kind": "return",
          "label": "Returns result",
          "line": 545,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login\");"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_548_program_top_level_mapping_548_165__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 548,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/profile\", async (ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_550_program_top_level_repository_read_550_166__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition",
          "kind": "condition",
          "label": "userId == null) return Results.Unauthorized(",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (userId == null) return Results.Unauthorized();"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "kind": "statement",
          "label": "merge",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_553_program_top_level_await_553_168__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(new GetUserProfileQuery(userId));"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_repository_read_554_170__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "if (result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition",
          "kind": "condition",
          "label": "result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "kind": "statement",
          "label": "merge",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return",
          "kind": "return",
          "label": "Returns result",
          "line": 556,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Ok(result.Value);"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_559_program_top_level_mapping_559_172__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 559,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapRazorComponents<App>()"
        },
        {
          "id": "method:1uibcuk:program-top-level__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 564,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1uibcuk:program-top-level__entry__method:1uibcuk:program-top-level__action_34_service_registration_34__linear",
          "from": "method:1uibcuk:program-top-level__entry",
          "to": "method:1uibcuk:program-top-level__action_34_service_registration_34__linear",
          "kind": "next",
          "line": 34,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_34_service_registration_34__linear__method:1uibcuk:program-top-level__action_47_service_registration_47__linear",
          "from": "method:1uibcuk:program-top-level__action_34_service_registration_34__linear",
          "to": "method:1uibcuk:program-top-level__action_47_service_registration_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_47_service_registration_47__linear__method:1uibcuk:program-top-level__action_58_httpclient_config_58__linear",
          "from": "method:1uibcuk:program-top-level__action_47_service_registration_47__linear",
          "to": "method:1uibcuk:program-top-level__action_58_httpclient_config_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_58_httpclient_config_58__linear__method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition",
          "from": "method:1uibcuk:program-top-level__action_58_httpclient_config_58__linear",
          "to": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition__method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__true",
          "from": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition",
          "to": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition__method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__false",
          "from": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__condition",
          "to": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__true__method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "from": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__true",
          "to": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__false__method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "from": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__false",
          "to": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "kind": "next",
          "line": 62,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge__method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition",
          "from": "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
          "to": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition",
          "kind": "fallback",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition__method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__true",
          "from": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition",
          "to": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition__method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__false",
          "from": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__condition",
          "to": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__true__method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "from": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__true",
          "to": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__false__method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "from": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__false",
          "to": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "kind": "next",
          "line": 66,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge__call_method:1uibcuk:program-top-level__call_78_AddApplication",
          "from": "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
          "to": "method:1uibcuk:program-top-level__call_78_AddApplication",
          "kind": "call",
          "label": "none",
          "line": 78,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_78_AddApplication__call_method:1uibcuk:program-top-level__call_79_AddInfrastructure",
          "from": "method:1uibcuk:program-top-level__call_78_AddApplication",
          "to": "method:1uibcuk:program-top-level__call_79_AddInfrastructure",
          "kind": "call",
          "label": "builder.Configuration",
          "line": 79,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_79_AddInfrastructure__method:1uibcuk:program-top-level__action_96_auth_registration_96__linear",
          "from": "method:1uibcuk:program-top-level__call_79_AddInfrastructure",
          "to": "method:1uibcuk:program-top-level__action_96_auth_registration_96__linear",
          "kind": "next",
          "line": 96,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_96_auth_registration_96__linear__method:1uibcuk:program-top-level__action_107_identity_registration_107__linear",
          "from": "method:1uibcuk:program-top-level__action_96_auth_registration_96__linear",
          "to": "method:1uibcuk:program-top-level__action_107_identity_registration_107__linear",
          "kind": "next",
          "line": 107,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_107_identity_registration_107__linear__method:1uibcuk:program-top-level__action_111_config_111__linear",
          "from": "method:1uibcuk:program-top-level__action_107_identity_registration_107__linear",
          "to": "method:1uibcuk:program-top-level__action_111_config_111__linear",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_111_config_111__linear__method:1uibcuk:program-top-level__action_125_program_top_level_repository_read_125_2__linear",
          "from": "method:1uibcuk:program-top-level__action_111_config_111__linear",
          "to": "method:1uibcuk:program-top-level__action_125_program_top_level_repository_read_125_2__linear",
          "kind": "next",
          "line": 125,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_125_program_top_level_repository_read_125_2__linear__method:1uibcuk:program-top-level__action_126_program_top_level_repository_read_126_3__linear",
          "from": "method:1uibcuk:program-top-level__action_125_program_top_level_repository_read_125_2__linear",
          "to": "method:1uibcuk:program-top-level__action_126_program_top_level_repository_read_126_3__linear",
          "kind": "next",
          "line": 126,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_126_program_top_level_repository_read_126_3__linear__method:1uibcuk:program-top-level__action_127_program_top_level_repository_read_127_4__linear",
          "from": "method:1uibcuk:program-top-level__action_126_program_top_level_repository_read_126_3__linear",
          "to": "method:1uibcuk:program-top-level__action_127_program_top_level_repository_read_127_4__linear",
          "kind": "next",
          "line": 127,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_127_program_top_level_repository_read_127_4__linear__method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition",
          "from": "method:1uibcuk:program-top-level__action_127_program_top_level_repository_read_127_4__linear",
          "to": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition",
          "kind": "next",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition__method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__true",
          "from": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition",
          "to": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition__method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__false",
          "from": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__condition",
          "to": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__true__method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "from": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__true",
          "to": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "kind": "next",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__false__method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "from": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__false",
          "to": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "kind": "next",
          "line": 129,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge__method:1uibcuk:program-top-level__action_131_program_top_level_repository_read_131_6__linear",
          "from": "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
          "to": "method:1uibcuk:program-top-level__action_131_program_top_level_repository_read_131_6__linear",
          "kind": "next",
          "line": 131,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_131_program_top_level_repository_read_131_6__linear__method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition",
          "from": "method:1uibcuk:program-top-level__action_131_program_top_level_repository_read_131_6__linear",
          "to": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition",
          "kind": "fallback",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition__method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__true",
          "from": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition",
          "to": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition__method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__false",
          "from": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__condition",
          "to": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__true__method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "from": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__true",
          "to": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__false__method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "from": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__false",
          "to": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "kind": "next",
          "line": 133,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge__method:1uibcuk:program-top-level__action_135_program_top_level_repository_read_135_8__linear",
          "from": "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
          "to": "method:1uibcuk:program-top-level__action_135_program_top_level_repository_read_135_8__linear",
          "kind": "next",
          "line": 135,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_135_program_top_level_repository_read_135_8__linear__method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return",
          "from": "method:1uibcuk:program-top-level__action_135_program_top_level_repository_read_135_8__linear",
          "to": "method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return",
          "kind": "return",
          "line": 137,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return__method:1uibcuk:program-top-level__action_166_guard_clause_166__condition",
          "from": "method:1uibcuk:program-top-level__action_137_program_top_level_return_137_9__return",
          "to": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition__method:1uibcuk:program-top-level__action_166_guard_clause_166__true",
          "from": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition",
          "to": "method:1uibcuk:program-top-level__action_166_guard_clause_166__true",
          "kind": "condition-true",
          "label": "throw",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition__method:1uibcuk:program-top-level__action_166_guard_clause_166__false",
          "from": "method:1uibcuk:program-top-level__action_166_guard_clause_166__condition",
          "to": "method:1uibcuk:program-top-level__action_166_guard_clause_166__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__true__method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "from": "method:1uibcuk:program-top-level__action_166_guard_clause_166__true",
          "to": "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__false__method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "from": "method:1uibcuk:program-top-level__action_166_guard_clause_166__false",
          "to": "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "kind": "next",
          "line": 166,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge__method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition",
          "from": "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
          "to": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition__method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__true",
          "from": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition",
          "to": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition__method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__false",
          "from": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__condition",
          "to": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__true__method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "from": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__true",
          "to": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__false__method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "from": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__false",
          "to": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "kind": "next",
          "line": 169,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge__method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition",
          "from": "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition",
          "kind": "next",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition__method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__true",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__true",
          "kind": "condition-true",
          "label": "true",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition__method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__false",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__condition",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__false",
          "kind": "condition-false",
          "label": "false",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__true__method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__true",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "kind": "next",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__false__method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__false",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "kind": "next",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge__method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
          "to": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
          "kind": "exception",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw__method:1uibcuk:program-top-level__action_176_retry_loop_176__linear",
          "from": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
          "to": "method:1uibcuk:program-top-level__action_176_retry_loop_176__linear",
          "kind": "next",
          "line": 176,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_176_retry_loop_176__linear__method:1uibcuk:program-top-level__action_181_program_top_level_await_181_13__await",
          "from": "method:1uibcuk:program-top-level__action_176_retry_loop_176__linear",
          "to": "method:1uibcuk:program-top-level__action_181_program_top_level_await_181_13__await",
          "kind": "next",
          "line": 181,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_181_program_top_level_await_181_13__await__method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "from": "method:1uibcuk:program-top-level__action_181_program_top_level_await_181_13__await",
          "to": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "kind": "next",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry__method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body",
          "from": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "to": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body",
          "kind": "loop-body",
          "label": "int i = 0; i < maxRetries; i++",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body__method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "from": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body",
          "to": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry__method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_exit",
          "from": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
          "to": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 186,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_exit__method:1uibcuk:program-top-level__action_188_program_top_level_try_188_15__try",
          "from": "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_exit",
          "to": "method:1uibcuk:program-top-level__action_188_program_top_level_try_188_15__try",
          "kind": "next",
          "line": 188,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_188_program_top_level_try_188_15__try__method:1uibcuk:program-top-level__action_190_program_top_level_log_190_16__linear",
          "from": "method:1uibcuk:program-top-level__action_188_program_top_level_try_188_15__try",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_log_190_16__linear",
          "kind": "next",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_log_190_16__linear__method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_log_190_16__linear",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition",
          "kind": "next",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition__method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__true",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__true",
          "kind": "condition-true",
          "label": "true",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition__method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__false",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__condition",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__false",
          "kind": "condition-false",
          "label": "false",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__true__method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__true",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "kind": "next",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__false__method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__false",
          "to": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "kind": "next",
          "line": 190,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge__method:1uibcuk:program-top-level__action_192_program_top_level_log_192_18__linear",
          "from": "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
          "to": "method:1uibcuk:program-top-level__action_192_program_top_level_log_192_18__linear",
          "kind": "next",
          "line": 192,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_192_program_top_level_log_192_18__linear__method:1uibcuk:program-top-level__action_195_program_top_level_await_195_19__await",
          "from": "method:1uibcuk:program-top-level__action_192_program_top_level_log_192_18__linear",
          "to": "method:1uibcuk:program-top-level__action_195_program_top_level_await_195_19__await",
          "kind": "next",
          "line": 195,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_195_program_top_level_await_195_19__await__method:1uibcuk:program-top-level__action_196_program_top_level_await_196_20__await",
          "from": "method:1uibcuk:program-top-level__action_195_program_top_level_await_195_19__await",
          "to": "method:1uibcuk:program-top-level__action_196_program_top_level_await_196_20__await",
          "kind": "next",
          "line": 196,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_196_program_top_level_await_196_20__await__call_method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync",
          "from": "method:1uibcuk:program-top-level__action_196_program_top_level_await_196_20__await",
          "to": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync",
          "kind": "call",
          "label": "services",
          "line": 196,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync__method:1uibcuk:program-top-level__action_198_program_top_level_log_198_21__linear",
          "from": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_log_198_21__linear",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_log_198_21__linear__method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_log_198_21__linear",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition__method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__true",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__true",
          "kind": "condition-true",
          "label": "true",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition__method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__false",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__condition",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__false",
          "kind": "condition-false",
          "label": "false",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__true__method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__true",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__false__method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__false",
          "to": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "kind": "next",
          "line": 198,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge__method:1uibcuk:program-top-level__action_200_program_top_level_log_200_23__linear",
          "from": "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
          "to": "method:1uibcuk:program-top-level__action_200_program_top_level_log_200_23__linear",
          "kind": "next",
          "line": 200,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_200_program_top_level_log_200_23__linear__method:1uibcuk:program-top-level__action_204_program_top_level_catch_204_24__catch",
          "from": "method:1uibcuk:program-top-level__action_200_program_top_level_log_200_23__linear",
          "to": "method:1uibcuk:program-top-level__action_204_program_top_level_catch_204_24__catch",
          "kind": "exception",
          "line": 204,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_204_program_top_level_catch_204_24__catch__method:1uibcuk:program-top-level__action_206_program_top_level_log_206_25__linear",
          "from": "method:1uibcuk:program-top-level__action_204_program_top_level_catch_204_24__catch",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_log_206_25__linear",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_log_206_25__linear__method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_log_206_25__linear",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition__method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__true",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__true",
          "kind": "condition-true",
          "label": "true",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition__method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__false",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__condition",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__false",
          "kind": "condition-false",
          "label": "false",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__true__method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__true",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__false__method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__false",
          "to": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "kind": "next",
          "line": 206,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge__method:1uibcuk:program-top-level__action_208_program_top_level_log_208_27__linear",
          "from": "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
          "to": "method:1uibcuk:program-top-level__action_208_program_top_level_log_208_27__linear",
          "kind": "next",
          "line": 208,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_208_program_top_level_log_208_27__linear__method:1uibcuk:program-top-level__action_211_program_top_level_await_211_28__await",
          "from": "method:1uibcuk:program-top-level__action_208_program_top_level_log_208_27__linear",
          "to": "method:1uibcuk:program-top-level__action_211_program_top_level_await_211_28__await",
          "kind": "next",
          "line": 211,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_211_program_top_level_await_211_28__await__method:1uibcuk:program-top-level__action_214_program_top_level_catch_214_29__catch",
          "from": "method:1uibcuk:program-top-level__action_211_program_top_level_await_211_28__await",
          "to": "method:1uibcuk:program-top-level__action_214_program_top_level_catch_214_29__catch",
          "kind": "exception",
          "line": 214,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_214_program_top_level_catch_214_29__catch__method:1uibcuk:program-top-level__action_216_program_top_level_log_216_30__linear",
          "from": "method:1uibcuk:program-top-level__action_214_program_top_level_catch_214_29__catch",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_log_216_30__linear",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_log_216_30__linear__method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_log_216_30__linear",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition__method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__true",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__true",
          "kind": "condition-true",
          "label": "true",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition__method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__false",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__condition",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__false",
          "kind": "condition-false",
          "label": "false",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__true__method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__true",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__false__method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__false",
          "to": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "kind": "next",
          "line": 216,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge__method:1uibcuk:program-top-level__action_218_program_top_level_log_218_32__linear",
          "from": "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
          "to": "method:1uibcuk:program-top-level__action_218_program_top_level_log_218_32__linear",
          "kind": "next",
          "line": 218,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_218_program_top_level_log_218_32__linear__method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
          "from": "method:1uibcuk:program-top-level__action_218_program_top_level_log_218_32__linear",
          "to": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
          "kind": "exception",
          "line": 220,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw__method:1uibcuk:program-top-level__action_225_routing_setup_225__linear",
          "from": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
          "to": "method:1uibcuk:program-top-level__action_225_routing_setup_225__linear",
          "kind": "next",
          "line": 225,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_225_routing_setup_225__linear__method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition",
          "from": "method:1uibcuk:program-top-level__action_225_routing_setup_225__linear",
          "to": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition__method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__true",
          "from": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition",
          "to": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__true",
          "kind": "condition-true",
          "label": "true",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition__method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__false",
          "from": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__condition",
          "to": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__false",
          "kind": "condition-false",
          "label": "false",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__true__method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "from": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__true",
          "to": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__false__method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "from": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__false",
          "to": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "kind": "next",
          "line": 226,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge__method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition",
          "from": "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
          "to": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition",
          "kind": "fallback",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition__method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__true",
          "from": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition",
          "to": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__true",
          "kind": "condition-true",
          "label": "fallback",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition__method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__false",
          "from": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__condition",
          "to": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__true__method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "from": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__true",
          "to": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "kind": "next",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__false__method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "from": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__false",
          "to": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "kind": "next",
          "line": 230,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge__method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition",
          "from": "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
          "to": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition",
          "kind": "next",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition__method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__true",
          "from": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition",
          "to": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__true",
          "kind": "condition-true",
          "label": "true",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition__method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__false",
          "from": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__condition",
          "to": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__false",
          "kind": "condition-false",
          "label": "false",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__true__method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "from": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__true",
          "to": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "kind": "next",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__false__method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "from": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__false",
          "to": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "kind": "next",
          "line": 237,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge__method:1uibcuk:program-top-level__action_246_map_endpoints_246__linear",
          "from": "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
          "to": "method:1uibcuk:program-top-level__action_246_map_endpoints_246__linear",
          "kind": "next",
          "line": 246,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_246_map_endpoints_246__linear__method:1uibcuk:program-top-level__action_246_program_top_level_mapping_246_37__linear",
          "from": "method:1uibcuk:program-top-level__action_246_map_endpoints_246__linear",
          "to": "method:1uibcuk:program-top-level__action_246_program_top_level_mapping_246_37__linear",
          "kind": "next",
          "line": 246,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_246_program_top_level_mapping_246_37__linear__method:1uibcuk:program-top-level__action_247_program_top_level_mapping_247_38__linear",
          "from": "method:1uibcuk:program-top-level__action_246_program_top_level_mapping_246_37__linear",
          "to": "method:1uibcuk:program-top-level__action_247_program_top_level_mapping_247_38__linear",
          "kind": "next",
          "line": 247,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_247_program_top_level_mapping_247_38__linear__method:1uibcuk:program-top-level__action_250_program_top_level_mapping_250_39__linear",
          "from": "method:1uibcuk:program-top-level__action_247_program_top_level_mapping_247_38__linear",
          "to": "method:1uibcuk:program-top-level__action_250_program_top_level_mapping_250_39__linear",
          "kind": "next",
          "line": 250,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_250_program_top_level_mapping_250_39__linear__method:1uibcuk:program-top-level__action_252_program_top_level_repository_read_252_40__linear",
          "from": "method:1uibcuk:program-top-level__action_250_program_top_level_mapping_250_39__linear",
          "to": "method:1uibcuk:program-top-level__action_252_program_top_level_repository_read_252_40__linear",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_252_program_top_level_repository_read_252_40__linear__method:1uibcuk:program-top-level__action_253_program_top_level_await_253_41__await",
          "from": "method:1uibcuk:program-top-level__action_252_program_top_level_repository_read_252_40__linear",
          "to": "method:1uibcuk:program-top-level__action_253_program_top_level_await_253_41__await",
          "kind": "next",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_253_program_top_level_await_253_41__await__method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition",
          "from": "method:1uibcuk:program-top-level__action_253_program_top_level_await_253_41__await",
          "to": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition__method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__true",
          "from": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition",
          "to": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition__method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__false",
          "from": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__condition",
          "to": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__true__method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "from": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__true",
          "to": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__false__method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "from": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__false",
          "to": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge__method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return",
          "from": "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
          "to": "method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return",
          "kind": "return",
          "line": 258,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return__method:1uibcuk:program-top-level__action_261_program_top_level_mapping_261_44__linear",
          "from": "method:1uibcuk:program-top-level__action_258_program_top_level_return_258_43__return",
          "to": "method:1uibcuk:program-top-level__action_261_program_top_level_mapping_261_44__linear",
          "kind": "next",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_261_program_top_level_mapping_261_44__linear__method:1uibcuk:program-top-level__action_265_program_top_level_mapping_265_45__linear",
          "from": "method:1uibcuk:program-top-level__action_261_program_top_level_mapping_261_44__linear",
          "to": "method:1uibcuk:program-top-level__action_265_program_top_level_mapping_265_45__linear",
          "kind": "next",
          "line": 265,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_265_program_top_level_mapping_265_45__linear__method:1uibcuk:program-top-level__action_267_program_top_level_repository_read_267_46__linear",
          "from": "method:1uibcuk:program-top-level__action_265_program_top_level_mapping_265_45__linear",
          "to": "method:1uibcuk:program-top-level__action_267_program_top_level_repository_read_267_46__linear",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_267_program_top_level_repository_read_267_46__linear__method:1uibcuk:program-top-level__action_268_program_top_level_await_268_47__await",
          "from": "method:1uibcuk:program-top-level__action_267_program_top_level_repository_read_267_46__linear",
          "to": "method:1uibcuk:program-top-level__action_268_program_top_level_await_268_47__await",
          "kind": "next",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_268_program_top_level_await_268_47__await__method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition",
          "from": "method:1uibcuk:program-top-level__action_268_program_top_level_await_268_47__await",
          "to": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition__method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__true",
          "from": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition",
          "to": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition__method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__false",
          "from": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__condition",
          "to": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__true__method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "from": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__true",
          "to": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__false__method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "from": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__false",
          "to": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge__method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return",
          "from": "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
          "to": "method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return",
          "kind": "return",
          "line": 270,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return__method:1uibcuk:program-top-level__action_273_program_top_level_mapping_273_50__linear",
          "from": "method:1uibcuk:program-top-level__action_270_program_top_level_return_270_49__return",
          "to": "method:1uibcuk:program-top-level__action_273_program_top_level_mapping_273_50__linear",
          "kind": "next",
          "line": 273,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_273_program_top_level_mapping_273_50__linear__method:1uibcuk:program-top-level__action_275_program_top_level_repository_read_275_51__linear",
          "from": "method:1uibcuk:program-top-level__action_273_program_top_level_mapping_273_50__linear",
          "to": "method:1uibcuk:program-top-level__action_275_program_top_level_repository_read_275_51__linear",
          "kind": "next",
          "line": 275,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_275_program_top_level_repository_read_275_51__linear__method:1uibcuk:program-top-level__action_276_program_top_level_await_276_52__await",
          "from": "method:1uibcuk:program-top-level__action_275_program_top_level_repository_read_275_51__linear",
          "to": "method:1uibcuk:program-top-level__action_276_program_top_level_await_276_52__await",
          "kind": "next",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_276_program_top_level_await_276_52__await__method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition",
          "from": "method:1uibcuk:program-top-level__action_276_program_top_level_await_276_52__await",
          "to": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition__method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__true",
          "from": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition",
          "to": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition__method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__false",
          "from": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__condition",
          "to": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__true__method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "from": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__true",
          "to": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__false__method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "from": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__false",
          "to": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge__method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return",
          "from": "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
          "to": "method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return",
          "kind": "return",
          "line": 278,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return__method:1uibcuk:program-top-level__action_281_program_top_level_mapping_281_55__linear",
          "from": "method:1uibcuk:program-top-level__action_278_program_top_level_return_278_54__return",
          "to": "method:1uibcuk:program-top-level__action_281_program_top_level_mapping_281_55__linear",
          "kind": "next",
          "line": 281,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_281_program_top_level_mapping_281_55__linear__method:1uibcuk:program-top-level__action_283_program_top_level_repository_read_283_56__linear",
          "from": "method:1uibcuk:program-top-level__action_281_program_top_level_mapping_281_55__linear",
          "to": "method:1uibcuk:program-top-level__action_283_program_top_level_repository_read_283_56__linear",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_283_program_top_level_repository_read_283_56__linear__method:1uibcuk:program-top-level__action_284_program_top_level_await_284_57__await",
          "from": "method:1uibcuk:program-top-level__action_283_program_top_level_repository_read_283_56__linear",
          "to": "method:1uibcuk:program-top-level__action_284_program_top_level_await_284_57__await",
          "kind": "next",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_284_program_top_level_await_284_57__await__method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition",
          "from": "method:1uibcuk:program-top-level__action_284_program_top_level_await_284_57__await",
          "to": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition__method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__true",
          "from": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition",
          "to": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition__method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__false",
          "from": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__condition",
          "to": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__true__method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "from": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__true",
          "to": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__false__method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "from": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__false",
          "to": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge__method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return",
          "from": "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
          "to": "method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return",
          "kind": "return",
          "line": 286,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return__method:1uibcuk:program-top-level__action_289_program_top_level_mapping_289_60__linear",
          "from": "method:1uibcuk:program-top-level__action_286_program_top_level_return_286_59__return",
          "to": "method:1uibcuk:program-top-level__action_289_program_top_level_mapping_289_60__linear",
          "kind": "next",
          "line": 289,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_289_program_top_level_mapping_289_60__linear__method:1uibcuk:program-top-level__action_291_program_top_level_repository_read_291_61__linear",
          "from": "method:1uibcuk:program-top-level__action_289_program_top_level_mapping_289_60__linear",
          "to": "method:1uibcuk:program-top-level__action_291_program_top_level_repository_read_291_61__linear",
          "kind": "next",
          "line": 291,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_291_program_top_level_repository_read_291_61__linear__method:1uibcuk:program-top-level__action_292_program_top_level_await_292_62__await",
          "from": "method:1uibcuk:program-top-level__action_291_program_top_level_repository_read_291_61__linear",
          "to": "method:1uibcuk:program-top-level__action_292_program_top_level_await_292_62__await",
          "kind": "next",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_292_program_top_level_await_292_62__await__method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition",
          "from": "method:1uibcuk:program-top-level__action_292_program_top_level_await_292_62__await",
          "to": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition__method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__true",
          "from": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition",
          "to": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition__method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__false",
          "from": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__condition",
          "to": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__true__method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "from": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__true",
          "to": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__false__method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "from": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__false",
          "to": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge__method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return",
          "from": "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
          "to": "method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return",
          "kind": "return",
          "line": 294,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return__method:1uibcuk:program-top-level__action_297_program_top_level_mapping_297_65__linear",
          "from": "method:1uibcuk:program-top-level__action_294_program_top_level_return_294_64__return",
          "to": "method:1uibcuk:program-top-level__action_297_program_top_level_mapping_297_65__linear",
          "kind": "next",
          "line": 297,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_297_program_top_level_mapping_297_65__linear__method:1uibcuk:program-top-level__action_299_program_top_level_repository_read_299_66__linear",
          "from": "method:1uibcuk:program-top-level__action_297_program_top_level_mapping_297_65__linear",
          "to": "method:1uibcuk:program-top-level__action_299_program_top_level_repository_read_299_66__linear",
          "kind": "next",
          "line": 299,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_299_program_top_level_repository_read_299_66__linear__method:1uibcuk:program-top-level__action_300_program_top_level_await_300_67__await",
          "from": "method:1uibcuk:program-top-level__action_299_program_top_level_repository_read_299_66__linear",
          "to": "method:1uibcuk:program-top-level__action_300_program_top_level_await_300_67__await",
          "kind": "next",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_300_program_top_level_await_300_67__await__method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition",
          "from": "method:1uibcuk:program-top-level__action_300_program_top_level_await_300_67__await",
          "to": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition__method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__true",
          "from": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition",
          "to": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition__method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__false",
          "from": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__condition",
          "to": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__true__method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "from": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__true",
          "to": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__false__method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "from": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__false",
          "to": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge__method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return",
          "from": "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
          "to": "method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return",
          "kind": "return",
          "line": 302,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return__method:1uibcuk:program-top-level__action_305_program_top_level_mapping_305_70__linear",
          "from": "method:1uibcuk:program-top-level__action_302_program_top_level_return_302_69__return",
          "to": "method:1uibcuk:program-top-level__action_305_program_top_level_mapping_305_70__linear",
          "kind": "next",
          "line": 305,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_305_program_top_level_mapping_305_70__linear__method:1uibcuk:program-top-level__action_307_program_top_level_repository_read_307_71__linear",
          "from": "method:1uibcuk:program-top-level__action_305_program_top_level_mapping_305_70__linear",
          "to": "method:1uibcuk:program-top-level__action_307_program_top_level_repository_read_307_71__linear",
          "kind": "next",
          "line": 307,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_307_program_top_level_repository_read_307_71__linear__method:1uibcuk:program-top-level__action_308_program_top_level_await_308_72__await",
          "from": "method:1uibcuk:program-top-level__action_307_program_top_level_repository_read_307_71__linear",
          "to": "method:1uibcuk:program-top-level__action_308_program_top_level_await_308_72__await",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_308_program_top_level_await_308_72__await__method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition",
          "from": "method:1uibcuk:program-top-level__action_308_program_top_level_await_308_72__await",
          "to": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition__method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__true",
          "from": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition",
          "to": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition__method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__false",
          "from": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__condition",
          "to": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__true__method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "from": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__true",
          "to": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__false__method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "from": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__false",
          "to": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge__method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return",
          "from": "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
          "to": "method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return",
          "kind": "return",
          "line": 310,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return__method:1uibcuk:program-top-level__action_313_program_top_level_mapping_313_75__linear",
          "from": "method:1uibcuk:program-top-level__action_310_program_top_level_return_310_74__return",
          "to": "method:1uibcuk:program-top-level__action_313_program_top_level_mapping_313_75__linear",
          "kind": "next",
          "line": 313,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_313_program_top_level_mapping_313_75__linear__method:1uibcuk:program-top-level__action_315_program_top_level_repository_read_315_76__linear",
          "from": "method:1uibcuk:program-top-level__action_313_program_top_level_mapping_313_75__linear",
          "to": "method:1uibcuk:program-top-level__action_315_program_top_level_repository_read_315_76__linear",
          "kind": "next",
          "line": 315,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_315_program_top_level_repository_read_315_76__linear__method:1uibcuk:program-top-level__action_316_program_top_level_await_316_77__await",
          "from": "method:1uibcuk:program-top-level__action_315_program_top_level_repository_read_315_76__linear",
          "to": "method:1uibcuk:program-top-level__action_316_program_top_level_await_316_77__await",
          "kind": "next",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_316_program_top_level_await_316_77__await__method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition",
          "from": "method:1uibcuk:program-top-level__action_316_program_top_level_await_316_77__await",
          "to": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition__method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__true",
          "from": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition",
          "to": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition__method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__false",
          "from": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__condition",
          "to": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__true__method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "from": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__true",
          "to": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__false__method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "from": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__false",
          "to": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge__method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return",
          "from": "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
          "to": "method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return",
          "kind": "return",
          "line": 318,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return__method:1uibcuk:program-top-level__action_321_program_top_level_mapping_321_80__linear",
          "from": "method:1uibcuk:program-top-level__action_318_program_top_level_return_318_79__return",
          "to": "method:1uibcuk:program-top-level__action_321_program_top_level_mapping_321_80__linear",
          "kind": "next",
          "line": 321,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_321_program_top_level_mapping_321_80__linear__method:1uibcuk:program-top-level__action_323_program_top_level_await_323_81__await",
          "from": "method:1uibcuk:program-top-level__action_321_program_top_level_mapping_321_80__linear",
          "to": "method:1uibcuk:program-top-level__action_323_program_top_level_await_323_81__await",
          "kind": "next",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_323_program_top_level_await_323_81__await__method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition",
          "from": "method:1uibcuk:program-top-level__action_323_program_top_level_await_323_81__await",
          "to": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition__method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__true",
          "from": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition",
          "to": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition__method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__false",
          "from": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__condition",
          "to": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__true__method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "from": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__true",
          "to": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__false__method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "from": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__false",
          "to": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge__method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return",
          "from": "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
          "to": "method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return",
          "kind": "return",
          "line": 327,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return__method:1uibcuk:program-top-level__action_330_program_top_level_mapping_330_84__linear",
          "from": "method:1uibcuk:program-top-level__action_327_program_top_level_return_327_83__return",
          "to": "method:1uibcuk:program-top-level__action_330_program_top_level_mapping_330_84__linear",
          "kind": "next",
          "line": 330,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_330_program_top_level_mapping_330_84__linear__method:1uibcuk:program-top-level__action_332_program_top_level_repository_read_332_85__linear",
          "from": "method:1uibcuk:program-top-level__action_330_program_top_level_mapping_330_84__linear",
          "to": "method:1uibcuk:program-top-level__action_332_program_top_level_repository_read_332_85__linear",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_332_program_top_level_repository_read_332_85__linear__method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition",
          "from": "method:1uibcuk:program-top-level__action_332_program_top_level_repository_read_332_85__linear",
          "to": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition__method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__true",
          "from": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition",
          "to": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition__method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__false",
          "from": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__condition",
          "to": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__true__method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "from": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__true",
          "to": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__false__method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "from": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__false",
          "to": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge__method:1uibcuk:program-top-level__action_349_program_top_level_await_349_87__await",
          "from": "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
          "to": "method:1uibcuk:program-top-level__action_349_program_top_level_await_349_87__await",
          "kind": "next",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_349_program_top_level_await_349_87__await__method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition",
          "from": "method:1uibcuk:program-top-level__action_349_program_top_level_await_349_87__await",
          "to": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition__method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__true",
          "from": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition",
          "to": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition__method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__false",
          "from": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__condition",
          "to": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__true__method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "from": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__true",
          "to": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__false__method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "from": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__false",
          "to": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge__method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return",
          "from": "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
          "to": "method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return",
          "kind": "return",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return__method:1uibcuk:program-top-level__action_352_program_top_level_repository_read_352_89__linear",
          "from": "method:1uibcuk:program-top-level__action_352_program_top_level_return_352_90__return",
          "to": "method:1uibcuk:program-top-level__action_352_program_top_level_repository_read_352_89__linear",
          "kind": "next",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_352_program_top_level_repository_read_352_89__linear__method:1uibcuk:program-top-level__action_355_program_top_level_mapping_355_91__linear",
          "from": "method:1uibcuk:program-top-level__action_352_program_top_level_repository_read_352_89__linear",
          "to": "method:1uibcuk:program-top-level__action_355_program_top_level_mapping_355_91__linear",
          "kind": "next",
          "line": 355,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_355_program_top_level_mapping_355_91__linear__method:1uibcuk:program-top-level__action_357_program_top_level_repository_read_357_92__linear",
          "from": "method:1uibcuk:program-top-level__action_355_program_top_level_mapping_355_91__linear",
          "to": "method:1uibcuk:program-top-level__action_357_program_top_level_repository_read_357_92__linear",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_357_program_top_level_repository_read_357_92__linear__method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition",
          "from": "method:1uibcuk:program-top-level__action_357_program_top_level_repository_read_357_92__linear",
          "to": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition__method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__true",
          "from": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition",
          "to": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition__method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__false",
          "from": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__condition",
          "to": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__true__method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "from": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__true",
          "to": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__false__method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "from": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__false",
          "to": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge__method:1uibcuk:program-top-level__action_360_program_top_level_await_360_94__await",
          "from": "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
          "to": "method:1uibcuk:program-top-level__action_360_program_top_level_await_360_94__await",
          "kind": "next",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_360_program_top_level_await_360_94__await__method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition",
          "from": "method:1uibcuk:program-top-level__action_360_program_top_level_await_360_94__await",
          "to": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition__method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__true",
          "from": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition",
          "to": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition__method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__false",
          "from": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__condition",
          "to": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__true__method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "from": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__true",
          "to": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__false__method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "from": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__false",
          "to": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge__method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return",
          "from": "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
          "to": "method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return",
          "kind": "return",
          "line": 364,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return__method:1uibcuk:program-top-level__action_367_program_top_level_mapping_367_97__linear",
          "from": "method:1uibcuk:program-top-level__action_364_program_top_level_return_364_96__return",
          "to": "method:1uibcuk:program-top-level__action_367_program_top_level_mapping_367_97__linear",
          "kind": "next",
          "line": 367,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_367_program_top_level_mapping_367_97__linear__method:1uibcuk:program-top-level__action_373_program_top_level_await_373_98__await",
          "from": "method:1uibcuk:program-top-level__action_367_program_top_level_mapping_367_97__linear",
          "to": "method:1uibcuk:program-top-level__action_373_program_top_level_await_373_98__await",
          "kind": "next",
          "line": 373,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_373_program_top_level_await_373_98__await__method:1uibcuk:program-top-level__action_374_program_top_level_await_374_100__await",
          "from": "method:1uibcuk:program-top-level__action_373_program_top_level_await_373_98__await",
          "to": "method:1uibcuk:program-top-level__action_374_program_top_level_await_374_100__await",
          "kind": "next",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_374_program_top_level_await_374_100__await__method:1uibcuk:program-top-level__action_374_program_top_level_repository_read_374_99__linear",
          "from": "method:1uibcuk:program-top-level__action_374_program_top_level_await_374_100__await",
          "to": "method:1uibcuk:program-top-level__action_374_program_top_level_repository_read_374_99__linear",
          "kind": "next",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_374_program_top_level_repository_read_374_99__linear__method:1uibcuk:program-top-level__action_377_program_top_level_try_377_101__try",
          "from": "method:1uibcuk:program-top-level__action_374_program_top_level_repository_read_374_99__linear",
          "to": "method:1uibcuk:program-top-level__action_377_program_top_level_try_377_101__try",
          "kind": "next",
          "line": 377,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1uibcuk:program-top-level__action_377_program_top_level_try_377_101__try__method:1uibcuk:program-top-level__action_381_program_top_level_repository_read_381_102__linear",
          "from": "method:1uibcuk:program-top-level__action_377_program_top_level_try_377_101__try",
          "to": "method:1uibcuk:program-top-level__action_381_program_top_level_repository_read_381_102__linear",
          "kind": "next",
          "line": 381,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_381_program_top_level_repository_read_381_102__linear__method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch",
          "from": "method:1uibcuk:program-top-level__action_381_program_top_level_repository_read_381_102__linear",
          "to": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch__method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__case_0",
          "from": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch",
          "to": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__case_0",
          "kind": "case",
          "label": "case",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__case_0__method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge",
          "from": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__case_0",
          "to": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge__method:1uibcuk:program-top-level__action_389_program_top_level_await_389_104__await",
          "from": "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge",
          "to": "method:1uibcuk:program-top-level__action_389_program_top_level_await_389_104__await",
          "kind": "next",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_389_program_top_level_await_389_104__await__call_method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess",
          "from": "method:1uibcuk:program-top-level__action_389_program_top_level_await_389_104__await",
          "to": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "session?.CustomerEmail, session?.Metadata, userManager, dbContext",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess__method:1uibcuk:program-top-level__action_394_program_top_level_await_394_105__await",
          "from": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess",
          "to": "method:1uibcuk:program-top-level__action_394_program_top_level_await_394_105__await",
          "kind": "next",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_394_program_top_level_await_394_105__await__call_method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess",
          "from": "method:1uibcuk:program-top-level__action_394_program_top_level_await_394_105__await",
          "to": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "subscription?.Metadata[\"CustomerEmail\"], subscription?.Metadata, userManager, dbContext",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess__method:1uibcuk:program-top-level__action_399_program_top_level_await_399_106__await",
          "from": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess",
          "to": "method:1uibcuk:program-top-level__action_399_program_top_level_await_399_106__await",
          "kind": "next",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_399_program_top_level_await_399_106__await__call_method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation",
          "from": "method:1uibcuk:program-top-level__action_399_program_top_level_await_399_106__await",
          "to": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation",
          "kind": "call",
          "label": "deletedSubscription?.Metadata[\"CustomerEmail\"], userManager, dbContext",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation__method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return",
          "from": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation",
          "to": "method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return",
          "kind": "return",
          "line": 402,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return__method:1uibcuk:program-top-level__action_404_program_top_level_catch_404_108__catch",
          "from": "method:1uibcuk:program-top-level__action_402_program_top_level_return_402_107__return",
          "to": "method:1uibcuk:program-top-level__action_404_program_top_level_catch_404_108__catch",
          "kind": "exception",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_404_program_top_level_catch_404_108__catch__method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return",
          "from": "method:1uibcuk:program-top-level__action_404_program_top_level_catch_404_108__catch",
          "to": "method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return",
          "kind": "return",
          "line": 406,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return__method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition",
          "from": "method:1uibcuk:program-top-level__action_406_program_top_level_return_406_109__return",
          "to": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition__method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__true",
          "from": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition",
          "to": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition__method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__false",
          "from": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__condition",
          "to": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__true__method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "from": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__true",
          "to": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__false__method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "from": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__false",
          "to": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge__method:1uibcuk:program-top-level__action_418_program_top_level_await_418_112__await",
          "from": "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
          "to": "method:1uibcuk:program-top-level__action_418_program_top_level_await_418_112__await",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_418_program_top_level_await_418_112__await__method:1uibcuk:program-top-level__action_418_program_top_level_repository_read_418_111__linear",
          "from": "method:1uibcuk:program-top-level__action_418_program_top_level_await_418_112__await",
          "to": "method:1uibcuk:program-top-level__action_418_program_top_level_repository_read_418_111__linear",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_418_program_top_level_repository_read_418_111__linear__method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition",
          "from": "method:1uibcuk:program-top-level__action_418_program_top_level_repository_read_418_111__linear",
          "to": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition__method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__true",
          "from": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition",
          "to": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__true",
          "kind": "condition-true",
          "label": "true",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition__method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__false",
          "from": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__condition",
          "to": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__false",
          "kind": "condition-false",
          "label": "false",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__true__method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "from": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__true",
          "to": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__false__method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "from": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__false",
          "to": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge__method:1uibcuk:program-top-level__action_422_program_top_level_await_422_114__await",
          "from": "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
          "to": "method:1uibcuk:program-top-level__action_422_program_top_level_await_422_114__await",
          "kind": "next",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_422_program_top_level_await_422_114__await__method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition",
          "from": "method:1uibcuk:program-top-level__action_422_program_top_level_await_422_114__await",
          "to": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition__method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__true",
          "from": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition",
          "to": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__true",
          "kind": "condition-true",
          "label": "true",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition__method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__false",
          "from": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__condition",
          "to": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__false",
          "kind": "condition-false",
          "label": "false",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__true__method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "from": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__true",
          "to": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__false__method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "from": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__false",
          "to": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge__method:1uibcuk:program-top-level__action_430_program_top_level_await_430_116__await",
          "from": "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
          "to": "method:1uibcuk:program-top-level__action_430_program_top_level_await_430_116__await",
          "kind": "next",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_430_program_top_level_await_430_116__await__method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition",
          "from": "method:1uibcuk:program-top-level__action_430_program_top_level_await_430_116__await",
          "to": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition__method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__true",
          "from": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition",
          "to": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition__method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__false",
          "from": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__condition",
          "to": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__true__method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "from": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__true",
          "to": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__false__method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "from": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__false",
          "to": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge__method:1uibcuk:program-top-level__action_441_program_top_level_await_441_119__await",
          "from": "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
          "to": "method:1uibcuk:program-top-level__action_441_program_top_level_await_441_119__await",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_441_program_top_level_await_441_119__await__method:1uibcuk:program-top-level__action_441_program_top_level_repository_read_441_118__linear",
          "from": "method:1uibcuk:program-top-level__action_441_program_top_level_await_441_119__await",
          "to": "method:1uibcuk:program-top-level__action_441_program_top_level_repository_read_441_118__linear",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_441_program_top_level_repository_read_441_118__linear__method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition",
          "from": "method:1uibcuk:program-top-level__action_441_program_top_level_repository_read_441_118__linear",
          "to": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition__method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__true",
          "from": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition",
          "to": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__true",
          "kind": "condition-true",
          "label": "true",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition__method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__false",
          "from": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__condition",
          "to": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__false",
          "kind": "condition-false",
          "label": "false",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__true__method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "from": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__true",
          "to": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__false__method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "from": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__false",
          "to": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge__method:1uibcuk:program-top-level__action_444_program_top_level_await_444_122__await",
          "from": "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
          "to": "method:1uibcuk:program-top-level__action_444_program_top_level_await_444_122__await",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_444_program_top_level_await_444_122__await__method:1uibcuk:program-top-level__action_444_program_top_level_repository_read_444_121__linear",
          "from": "method:1uibcuk:program-top-level__action_444_program_top_level_await_444_122__await",
          "to": "method:1uibcuk:program-top-level__action_444_program_top_level_repository_read_444_121__linear",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_444_program_top_level_repository_read_444_121__linear__method:1uibcuk:program-top-level__action_447_program_top_level_await_447_123__await",
          "from": "method:1uibcuk:program-top-level__action_444_program_top_level_repository_read_444_121__linear",
          "to": "method:1uibcuk:program-top-level__action_447_program_top_level_await_447_123__await",
          "kind": "next",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_447_program_top_level_await_447_123__await__method:1uibcuk:program-top-level__action_451_program_top_level_mapping_451_124__linear",
          "from": "method:1uibcuk:program-top-level__action_447_program_top_level_await_447_123__await",
          "to": "method:1uibcuk:program-top-level__action_451_program_top_level_mapping_451_124__linear",
          "kind": "next",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_451_program_top_level_mapping_451_124__linear__method:1uibcuk:program-top-level__action_453_program_top_level_mapping_453_125__linear",
          "from": "method:1uibcuk:program-top-level__action_451_program_top_level_mapping_451_124__linear",
          "to": "method:1uibcuk:program-top-level__action_453_program_top_level_mapping_453_125__linear",
          "kind": "next",
          "line": 453,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_453_program_top_level_mapping_453_125__linear__method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return",
          "from": "method:1uibcuk:program-top-level__action_453_program_top_level_mapping_453_125__linear",
          "to": "method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return",
          "kind": "return",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return__method:1uibcuk:program-top-level__action_463_program_top_level_mapping_463_127__linear",
          "from": "method:1uibcuk:program-top-level__action_460_program_top_level_return_460_126__return",
          "to": "method:1uibcuk:program-top-level__action_463_program_top_level_mapping_463_127__linear",
          "kind": "next",
          "line": 463,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_463_program_top_level_mapping_463_127__linear__method:1uibcuk:program-top-level__action_469_program_top_level_await_469_128__await",
          "from": "method:1uibcuk:program-top-level__action_463_program_top_level_mapping_463_127__linear",
          "to": "method:1uibcuk:program-top-level__action_469_program_top_level_await_469_128__await",
          "kind": "next",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_469_program_top_level_await_469_128__await__method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition",
          "from": "method:1uibcuk:program-top-level__action_469_program_top_level_await_469_128__await",
          "to": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition__method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__true",
          "from": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition",
          "to": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__true",
          "kind": "condition-true",
          "label": "true",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition__method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__false",
          "from": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__condition",
          "to": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__false",
          "kind": "condition-false",
          "label": "false",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__true__method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "from": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__true",
          "to": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__false__method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "from": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__false",
          "to": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge__method:1uibcuk:program-top-level__action_472_program_top_level_log_472_130__linear",
          "from": "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
          "to": "method:1uibcuk:program-top-level__action_472_program_top_level_log_472_130__linear",
          "kind": "next",
          "line": 472,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_472_program_top_level_log_472_130__linear__method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return",
          "from": "method:1uibcuk:program-top-level__action_472_program_top_level_log_472_130__linear",
          "to": "method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return",
          "kind": "return",
          "line": 473,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return__method:1uibcuk:program-top-level__action_476_program_top_level_await_476_132__await",
          "from": "method:1uibcuk:program-top-level__action_473_program_top_level_return_473_131__return",
          "to": "method:1uibcuk:program-top-level__action_476_program_top_level_await_476_132__await",
          "kind": "next",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_476_program_top_level_await_476_132__await__method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition",
          "from": "method:1uibcuk:program-top-level__action_476_program_top_level_await_476_132__await",
          "to": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition__method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__true",
          "from": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition",
          "to": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__true",
          "kind": "condition-true",
          "label": "true",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition__method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__false",
          "from": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__condition",
          "to": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__false",
          "kind": "condition-false",
          "label": "false",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__true__method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "from": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__true",
          "to": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__false__method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "from": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__false",
          "to": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge__method:1uibcuk:program-top-level__action_479_program_top_level_repository_read_479_135__linear",
          "from": "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
          "to": "method:1uibcuk:program-top-level__action_479_program_top_level_repository_read_479_135__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_479_program_top_level_repository_read_479_135__linear__method:1uibcuk:program-top-level__action_479_program_top_level_log_479_134__linear",
          "from": "method:1uibcuk:program-top-level__action_479_program_top_level_repository_read_479_135__linear",
          "to": "method:1uibcuk:program-top-level__action_479_program_top_level_log_479_134__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_479_program_top_level_log_479_134__linear__method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return",
          "from": "method:1uibcuk:program-top-level__action_479_program_top_level_log_479_134__linear",
          "to": "method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return",
          "kind": "return",
          "line": 480,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return__method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition",
          "from": "method:1uibcuk:program-top-level__action_480_program_top_level_return_480_136__return",
          "to": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition__method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__true",
          "from": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition",
          "to": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__true",
          "kind": "condition-true",
          "label": "true",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition__method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__false",
          "from": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__condition",
          "to": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__false",
          "kind": "condition-false",
          "label": "false",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__true__method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "from": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__true",
          "to": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__false__method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "from": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__false",
          "to": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge__method:1uibcuk:program-top-level__action_485_program_top_level_repository_read_485_139__linear",
          "from": "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
          "to": "method:1uibcuk:program-top-level__action_485_program_top_level_repository_read_485_139__linear",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_485_program_top_level_repository_read_485_139__linear__method:1uibcuk:program-top-level__action_485_program_top_level_log_485_138__linear",
          "from": "method:1uibcuk:program-top-level__action_485_program_top_level_repository_read_485_139__linear",
          "to": "method:1uibcuk:program-top-level__action_485_program_top_level_log_485_138__linear",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_485_program_top_level_log_485_138__linear__method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return",
          "from": "method:1uibcuk:program-top-level__action_485_program_top_level_log_485_138__linear",
          "to": "method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return",
          "kind": "return",
          "line": 486,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return__method:1uibcuk:program-top-level__action_490_program_top_level_repository_read_490_141__linear",
          "from": "method:1uibcuk:program-top-level__action_486_program_top_level_return_486_140__return",
          "to": "method:1uibcuk:program-top-level__action_490_program_top_level_repository_read_490_141__linear",
          "kind": "next",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_490_program_top_level_repository_read_490_141__linear__method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition",
          "from": "method:1uibcuk:program-top-level__action_490_program_top_level_repository_read_490_141__linear",
          "to": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition__method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__true",
          "from": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition",
          "to": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__true",
          "kind": "condition-true",
          "label": "true",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition__method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__false",
          "from": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__condition",
          "to": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__false",
          "kind": "condition-false",
          "label": "false",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__true__method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "from": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__true",
          "to": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__false__method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "from": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__false",
          "to": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge__method:1uibcuk:program-top-level__action_494_program_top_level_await_494_143__await",
          "from": "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
          "to": "method:1uibcuk:program-top-level__action_494_program_top_level_await_494_143__await",
          "kind": "next",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_494_program_top_level_await_494_143__await__method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition",
          "from": "method:1uibcuk:program-top-level__action_494_program_top_level_await_494_143__await",
          "to": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition__method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__true",
          "from": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition",
          "to": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__true",
          "kind": "condition-true",
          "label": "true",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition__method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__false",
          "from": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__condition",
          "to": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__false",
          "kind": "condition-false",
          "label": "false",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__true__method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "from": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__true",
          "to": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__false__method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "from": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__false",
          "to": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge__method:1uibcuk:program-top-level__action_498_program_top_level_await_498_145__await",
          "from": "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
          "to": "method:1uibcuk:program-top-level__action_498_program_top_level_await_498_145__await",
          "kind": "next",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_498_program_top_level_await_498_145__await__method:1uibcuk:program-top-level__action_499_program_top_level_await_499_146__await",
          "from": "method:1uibcuk:program-top-level__action_498_program_top_level_await_498_145__await",
          "to": "method:1uibcuk:program-top-level__action_499_program_top_level_await_499_146__await",
          "kind": "next",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_499_program_top_level_await_499_146__await__method:1uibcuk:program-top-level__action_500_program_top_level_log_500_147__linear",
          "from": "method:1uibcuk:program-top-level__action_499_program_top_level_await_499_146__await",
          "to": "method:1uibcuk:program-top-level__action_500_program_top_level_log_500_147__linear",
          "kind": "next",
          "line": 500,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_500_program_top_level_log_500_147__linear__method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return",
          "from": "method:1uibcuk:program-top-level__action_500_program_top_level_log_500_147__linear",
          "to": "method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return",
          "kind": "return",
          "line": 501,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return__method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "from": "method:1uibcuk:program-top-level__action_501_program_top_level_return_501_148__return",
          "to": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "kind": "next",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry__method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body",
          "from": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "to": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body",
          "kind": "loop-body",
          "label": "var error in createResult.Errors",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body__method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "from": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body",
          "to": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry__method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_exit",
          "from": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry",
          "to": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_exit__method:1uibcuk:program-top-level__action_507_program_top_level_log_507_150__linear",
          "from": "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_exit",
          "to": "method:1uibcuk:program-top-level__action_507_program_top_level_log_507_150__linear",
          "kind": "next",
          "line": 507,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_507_program_top_level_log_507_150__linear__method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition",
          "from": "method:1uibcuk:program-top-level__action_507_program_top_level_log_507_150__linear",
          "to": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition__method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__true",
          "from": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition",
          "to": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__true",
          "kind": "condition-true",
          "label": "true",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition__method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__false",
          "from": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__condition",
          "to": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__false",
          "kind": "condition-false",
          "label": "false",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__true__method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "from": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__true",
          "to": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__false__method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "from": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__false",
          "to": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge__method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return",
          "from": "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
          "to": "method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return",
          "kind": "return",
          "line": 512,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return__method:1uibcuk:program-top-level__action_516_program_top_level_log_516_153__linear",
          "from": "method:1uibcuk:program-top-level__action_512_program_top_level_return_512_152__return",
          "to": "method:1uibcuk:program-top-level__action_516_program_top_level_log_516_153__linear",
          "kind": "next",
          "line": 516,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_516_program_top_level_log_516_153__linear__method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return",
          "from": "method:1uibcuk:program-top-level__action_516_program_top_level_log_516_153__linear",
          "to": "method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return",
          "kind": "return",
          "line": 517,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return__method:1uibcuk:program-top-level__action_520_program_top_level_mapping_520_155__linear",
          "from": "method:1uibcuk:program-top-level__action_517_program_top_level_return_517_154__return",
          "to": "method:1uibcuk:program-top-level__action_520_program_top_level_mapping_520_155__linear",
          "kind": "next",
          "line": 520,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_520_program_top_level_mapping_520_155__linear__method:1uibcuk:program-top-level__action_528_program_top_level_await_528_156__await",
          "from": "method:1uibcuk:program-top-level__action_520_program_top_level_mapping_520_155__linear",
          "to": "method:1uibcuk:program-top-level__action_528_program_top_level_await_528_156__await",
          "kind": "next",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_528_program_top_level_await_528_156__await__method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition",
          "from": "method:1uibcuk:program-top-level__action_528_program_top_level_await_528_156__await",
          "to": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition__method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__true",
          "from": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition",
          "to": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__true",
          "kind": "condition-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition__method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__false",
          "from": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__condition",
          "to": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__false",
          "kind": "condition-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__true__method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "from": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__true",
          "to": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__false__method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "from": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__false",
          "to": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge__method:1uibcuk:program-top-level__action_531_program_top_level_log_531_158__linear",
          "from": "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
          "to": "method:1uibcuk:program-top-level__action_531_program_top_level_log_531_158__linear",
          "kind": "next",
          "line": 531,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_531_program_top_level_log_531_158__linear__method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return",
          "from": "method:1uibcuk:program-top-level__action_531_program_top_level_log_531_158__linear",
          "to": "method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return",
          "kind": "return",
          "line": 532,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return__method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return",
          "from": "method:1uibcuk:program-top-level__action_532_program_top_level_return_532_159__return",
          "to": "method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return",
          "kind": "return",
          "line": 536,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return__method:1uibcuk:program-top-level__action_539_program_top_level_mapping_539_161__linear",
          "from": "method:1uibcuk:program-top-level__action_536_program_top_level_return_536_160__return",
          "to": "method:1uibcuk:program-top-level__action_539_program_top_level_mapping_539_161__linear",
          "kind": "next",
          "line": 539,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_539_program_top_level_mapping_539_161__linear__method:1uibcuk:program-top-level__action_543_program_top_level_await_543_162__await",
          "from": "method:1uibcuk:program-top-level__action_539_program_top_level_mapping_539_161__linear",
          "to": "method:1uibcuk:program-top-level__action_543_program_top_level_await_543_162__await",
          "kind": "next",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_543_program_top_level_await_543_162__await__method:1uibcuk:program-top-level__action_544_program_top_level_log_544_163__linear",
          "from": "method:1uibcuk:program-top-level__action_543_program_top_level_await_543_162__await",
          "to": "method:1uibcuk:program-top-level__action_544_program_top_level_log_544_163__linear",
          "kind": "next",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:1uibcuk:program-top-level__action_544_program_top_level_log_544_163__linear__method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return",
          "from": "method:1uibcuk:program-top-level__action_544_program_top_level_log_544_163__linear",
          "to": "method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return",
          "kind": "return",
          "line": 545,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return__method:1uibcuk:program-top-level__action_548_program_top_level_mapping_548_165__linear",
          "from": "method:1uibcuk:program-top-level__action_545_program_top_level_return_545_164__return",
          "to": "method:1uibcuk:program-top-level__action_548_program_top_level_mapping_548_165__linear",
          "kind": "next",
          "line": 548,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_548_program_top_level_mapping_548_165__linear__method:1uibcuk:program-top-level__action_550_program_top_level_repository_read_550_166__linear",
          "from": "method:1uibcuk:program-top-level__action_548_program_top_level_mapping_548_165__linear",
          "to": "method:1uibcuk:program-top-level__action_550_program_top_level_repository_read_550_166__linear",
          "kind": "next",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_550_program_top_level_repository_read_550_166__linear__method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition",
          "from": "method:1uibcuk:program-top-level__action_550_program_top_level_repository_read_550_166__linear",
          "to": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition__method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__true",
          "from": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition",
          "to": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition__method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__false",
          "from": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__condition",
          "to": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__true__method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "from": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__true",
          "to": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__false__method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "from": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__false",
          "to": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge__method:1uibcuk:program-top-level__action_553_program_top_level_await_553_168__await",
          "from": "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
          "to": "method:1uibcuk:program-top-level__action_553_program_top_level_await_553_168__await",
          "kind": "next",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1uibcuk:program-top-level__action_553_program_top_level_await_553_168__await__method:1uibcuk:program-top-level__action_554_program_top_level_repository_read_554_170__linear",
          "from": "method:1uibcuk:program-top-level__action_553_program_top_level_await_553_168__await",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_repository_read_554_170__linear",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_repository_read_554_170__linear__method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_repository_read_554_170__linear",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition__method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__true",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition__method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__false",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__condition",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__true__method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__true",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__false__method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__false",
          "to": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge__method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return",
          "from": "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge",
          "to": "method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return",
          "kind": "return",
          "line": 556,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return__method:1uibcuk:program-top-level__action_559_program_top_level_mapping_559_172__linear",
          "from": "method:1uibcuk:program-top-level__action_556_program_top_level_return_556_171__return",
          "to": "method:1uibcuk:program-top-level__action_559_program_top_level_mapping_559_172__linear",
          "kind": "next",
          "line": 559,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1uibcuk:program-top-level__action_559_program_top_level_mapping_559_172__linear__implicit_return",
          "from": "method:1uibcuk:program-top-level__action_559_program_top_level_mapping_559_172__linear",
          "to": "method:1uibcuk:program-top-level__implicit_return",
          "kind": "return",
          "line": 564,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1uibcuk:program-top-level__call_78_AddApplication__jump_NexusReader_Application_AddApplication",
          "fromNodeId": "method:1uibcuk:program-top-level__call_78_AddApplication",
          "kind": "call-target",
          "targetPath": "NexusReader.Application",
          "targetHint": "AddApplication",
          "line": 78,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target AddApplication in NexusReader.Application could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_79_AddInfrastructure__jump_NexusReader_Infrastructure_AddInfrastructure",
          "fromNodeId": "method:1uibcuk:program-top-level__call_79_AddInfrastructure",
          "kind": "call-target",
          "targetPath": "NexusReader.Infrastructure",
          "targetHint": "AddInfrastructure",
          "line": 79,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target AddInfrastructure in NexusReader.Infrastructure could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync__jump_NexusReader_Data_Persistence_DbInitializer_cs_DbInitializer_SeedAsync",
          "fromNodeId": "method:1uibcuk:program-top-level__call_196_DbInitializer_SeedAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Data.Persistence/DbInitializer.cs",
          "targetHint": "DbInitializer.SeedAsync",
          "line": 196,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target DbInitializer.SeedAsync in NexusReader.Data.Persistence/DbInitializer.cs could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess__jump_NexusReader_Web_Program_cs_HandleSubscriptionSuccess",
          "fromNodeId": "method:1uibcuk:program-top-level__call_389_HandleSubscriptionSuccess",
          "kind": "call-target",
          "targetNodeId": "method:13xh0j3:handlesubscriptionsuccess",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionSuccess",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionSuccess resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess__jump_NexusReader_Web_Program_cs_HandleSubscriptionSuccess",
          "fromNodeId": "method:1uibcuk:program-top-level__call_394_HandleSubscriptionSuccess",
          "kind": "call-target",
          "targetNodeId": "method:13xh0j3:handlesubscriptionsuccess",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionSuccess",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionSuccess resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation__jump_NexusReader_Web_Program_cs_HandleSubscriptionCancellation",
          "fromNodeId": "method:1uibcuk:program-top-level__call_399_HandleSubscriptionCancellation",
          "kind": "call-target",
          "targetNodeId": "method:72bnlj:handlesubscriptioncancellation",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionCancellation",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionCancellation resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [
        {
          "id": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw__exception_escape",
          "fromNodeId": "method:1uibcuk:program-top-level__action_171_program_top_level_throw_171_12__throw",
          "kind": "exception-target",
          "line": 171,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        },
        {
          "id": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw__exception_escape",
          "fromNodeId": "method:1uibcuk:program-top-level__action_220_program_top_level_throw_220_33__throw",
          "kind": "exception-target",
          "line": 220,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Thrown exception exits the current method without a resolved catch target.",
          "status": "unresolved"
        }
      ],
      "loopBackEdges": [
        "method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_body__method:1uibcuk:program-top-level__action_186_program_top_level_loop_186_14__loop_entry",
        "method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_body__method:1uibcuk:program-top-level__action_505_program_top_level_loop_505_149__loop_entry"
      ],
      "mergeNodeIds": [
        "method:1uibcuk:program-top-level__action_62_program_top_level_branch_62_0__merge",
        "method:1uibcuk:program-top-level__action_66_program_top_level_fallback_66_1__merge",
        "method:1uibcuk:program-top-level__action_129_program_top_level_branch_129_5__merge",
        "method:1uibcuk:program-top-level__action_133_program_top_level_fallback_133_7__merge",
        "method:1uibcuk:program-top-level__action_166_guard_clause_166__merge",
        "method:1uibcuk:program-top-level__action_169_program_top_level_branch_169_10__merge",
        "method:1uibcuk:program-top-level__action_171_program_top_level_validation_171_11__merge",
        "method:1uibcuk:program-top-level__action_190_program_top_level_branch_190_17__merge",
        "method:1uibcuk:program-top-level__action_198_program_top_level_branch_198_22__merge",
        "method:1uibcuk:program-top-level__action_206_program_top_level_branch_206_26__merge",
        "method:1uibcuk:program-top-level__action_216_program_top_level_branch_216_31__merge",
        "method:1uibcuk:program-top-level__action_226_program_top_level_branch_226_34__merge",
        "method:1uibcuk:program-top-level__action_230_program_top_level_fallback_230_35__merge",
        "method:1uibcuk:program-top-level__action_237_program_top_level_branch_237_36__merge",
        "method:1uibcuk:program-top-level__action_255_program_top_level_guard_clause_255_42__merge",
        "method:1uibcuk:program-top-level__action_269_program_top_level_guard_clause_269_48__merge",
        "method:1uibcuk:program-top-level__action_277_program_top_level_guard_clause_277_53__merge",
        "method:1uibcuk:program-top-level__action_285_program_top_level_guard_clause_285_58__merge",
        "method:1uibcuk:program-top-level__action_293_program_top_level_guard_clause_293_63__merge",
        "method:1uibcuk:program-top-level__action_301_program_top_level_guard_clause_301_68__merge",
        "method:1uibcuk:program-top-level__action_309_program_top_level_guard_clause_309_73__merge",
        "method:1uibcuk:program-top-level__action_317_program_top_level_guard_clause_317_78__merge",
        "method:1uibcuk:program-top-level__action_324_program_top_level_guard_clause_324_82__merge",
        "method:1uibcuk:program-top-level__action_333_program_top_level_guard_clause_333_86__merge",
        "method:1uibcuk:program-top-level__action_350_program_top_level_guard_clause_350_88__merge",
        "method:1uibcuk:program-top-level__action_358_program_top_level_guard_clause_358_93__merge",
        "method:1uibcuk:program-top-level__action_361_program_top_level_guard_clause_361_95__merge",
        "method:1uibcuk:program-top-level__action_385_program_top_level_switch_385_103__switch_merge",
        "method:1uibcuk:program-top-level__action_416_program_top_level_guard_clause_416_110__merge",
        "method:1uibcuk:program-top-level__action_419_program_top_level_branch_419_113__merge",
        "method:1uibcuk:program-top-level__action_424_program_top_level_branch_424_115__merge",
        "method:1uibcuk:program-top-level__action_439_program_top_level_guard_clause_439_117__merge",
        "method:1uibcuk:program-top-level__action_442_program_top_level_branch_442_120__merge",
        "method:1uibcuk:program-top-level__action_470_program_top_level_branch_470_129__merge",
        "method:1uibcuk:program-top-level__action_477_program_top_level_branch_477_133__merge",
        "method:1uibcuk:program-top-level__action_483_program_top_level_branch_483_137__merge",
        "method:1uibcuk:program-top-level__action_491_program_top_level_branch_491_142__merge",
        "method:1uibcuk:program-top-level__action_496_program_top_level_branch_496_144__merge",
        "method:1uibcuk:program-top-level__action_510_program_top_level_branch_510_151__merge",
        "method:1uibcuk:program-top-level__action_529_program_top_level_branch_529_157__merge",
        "method:1uibcuk:program-top-level__action_551_program_top_level_guard_clause_551_167__merge",
        "method:1uibcuk:program-top-level__action_554_program_top_level_guard_clause_554_169__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 29,
        "end": 564
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 29,
          "summary": "Control-flow fragment extracted for method Program (top-level).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "ownerSymbolName": "GetEpubContent (GET /api/epub/{ebookId}/{index})",
      "entryNodeId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__entry",
      "exitNodeIds": [
        "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_258_getepubcontent_get_api_epub_ebookid_index_return_258_4__return"
      ],
      "nodes": [
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__entry",
          "kind": "entry",
          "label": "GetEpubContent (GET /api/epub/{ebookId}/{index}) entry",
          "line": 250,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Return EPUB page content for an ebook index for the current user."
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_250_getepubcontent_get_api_epub_ebookid_index_mapping_250_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 250,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/api/epub/{ebookId:guid}/{index:int}\", async (Guid ebookId, int index, IEpubReader epubService, ClaimsPrincipal user) =>"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_getepubcontent_get_api_epub_ebookid_index_repository_read_252_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition",
          "kind": "condition",
          "label": "user may be unauthenticated",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier)"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__true",
          "kind": "branch-true",
          "label": "continue",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "kind": "statement",
          "label": "merge",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_getepubcontent_get_api_epub_ebookid_index_await_253_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await epubService.GetEpubContentAsync(ebookId, index, userId);"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_external_call_253__linear",
          "kind": "http-call",
          "label": "Fetch content from epubService",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "await epubService.GetEpubContentAsync(...)"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync",
          "kind": "call",
          "label": "IEpubReader.GetEpubContentAsync",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "ebookId, index, userId"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition",
          "kind": "condition",
          "label": "Return OK or BadRequest based on result",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "If result.IsSuccess return Ok(result.Value) else BadRequest(error message)"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__true",
          "kind": "branch-true",
          "label": "true",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__false",
          "kind": "branch-false",
          "label": "false",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "kind": "statement",
          "label": "merge",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_258_getepubcontent_get_api_epub_ebookid_index_return_258_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 258,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        }
      ],
      "edges": [
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__entry__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_250_getepubcontent_get_api_epub_ebookid_index_mapping_250_0__linear",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__entry",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_250_getepubcontent_get_api_epub_ebookid_index_mapping_250_0__linear",
          "kind": "next",
          "line": 250,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_250_getepubcontent_get_api_epub_ebookid_index_mapping_250_0__linear__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_getepubcontent_get_api_epub_ebookid_index_repository_read_252_1__linear",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_250_getepubcontent_get_api_epub_ebookid_index_mapping_250_0__linear",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_getepubcontent_get_api_epub_ebookid_index_repository_read_252_1__linear",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_getepubcontent_get_api_epub_ebookid_index_repository_read_252_1__linear__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_getepubcontent_get_api_epub_ebookid_index_repository_read_252_1__linear",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__true",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__true",
          "kind": "condition-true",
          "label": "continue",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__false",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__true__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__true",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__false__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__false",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "kind": "next",
          "line": 252,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_getepubcontent_get_api_epub_ebookid_index_await_253_2__await",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_getepubcontent_get_api_epub_ebookid_index_await_253_2__await",
          "kind": "next",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_getepubcontent_get_api_epub_ebookid_index_await_253_2__await__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_external_call_253__linear",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_getepubcontent_get_api_epub_ebookid_index_await_253_2__await",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_external_call_253__linear",
          "kind": "next",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_external_call_253__linear__call_method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_253_external_call_253__linear",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync",
          "kind": "call",
          "label": "ebookId, index, userId",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__true",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__true",
          "kind": "condition-true",
          "label": "true",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__false",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__false",
          "kind": "condition-false",
          "label": "false",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__true__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__true",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__false__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__false",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__true",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__false",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__condition",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__true__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__true",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__false__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__false",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "kind": "next",
          "line": 255,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge__method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_258_getepubcontent_get_api_epub_ebookid_index_return_258_4__return",
          "from": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge",
          "to": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_258_getepubcontent_get_api_epub_ebookid_index_return_258_4__return",
          "kind": "return",
          "line": 258,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync__jump_NexusReader_Application_Abstractions_Persistence_IEpubReader_GetEpubContentAsync",
          "fromNodeId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__call_253_IEpubReader_GetEpubContentAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Persistence",
          "targetHint": "IEpubReader.GetEpubContentAsync",
          "line": 253,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IEpubReader.GetEpubContentAsync in NexusReader.Application.Abstractions.Persistence could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_252_guard_clause_252__merge",
        "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_branch_255__merge",
        "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index__action_255_getepubcontent_get_api_epub_ebookid_index_guard_clause_255_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 250,
        "end": 259
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 250,
          "summary": "Control-flow fragment extracted for method GetEpubContent (GET /api/epub/{ebookId}/{index}).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:gc2kp9:knowledge-api-group-mappings__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:gc2kp9:knowledge-api-group-mappings",
      "ownerSymbolName": "Knowledge API group mappings",
      "entryNodeId": "method:gc2kp9:knowledge-api-group-mappings__entry",
      "exitNodeIds": [
        "method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return",
        "method:gc2kp9:knowledge-api-group-mappings__action_327_knowledge_api_group_mappings_return_327_39__return"
      ],
      "nodes": [
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__entry",
          "kind": "entry",
          "label": "Knowledge API group mappings entry",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Register knowledge-related endpoints under /api/knowledge with token-based authorization disabled antiforgery and policy 'HasAvailableTokens'."
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_261_knowledge_api_group_mappings_mapping_261_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "var knowledgeApi = app.MapGroup(\"/api/knowledge\")"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_261_group_registration_261__linear",
          "kind": "statement",
          "label": "MapGroup '/api/knowledge' with policy 'HasAvailableTokens' and DisableAntiforgery",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Group-level policy and antiforgery disabled"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_265_knowledge_api_group_mappings_mapping_265_1__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 265,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition",
          "kind": "condition",
          "label": "ClaimsPrincipal may not contain TenantId",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "var tenantId = user.FindFirstValue('TenantId') ?? 'global'"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__true",
          "kind": "branch-true",
          "label": "use claim",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__false",
          "kind": "branch-false",
          "label": "fallback 'global'",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "kind": "statement",
          "label": "merge",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_knowledge_api_group_mappings_repository_read_267_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_268_knowledge_api_group_mappings_await_268_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetKnowledgeAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetKnowledgeAsync",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Text, tenantId, request.EbookId"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition",
          "kind": "condition",
          "label": "Return OK or BadRequest on service result",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Standard pattern used across endpoints: if result.IsSuccess -> Ok, else BadRequest(result.Errors[0].Message)"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__true",
          "kind": "branch-true",
          "label": "true",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__false",
          "kind": "branch-false",
          "label": "false",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "kind": "statement",
          "label": "merge",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 270,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_273_knowledge_api_group_mappings_mapping_273_6__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 273,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/graph\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_275_knowledge_api_group_mappings_repository_read_275_7__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 275,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_276_knowledge_api_group_mappings_await_276_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetGraphDataAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetGraphDataAsync",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Text, tenantId, request.EbookId"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "kind": "statement",
          "label": "merge",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return",
          "kind": "return",
          "label": "Returns result",
          "line": 278,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_281_knowledge_api_group_mappings_mapping_281_11__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 281,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/summary\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_283_knowledge_api_group_mappings_repository_read_283_12__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 283,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_284_knowledge_api_group_mappings_await_284_13__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetSummaryAndQuizAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetSummaryAndQuizAsync",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Text, tenantId, request.EbookId"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "kind": "statement",
          "label": "merge",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return",
          "kind": "return",
          "label": "Returns result",
          "line": 286,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_289_knowledge_api_group_mappings_mapping_289_16__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 289,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/map\", async (KnowledgeRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_291_knowledge_api_group_mappings_repository_read_291_17__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 291,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_292_knowledge_api_group_mappings_await_292_18__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.GetKnowledgeMapAsync(request.Text, tenantId, request.EbookId);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync",
          "kind": "call",
          "label": "IKnowledgeService.GetKnowledgeMapAsync",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Text, tenantId, request.EbookId"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "kind": "statement",
          "label": "merge",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return",
          "kind": "return",
          "label": "Returns result",
          "line": 294,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_297_knowledge_api_group_mappings_mapping_297_21__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 297,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/verify-groundedness\", async (GroundednessRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_299_knowledge_api_group_mappings_repository_read_299_22__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 299,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_300_knowledge_api_group_mappings_await_300_23__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.VerifyGroundednessAsync(request.Answer, request.Context, tenantId);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync",
          "kind": "call",
          "label": "IKnowledgeService.VerifyGroundednessAsync",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Answer, request.Context, tenantId"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "kind": "statement",
          "label": "merge",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return",
          "kind": "return",
          "label": "Returns result",
          "line": 302,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_305_knowledge_api_group_mappings_mapping_305_26__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 305,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/search\", async (SemanticSearchRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_307_knowledge_api_group_mappings_repository_read_307_27__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 307,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_308_knowledge_api_group_mappings_await_308_28__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.SearchLibrarySemanticallyAsync(request.QueryText, tenantId, request.Limit);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "kind": "call",
          "label": "IKnowledgeService.SearchLibrarySemanticallyAsync",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.QueryText, tenantId, request.Limit"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "kind": "statement",
          "label": "merge",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return",
          "kind": "return",
          "label": "Returns result",
          "line": 310,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_313_knowledge_api_group_mappings_mapping_313_31__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 313,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapPost(\"/ask\", async (AskQuestionRequest request, ClaimsPrincipal user, IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_315_knowledge_api_group_mappings_repository_read_315_32__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 315,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var tenantId = user.FindFirstValue(\"TenantId\") ?? \"global\";"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_316_knowledge_api_group_mappings_await_316_33__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.AskQuestionAsync(request.Question, tenantId, request.EbookId, request.Limit);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync",
          "kind": "call",
          "label": "IKnowledgeService.AskQuestionAsync",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "request.Question, tenantId, request.EbookId, request.Limit"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "kind": "statement",
          "label": "merge",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return",
          "kind": "return",
          "label": "Returns result",
          "line": 318,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.Count > 0 ? result.Errors[0].Message : \"Unknown server error\");"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_321_knowledge_api_group_mappings_mapping_321_36__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 321,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "knowledgeApi.MapDelete(\"/\", async (IKnowledgeService knowledgeService) =>"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_323_knowledge_api_group_mappings_await_323_37__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await knowledgeService.ClearCacheAsync();"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync",
          "kind": "call",
          "label": "IKnowledgeService.ClearCacheAsync",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok();"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "kind": "statement",
          "label": "merge",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_327_knowledge_api_group_mappings_return_327_39__return",
          "kind": "return",
          "label": "Returns result",
          "line": 327,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        }
      ],
      "edges": [
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__entry__method:gc2kp9:knowledge-api-group-mappings__action_261_knowledge_api_group_mappings_mapping_261_0__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__entry",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_261_knowledge_api_group_mappings_mapping_261_0__linear",
          "kind": "next",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_261_knowledge_api_group_mappings_mapping_261_0__linear__method:gc2kp9:knowledge-api-group-mappings__action_261_group_registration_261__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_261_knowledge_api_group_mappings_mapping_261_0__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_261_group_registration_261__linear",
          "kind": "next",
          "line": 261,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_261_group_registration_261__linear__method:gc2kp9:knowledge-api-group-mappings__action_265_knowledge_api_group_mappings_mapping_265_1__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_261_group_registration_261__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_265_knowledge_api_group_mappings_mapping_265_1__linear",
          "kind": "next",
          "line": 265,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_265_knowledge_api_group_mappings_mapping_265_1__linear__method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_265_knowledge_api_group_mappings_mapping_265_1__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition__method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__true",
          "kind": "condition-true",
          "label": "use claim",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition__method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__false",
          "kind": "condition-false",
          "label": "fallback 'global'",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__true__method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__false__method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge__method:gc2kp9:knowledge-api-group-mappings__action_267_knowledge_api_group_mappings_repository_read_267_2__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_267_knowledge_api_group_mappings_repository_read_267_2__linear",
          "kind": "next",
          "line": 267,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_267_knowledge_api_group_mappings_repository_read_267_2__linear__method:gc2kp9:knowledge-api-group-mappings__action_268_knowledge_api_group_mappings_await_268_3__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_267_knowledge_api_group_mappings_repository_read_267_2__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_268_knowledge_api_group_mappings_await_268_3__await",
          "kind": "next",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_268_knowledge_api_group_mappings_await_268_3__await__call_method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_268_knowledge_api_group_mappings_await_268_3__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync",
          "kind": "call",
          "label": "request.Text, tenantId, request.EbookId",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync__method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition__method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__true",
          "kind": "condition-true",
          "label": "true",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition__method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__false",
          "kind": "condition-false",
          "label": "false",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__true__method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__false__method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge__method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition__method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition__method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__true__method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__false__method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "kind": "next",
          "line": 269,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge__method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return",
          "kind": "return",
          "line": 270,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return__method:gc2kp9:knowledge-api-group-mappings__action_273_knowledge_api_group_mappings_mapping_273_6__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_270_knowledge_api_group_mappings_return_270_5__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_273_knowledge_api_group_mappings_mapping_273_6__linear",
          "kind": "next",
          "line": 273,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_273_knowledge_api_group_mappings_mapping_273_6__linear__method:gc2kp9:knowledge-api-group-mappings__action_275_knowledge_api_group_mappings_repository_read_275_7__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_273_knowledge_api_group_mappings_mapping_273_6__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_275_knowledge_api_group_mappings_repository_read_275_7__linear",
          "kind": "next",
          "line": 275,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_275_knowledge_api_group_mappings_repository_read_275_7__linear__method:gc2kp9:knowledge-api-group-mappings__action_276_knowledge_api_group_mappings_await_276_8__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_275_knowledge_api_group_mappings_repository_read_275_7__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_276_knowledge_api_group_mappings_await_276_8__await",
          "kind": "next",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_276_knowledge_api_group_mappings_await_276_8__await__call_method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_276_knowledge_api_group_mappings_await_276_8__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync",
          "kind": "call",
          "label": "request.Text, tenantId, request.EbookId",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync__method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition__method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition__method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__true__method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__false__method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "kind": "next",
          "line": 277,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge__method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return",
          "kind": "return",
          "line": 278,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return__method:gc2kp9:knowledge-api-group-mappings__action_281_knowledge_api_group_mappings_mapping_281_11__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_278_knowledge_api_group_mappings_return_278_10__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_281_knowledge_api_group_mappings_mapping_281_11__linear",
          "kind": "next",
          "line": 281,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_281_knowledge_api_group_mappings_mapping_281_11__linear__method:gc2kp9:knowledge-api-group-mappings__action_283_knowledge_api_group_mappings_repository_read_283_12__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_281_knowledge_api_group_mappings_mapping_281_11__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_283_knowledge_api_group_mappings_repository_read_283_12__linear",
          "kind": "next",
          "line": 283,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_283_knowledge_api_group_mappings_repository_read_283_12__linear__method:gc2kp9:knowledge-api-group-mappings__action_284_knowledge_api_group_mappings_await_284_13__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_283_knowledge_api_group_mappings_repository_read_283_12__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_284_knowledge_api_group_mappings_await_284_13__await",
          "kind": "next",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_284_knowledge_api_group_mappings_await_284_13__await__call_method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_284_knowledge_api_group_mappings_await_284_13__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call",
          "label": "request.Text, tenantId, request.EbookId",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync__method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition__method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition__method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__true__method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__false__method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "kind": "next",
          "line": 285,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge__method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return",
          "kind": "return",
          "line": 286,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return__method:gc2kp9:knowledge-api-group-mappings__action_289_knowledge_api_group_mappings_mapping_289_16__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_286_knowledge_api_group_mappings_return_286_15__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_289_knowledge_api_group_mappings_mapping_289_16__linear",
          "kind": "next",
          "line": 289,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_289_knowledge_api_group_mappings_mapping_289_16__linear__method:gc2kp9:knowledge-api-group-mappings__action_291_knowledge_api_group_mappings_repository_read_291_17__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_289_knowledge_api_group_mappings_mapping_289_16__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_291_knowledge_api_group_mappings_repository_read_291_17__linear",
          "kind": "next",
          "line": 291,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_291_knowledge_api_group_mappings_repository_read_291_17__linear__method:gc2kp9:knowledge-api-group-mappings__action_292_knowledge_api_group_mappings_await_292_18__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_291_knowledge_api_group_mappings_repository_read_291_17__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_292_knowledge_api_group_mappings_await_292_18__await",
          "kind": "next",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_292_knowledge_api_group_mappings_await_292_18__await__call_method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_292_knowledge_api_group_mappings_await_292_18__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync",
          "kind": "call",
          "label": "request.Text, tenantId, request.EbookId",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync__method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition__method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition__method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__true__method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__false__method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "kind": "next",
          "line": 293,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge__method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return",
          "kind": "return",
          "line": 294,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return__method:gc2kp9:knowledge-api-group-mappings__action_297_knowledge_api_group_mappings_mapping_297_21__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_294_knowledge_api_group_mappings_return_294_20__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_297_knowledge_api_group_mappings_mapping_297_21__linear",
          "kind": "next",
          "line": 297,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_297_knowledge_api_group_mappings_mapping_297_21__linear__method:gc2kp9:knowledge-api-group-mappings__action_299_knowledge_api_group_mappings_repository_read_299_22__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_297_knowledge_api_group_mappings_mapping_297_21__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_299_knowledge_api_group_mappings_repository_read_299_22__linear",
          "kind": "next",
          "line": 299,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_299_knowledge_api_group_mappings_repository_read_299_22__linear__method:gc2kp9:knowledge-api-group-mappings__action_300_knowledge_api_group_mappings_await_300_23__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_299_knowledge_api_group_mappings_repository_read_299_22__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_300_knowledge_api_group_mappings_await_300_23__await",
          "kind": "next",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_300_knowledge_api_group_mappings_await_300_23__await__call_method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_300_knowledge_api_group_mappings_await_300_23__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync",
          "kind": "call",
          "label": "request.Answer, request.Context, tenantId",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync__method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition__method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition__method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__true__method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__false__method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "kind": "next",
          "line": 301,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge__method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return",
          "kind": "return",
          "line": 302,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return__method:gc2kp9:knowledge-api-group-mappings__action_305_knowledge_api_group_mappings_mapping_305_26__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_302_knowledge_api_group_mappings_return_302_25__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_305_knowledge_api_group_mappings_mapping_305_26__linear",
          "kind": "next",
          "line": 305,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_305_knowledge_api_group_mappings_mapping_305_26__linear__method:gc2kp9:knowledge-api-group-mappings__action_307_knowledge_api_group_mappings_repository_read_307_27__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_305_knowledge_api_group_mappings_mapping_305_26__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_307_knowledge_api_group_mappings_repository_read_307_27__linear",
          "kind": "next",
          "line": 307,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_307_knowledge_api_group_mappings_repository_read_307_27__linear__method:gc2kp9:knowledge-api-group-mappings__action_308_knowledge_api_group_mappings_await_308_28__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_307_knowledge_api_group_mappings_repository_read_307_27__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_308_knowledge_api_group_mappings_await_308_28__await",
          "kind": "next",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_308_knowledge_api_group_mappings_await_308_28__await__call_method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_308_knowledge_api_group_mappings_await_308_28__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "kind": "call",
          "label": "request.QueryText, tenantId, request.Limit",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync__method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition__method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition__method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__true__method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__false__method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "kind": "next",
          "line": 309,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge__method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return",
          "kind": "return",
          "line": 310,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return__method:gc2kp9:knowledge-api-group-mappings__action_313_knowledge_api_group_mappings_mapping_313_31__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_310_knowledge_api_group_mappings_return_310_30__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_313_knowledge_api_group_mappings_mapping_313_31__linear",
          "kind": "next",
          "line": 313,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_313_knowledge_api_group_mappings_mapping_313_31__linear__method:gc2kp9:knowledge-api-group-mappings__action_315_knowledge_api_group_mappings_repository_read_315_32__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_313_knowledge_api_group_mappings_mapping_313_31__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_315_knowledge_api_group_mappings_repository_read_315_32__linear",
          "kind": "next",
          "line": 315,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_315_knowledge_api_group_mappings_repository_read_315_32__linear__method:gc2kp9:knowledge-api-group-mappings__action_316_knowledge_api_group_mappings_await_316_33__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_315_knowledge_api_group_mappings_repository_read_315_32__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_316_knowledge_api_group_mappings_await_316_33__await",
          "kind": "next",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_316_knowledge_api_group_mappings_await_316_33__await__call_method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_316_knowledge_api_group_mappings_await_316_33__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync",
          "kind": "call",
          "label": "request.Question, tenantId, request.EbookId, request.Limit",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync__method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition__method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition__method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__true__method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__false__method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "kind": "next",
          "line": 317,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge__method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return",
          "kind": "return",
          "line": 318,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return__method:gc2kp9:knowledge-api-group-mappings__action_321_knowledge_api_group_mappings_mapping_321_36__linear",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_318_knowledge_api_group_mappings_return_318_35__return",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_321_knowledge_api_group_mappings_mapping_321_36__linear",
          "kind": "next",
          "line": 321,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_321_knowledge_api_group_mappings_mapping_321_36__linear__method:gc2kp9:knowledge-api-group-mappings__action_323_knowledge_api_group_mappings_await_323_37__await",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_321_knowledge_api_group_mappings_mapping_321_36__linear",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_323_knowledge_api_group_mappings_await_323_37__await",
          "kind": "next",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_323_knowledge_api_group_mappings_await_323_37__await__call_method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_323_knowledge_api_group_mappings_await_323_37__await",
          "to": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync",
          "kind": "call",
          "label": "none",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync__method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition",
          "from": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition__method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__true",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition__method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__false",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__condition",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__true__method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__true",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__false__method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__false",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "kind": "next",
          "line": 324,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge__method:gc2kp9:knowledge-api-group-mappings__action_327_knowledge_api_group_mappings_return_327_39__return",
          "from": "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge",
          "to": "method:gc2kp9:knowledge-api-group-mappings__action_327_knowledge_api_group_mappings_return_327_39__return",
          "kind": "return",
          "line": 327,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_GetKnowledgeAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_268_IKnowledgeService_GetKnowledgeAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.GetKnowledgeAsync",
          "line": 268,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.GetKnowledgeAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_GetGraphDataAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_276_IKnowledgeService_GetGraphDataAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.GetGraphDataAsync",
          "line": 276,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.GetGraphDataAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_GetSummaryAndQuizAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_284_IKnowledgeService_GetSummaryAndQuizAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.GetSummaryAndQuizAsync",
          "line": 284,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.GetSummaryAndQuizAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_GetKnowledgeMapAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_292_IKnowledgeService_GetKnowledgeMapAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.GetKnowledgeMapAsync",
          "line": 292,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.GetKnowledgeMapAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_VerifyGroundednessAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_300_IKnowledgeService_VerifyGroundednessAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.VerifyGroundednessAsync",
          "line": 300,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.VerifyGroundednessAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_308_IKnowledgeService_SearchLibrarySemanticallyAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.SearchLibrarySemanticallyAsync",
          "line": 308,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.SearchLibrarySemanticallyAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_AskQuestionAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_316_IKnowledgeService_AskQuestionAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.AskQuestionAsync",
          "line": 316,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.AskQuestionAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync__jump_NexusReader_Application_Abstractions_Services_IKnowledgeService_ClearCacheAsync",
          "fromNodeId": "method:gc2kp9:knowledge-api-group-mappings__call_323_IKnowledgeService_ClearCacheAsync",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Abstractions.Services",
          "targetHint": "IKnowledgeService.ClearCacheAsync",
          "line": 323,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IKnowledgeService.ClearCacheAsync in NexusReader.Application.Abstractions.Services could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:gc2kp9:knowledge-api-group-mappings__action_267_guard_clause_267__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_269_branch_269__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_269_knowledge_api_group_mappings_guard_clause_269_4__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_277_knowledge_api_group_mappings_guard_clause_277_9__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_285_knowledge_api_group_mappings_guard_clause_285_14__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_293_knowledge_api_group_mappings_guard_clause_293_19__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_301_knowledge_api_group_mappings_guard_clause_301_24__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_309_knowledge_api_group_mappings_guard_clause_309_29__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_317_knowledge_api_group_mappings_guard_clause_317_34__merge",
        "method:gc2kp9:knowledge-api-group-mappings__action_324_knowledge_api_group_mappings_guard_clause_324_38__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 261,
        "end": 328
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 261,
          "summary": "Control-flow fragment extracted for method Knowledge API group mappings.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:ggo2op:ingestebook-post-api-library-ingest__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:ggo2op:ingestebook-post-api-library-ingest",
      "ownerSymbolName": "IngestEbook (POST /api/library/ingest)",
      "entryNodeId": "method:ggo2op:ingestebook-post-api-library-ingest__entry",
      "exitNodeIds": [
        "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return",
        "method:ggo2op:ingestebook-post-api-library-ingest__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__entry",
          "kind": "entry",
          "label": "IngestEbook (POST /api/library/ingest) entry",
          "line": 330,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Accept base64 EPUB and optional cover, construct IngestEbookCommand and send via MediatR to ingest an ebook for the authenticated user."
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_330_ingestebook_post_api_library_ingest_mapping_330_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 330,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/api/library/ingest\", async ([FromBody] IngestEbookRequest request, ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_ingestebook_post_api_library_ingest_repository_read_332_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition",
          "kind": "condition",
          "label": "userId is null or empty",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Returns Unauthorized if user not authenticated"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__true",
          "kind": "branch-true",
          "label": "Unauthorized",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "kind": "statement",
          "label": "merge",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)) return Results.Unauthorized(",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(userId)) return Results.Unauthorized();"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_335_data_transform_335__linear",
          "kind": "statement",
          "label": "Decode base64 payloads",
          "line": 335,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Convert.FromBase64String for epub and optional cover"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor_",
          "kind": "call",
          "label": "IngestEbookCommand (ctor)",
          "line": 340,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "title, author, coverData, epubData, description, userId"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_ingestebook_post_api_library_ingest_await_349_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(command);"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_orchestration_349__linear",
          "kind": "statement",
          "label": "Send command to mediator and handle result",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "If result.IsSuccess returns Id else BadRequest with error"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send",
          "kind": "call",
          "label": "IMediator.Send",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "command"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(new { Id = result.Value }",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(new { Id = result.Value });"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(result.Errors.FirstOrDefault()?.Message ?? \"Ingestion failed\");"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_repository_read_352_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "return Results.BadRequest(result.Errors.FirstOrDefault()?.Message ?? \"Ingestion failed\");"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 353,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__entry__method:ggo2op:ingestebook-post-api-library-ingest__action_330_ingestebook_post_api_library_ingest_mapping_330_0__linear",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__entry",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_330_ingestebook_post_api_library_ingest_mapping_330_0__linear",
          "kind": "next",
          "line": 330,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_330_ingestebook_post_api_library_ingest_mapping_330_0__linear__method:ggo2op:ingestebook-post-api-library-ingest__action_332_ingestebook_post_api_library_ingest_repository_read_332_1__linear",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_330_ingestebook_post_api_library_ingest_mapping_330_0__linear",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_ingestebook_post_api_library_ingest_repository_read_332_1__linear",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_ingestebook_post_api_library_ingest_repository_read_332_1__linear__method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_ingestebook_post_api_library_ingest_repository_read_332_1__linear",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__true",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__true",
          "kind": "condition-true",
          "label": "Unauthorized",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__false",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__true__method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__true",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__false__method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__false",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "kind": "next",
          "line": 332,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge__method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__true",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__false",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__true__method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__true",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__false__method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__false",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "kind": "next",
          "line": 333,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge__method:ggo2op:ingestebook-post-api-library-ingest__action_335_data_transform_335__linear",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_335_data_transform_335__linear",
          "kind": "next",
          "line": 335,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_335_data_transform_335__linear__call_method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor_",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_335_data_transform_335__linear",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor_",
          "kind": "call",
          "label": "title, author, coverData, epubData, description, userId",
          "line": 340,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor___method:ggo2op:ingestebook-post-api-library-ingest__action_349_ingestebook_post_api_library_ingest_await_349_3__await",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor_",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_ingestebook_post_api_library_ingest_await_349_3__await",
          "kind": "next",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_ingestebook_post_api_library_ingest_await_349_3__await__method:ggo2op:ingestebook-post-api-library-ingest__action_349_orchestration_349__linear",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_ingestebook_post_api_library_ingest_await_349_3__await",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_orchestration_349__linear",
          "kind": "next",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_orchestration_349__linear__call_method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_349_orchestration_349__linear",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send",
          "kind": "call",
          "label": "command",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send__method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__true",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition__method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__false",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__condition",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__true__method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__true",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__false__method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__false",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "kind": "next",
          "line": 350,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge__method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return",
          "kind": "return",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return__method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_repository_read_352_5__linear",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_return_352_6__return",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_repository_read_352_5__linear",
          "kind": "next",
          "line": 352,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_repository_read_352_5__linear__implicit_return",
          "from": "method:ggo2op:ingestebook-post-api-library-ingest__action_352_ingestebook_post_api_library_ingest_repository_read_352_5__linear",
          "to": "method:ggo2op:ingestebook-post-api-library-ingest__implicit_return",
          "kind": "return",
          "line": 353,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor___jump_NexusReader_Application_Commands_Library_IngestEbookCommand_ctor_",
          "fromNodeId": "method:ggo2op:ingestebook-post-api-library-ingest__call_340_IngestEbookCommand_ctor_",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Commands.Library",
          "targetHint": "IngestEbookCommand (ctor)",
          "line": 340,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IngestEbookCommand (ctor) in NexusReader.Application.Commands.Library could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send__jump_unknown_IMediator_Send",
          "fromNodeId": "method:ggo2op:ingestebook-post-api-library-ingest__call_349_IMediator_Send",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IMediator.Send",
          "line": 349,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IMediator.Send in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:ggo2op:ingestebook-post-api-library-ingest__action_332_guard_clause_332__merge",
        "method:ggo2op:ingestebook-post-api-library-ingest__action_333_ingestebook_post_api_library_ingest_guard_clause_333_2__merge",
        "method:ggo2op:ingestebook-post-api-library-ingest__action_350_ingestebook_post_api_library_ingest_guard_clause_350_4__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 330,
        "end": 353
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 330,
          "summary": "Control-flow fragment extracted for method IngestEbook (POST /api/library/ingest).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:veacg9:getmyebooks-get-api-library-books__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:veacg9:getmyebooks-get-api-library-books",
      "ownerSymbolName": "GetMyEbooks (GET /api/library/books)",
      "entryNodeId": "method:veacg9:getmyebooks-get-api-library-books__entry",
      "exitNodeIds": [
        "method:veacg9:getmyebooks-get-api-library-books__action_364_getmyebooks_get_api_library_books_return_364_5__return"
      ],
      "nodes": [
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__entry",
          "kind": "entry",
          "label": "GetMyEbooks (GET /api/library/books) entry",
          "line": 355,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Return list of ebooks for the authenticated user via a GetMyEbooksQuery."
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_355_getmyebooks_get_api_library_books_mapping_355_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 355,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/api/library/books\", async (ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_getmyebooks_get_api_library_books_repository_read_357_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition",
          "kind": "condition",
          "label": "userId null/empty",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Return Unauthorized if missing"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__true",
          "kind": "branch-true",
          "label": "Unauthorized",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "kind": "statement",
          "label": "merge",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(userId)) return Results.Unauthorized(",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(userId)) return Results.Unauthorized();"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_360_getmyebooks_get_api_library_books_await_360_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(new GetMyEbooksQuery(userId));"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor_",
          "kind": "call",
          "label": "GetMyEbooksQuery (ctor)",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "userId"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send",
          "kind": "call",
          "label": "IMediator.Send",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "GetMyEbooksQuery(userId)"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition",
          "kind": "condition",
          "label": "Return OK or BadRequest based on mediator result",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "If result.IsSuccess -> Ok(result.Value) else BadRequest(error)"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__true",
          "kind": "branch-true",
          "label": "true",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__false",
          "kind": "branch-false",
          "label": "false",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "kind": "statement",
          "label": "merge",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition",
          "kind": "condition",
          "label": "result.IsSuccess) return Results.Ok(result.Value",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsSuccess) return Results.Ok(result.Value);"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_364_getmyebooks_get_api_library_books_return_364_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 364,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(errorMsg);"
        }
      ],
      "edges": [
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__entry__method:veacg9:getmyebooks-get-api-library-books__action_355_getmyebooks_get_api_library_books_mapping_355_0__linear",
          "from": "method:veacg9:getmyebooks-get-api-library-books__entry",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_355_getmyebooks_get_api_library_books_mapping_355_0__linear",
          "kind": "next",
          "line": 355,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_355_getmyebooks_get_api_library_books_mapping_355_0__linear__method:veacg9:getmyebooks-get-api-library-books__action_357_getmyebooks_get_api_library_books_repository_read_357_1__linear",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_355_getmyebooks_get_api_library_books_mapping_355_0__linear",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_getmyebooks_get_api_library_books_repository_read_357_1__linear",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_getmyebooks_get_api_library_books_repository_read_357_1__linear__method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_getmyebooks_get_api_library_books_repository_read_357_1__linear",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition__method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__true",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__true",
          "kind": "condition-true",
          "label": "Unauthorized",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition__method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__false",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__true__method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__true",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__false__method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__false",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "kind": "next",
          "line": 357,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge__method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition__method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__true",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition__method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__false",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__true__method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__true",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__false__method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__false",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "kind": "next",
          "line": 358,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge__method:veacg9:getmyebooks-get-api-library-books__action_360_getmyebooks_get_api_library_books_await_360_3__await",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_360_getmyebooks_get_api_library_books_await_360_3__await",
          "kind": "next",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_360_getmyebooks_get_api_library_books_await_360_3__await__call_method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor_",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_360_getmyebooks_get_api_library_books_await_360_3__await",
          "to": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor_",
          "kind": "call",
          "label": "userId",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor___call_method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send",
          "from": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor_",
          "to": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send",
          "kind": "call",
          "label": "GetMyEbooksQuery(userId)",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send__method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition",
          "from": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition__method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__true",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__true",
          "kind": "condition-true",
          "label": "true",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition__method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__false",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__false",
          "kind": "condition-false",
          "label": "false",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__true__method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__true",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__false__method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__false",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge__method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition__method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__true",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition__method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__false",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__condition",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__true__method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__true",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__false__method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__false",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "kind": "next",
          "line": 361,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge__method:veacg9:getmyebooks-get-api-library-books__action_364_getmyebooks_get_api_library_books_return_364_5__return",
          "from": "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge",
          "to": "method:veacg9:getmyebooks-get-api-library-books__action_364_getmyebooks_get_api_library_books_return_364_5__return",
          "kind": "return",
          "line": 364,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor___jump_NexusReader_Application_Queries_Library_GetMyEbooksQuery_ctor_",
          "fromNodeId": "method:veacg9:getmyebooks-get-api-library-books__call_360_GetMyEbooksQuery_ctor_",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Queries.Library",
          "targetHint": "GetMyEbooksQuery (ctor)",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target GetMyEbooksQuery (ctor) in NexusReader.Application.Queries.Library could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send__jump_unknown_IMediator_Send",
          "fromNodeId": "method:veacg9:getmyebooks-get-api-library-books__call_360_IMediator_Send",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IMediator.Send",
          "line": 360,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IMediator.Send in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:veacg9:getmyebooks-get-api-library-books__action_357_guard_clause_357__merge",
        "method:veacg9:getmyebooks-get-api-library-books__action_358_getmyebooks_get_api_library_books_guard_clause_358_2__merge",
        "method:veacg9:getmyebooks-get-api-library-books__action_361_branch_361__merge",
        "method:veacg9:getmyebooks-get-api-library-books__action_361_getmyebooks_get_api_library_books_guard_clause_361_4__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 355,
        "end": 365
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 355,
          "summary": "Control-flow fragment extracted for method GetMyEbooks (GET /api/library/books).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8lc46f:stripewebhook-post-api-stripewebhook__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:8lc46f:stripewebhook-post-api-stripewebhook",
      "ownerSymbolName": "StripeWebhook (POST /api/StripeWebhook)",
      "entryNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook__entry",
      "exitNodeIds": [
        "method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return",
        "method:8lc46f:stripewebhook-post-api-stripewebhook__action_406_stripewebhook_post_api_stripewebhook_return_406_12__return"
      ],
      "nodes": [
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__entry",
          "kind": "entry",
          "label": "StripeWebhook (POST /api/StripeWebhook) entry",
          "line": 367,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Receive Stripe webhook, validate signature, dispatch handling based on event type and update user subscription state."
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_367_stripewebhook_post_api_stripewebhook_mapping_367_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 367,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/api/StripeWebhook\", async ("
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_373_stripewebhook_post_api_stripewebhook_await_373_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 373,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "using var dbContext = await dbContextFactory.CreateDbContextAsync();"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_await_374_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var json = await new StreamReader(context.Request.Body).ReadToEndAsync();"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_repository_read_374_2__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var json = await new StreamReader(context.Request.Body).ReadToEndAsync();"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_io_374__linear",
          "kind": "statement",
          "label": "Read raw request body",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "var json = await new StreamReader(context.Request.Body).ReadToEndAsync();"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_375_config_read_375__linear",
          "kind": "statement",
          "label": "Read webhook secret from configuration",
          "line": 375,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "configuration['Stripe:WebhookSecret']"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_377_stripewebhook_post_api_stripewebhook_try_377_4__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 377,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent",
          "kind": "call",
          "label": "EventUtility.ConstructEvent",
          "line": 379,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "json, context.Request.Headers['Stripe-Signature'], webhookSecret"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_381_stripewebhook_post_api_stripewebhook_repository_read_381_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 381,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "context.Request.Headers[\"Stripe-Signature\"],"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_branch_switch_385__linear",
          "kind": "statement",
          "label": "Switch on stripeEvent.Type",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Handles CheckoutSessionCompleted, CustomerSubscriptionUpdated, CustomerSubscriptionDeleted and calls local handlers accordingly"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch",
          "kind": "switch",
          "label": "stripeEvent.Type",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82,
          "detail": "switch (stripeEvent.Type)"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge",
          "kind": "statement",
          "label": "merge",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__case_0",
          "kind": "case",
          "label": "case",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_389_stripewebhook_post_api_stripewebhook_await_389_7__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionSuccess(session?.CustomerEmail, session?.Metadata, userManager, dbContext);"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "HandleSubscriptionSuccess",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "session?.CustomerEmail, session?.Metadata, userManager, dbContext"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_394_stripewebhook_post_api_stripewebhook_await_394_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionSuccess(subscription?.Metadata[\"CustomerEmail\"], subscription?.Metadata, userManager, dbContext);"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "HandleSubscriptionSuccess",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "subscription?.Metadata['CustomerEmail'], subscription?.Metadata, userManager, dbContext"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_399_stripewebhook_post_api_stripewebhook_await_399_9__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await HandleSubscriptionCancellation(deletedSubscription?.Metadata[\"CustomerEmail\"], userManager, dbContext);"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation",
          "kind": "call",
          "label": "HandleSubscriptionCancellation",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "deletedSubscription?.Metadata['CustomerEmail'], userManager, dbContext"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return",
          "kind": "return",
          "label": "Returns result",
          "line": 402,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Ok();"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_stripewebhook_post_api_stripewebhook_catch_404_11__catch",
          "kind": "catch",
          "label": "catch StripeException e",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "catch (StripeException e)"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_error_handling_404__linear",
          "kind": "statement",
          "label": "Catch StripeException",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Returns BadRequest(e.Message) on StripeException"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_406_stripewebhook_post_api_stripewebhook_return_406_12__return",
          "kind": "return",
          "label": "Returns result",
          "line": 406,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.BadRequest(e.Message);"
        }
      ],
      "edges": [
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__entry__method:8lc46f:stripewebhook-post-api-stripewebhook__action_367_stripewebhook_post_api_stripewebhook_mapping_367_0__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__entry",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_367_stripewebhook_post_api_stripewebhook_mapping_367_0__linear",
          "kind": "next",
          "line": 367,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_367_stripewebhook_post_api_stripewebhook_mapping_367_0__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_373_stripewebhook_post_api_stripewebhook_await_373_1__await",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_367_stripewebhook_post_api_stripewebhook_mapping_367_0__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_373_stripewebhook_post_api_stripewebhook_await_373_1__await",
          "kind": "next",
          "line": 373,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_373_stripewebhook_post_api_stripewebhook_await_373_1__await__method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_await_374_3__await",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_373_stripewebhook_post_api_stripewebhook_await_373_1__await",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_await_374_3__await",
          "kind": "next",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_await_374_3__await__method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_repository_read_374_2__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_await_374_3__await",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_repository_read_374_2__linear",
          "kind": "next",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_repository_read_374_2__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_io_374__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_stripewebhook_post_api_stripewebhook_repository_read_374_2__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_io_374__linear",
          "kind": "next",
          "line": 374,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_io_374__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_375_config_read_375__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_374_io_374__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_375_config_read_375__linear",
          "kind": "next",
          "line": 375,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_375_config_read_375__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_377_stripewebhook_post_api_stripewebhook_try_377_4__try",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_375_config_read_375__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_377_stripewebhook_post_api_stripewebhook_try_377_4__try",
          "kind": "next",
          "line": 377,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.84
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_377_stripewebhook_post_api_stripewebhook_try_377_4__try__call_method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_377_stripewebhook_post_api_stripewebhook_try_377_4__try",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent",
          "kind": "call",
          "label": "json, context.Request.Headers['Stripe-Signature'], webhookSecret",
          "line": 379,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent__method:8lc46f:stripewebhook-post-api-stripewebhook__action_381_stripewebhook_post_api_stripewebhook_repository_read_381_5__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_381_stripewebhook_post_api_stripewebhook_repository_read_381_5__linear",
          "kind": "next",
          "line": 381,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_381_stripewebhook_post_api_stripewebhook_repository_read_381_5__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_branch_switch_385__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_381_stripewebhook_post_api_stripewebhook_repository_read_381_5__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_branch_switch_385__linear",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_branch_switch_385__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_branch_switch_385__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch__method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__case_0",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__case_0",
          "kind": "case",
          "label": "case",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__case_0__method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__case_0",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge",
          "kind": "next",
          "line": 385,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.82
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge__method:8lc46f:stripewebhook-post-api-stripewebhook__action_389_stripewebhook_post_api_stripewebhook_await_389_7__await",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_389_stripewebhook_post_api_stripewebhook_await_389_7__await",
          "kind": "next",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_389_stripewebhook_post_api_stripewebhook_await_389_7__await__call_method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_389_stripewebhook_post_api_stripewebhook_await_389_7__await",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "session?.CustomerEmail, session?.Metadata, userManager, dbContext",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess__method:8lc46f:stripewebhook-post-api-stripewebhook__action_394_stripewebhook_post_api_stripewebhook_await_394_8__await",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_394_stripewebhook_post_api_stripewebhook_await_394_8__await",
          "kind": "next",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_394_stripewebhook_post_api_stripewebhook_await_394_8__await__call_method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_394_stripewebhook_post_api_stripewebhook_await_394_8__await",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess",
          "kind": "call",
          "label": "subscription?.Metadata['CustomerEmail'], subscription?.Metadata, userManager, dbContext",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess__method:8lc46f:stripewebhook-post-api-stripewebhook__action_399_stripewebhook_post_api_stripewebhook_await_399_9__await",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_399_stripewebhook_post_api_stripewebhook_await_399_9__await",
          "kind": "next",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_399_stripewebhook_post_api_stripewebhook_await_399_9__await__call_method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_399_stripewebhook_post_api_stripewebhook_await_399_9__await",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation",
          "kind": "call",
          "label": "deletedSubscription?.Metadata['CustomerEmail'], userManager, dbContext",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation__method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return",
          "kind": "return",
          "line": 402,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return__method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_stripewebhook_post_api_stripewebhook_catch_404_11__catch",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_402_stripewebhook_post_api_stripewebhook_return_402_10__return",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_stripewebhook_post_api_stripewebhook_catch_404_11__catch",
          "kind": "exception",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_stripewebhook_post_api_stripewebhook_catch_404_11__catch__method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_error_handling_404__linear",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_stripewebhook_post_api_stripewebhook_catch_404_11__catch",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_error_handling_404__linear",
          "kind": "next",
          "line": 404,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_error_handling_404__linear__method:8lc46f:stripewebhook-post-api-stripewebhook__action_406_stripewebhook_post_api_stripewebhook_return_406_12__return",
          "from": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_404_error_handling_404__linear",
          "to": "method:8lc46f:stripewebhook-post-api-stripewebhook__action_406_stripewebhook_post_api_stripewebhook_return_406_12__return",
          "kind": "return",
          "line": 406,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent__jump_unknown_EventUtility_ConstructEvent",
          "fromNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_379_EventUtility_ConstructEvent",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "EventUtility.ConstructEvent",
          "line": 379,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target EventUtility.ConstructEvent in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess__jump_NexusReader_Web_Program_cs_HandleSubscriptionSuccess",
          "fromNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_389_HandleSubscriptionSuccess",
          "kind": "call-target",
          "targetNodeId": "method:13xh0j3:handlesubscriptionsuccess",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionSuccess",
          "line": 389,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionSuccess resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess__jump_NexusReader_Web_Program_cs_HandleSubscriptionSuccess",
          "fromNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_394_HandleSubscriptionSuccess",
          "kind": "call-target",
          "targetNodeId": "method:13xh0j3:handlesubscriptionsuccess",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionSuccess",
          "line": 394,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionSuccess resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        },
        {
          "id": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation__jump_NexusReader_Web_Program_cs_HandleSubscriptionCancellation",
          "fromNodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook__call_399_HandleSubscriptionCancellation",
          "kind": "call-target",
          "targetNodeId": "method:72bnlj:handlesubscriptioncancellation",
          "targetPath": "NexusReader.Web/Program.cs",
          "targetHint": "HandleSubscriptionCancellation",
          "line": 399,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target HandleSubscriptionCancellation resolved to NexusReader.Web/Program.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:8lc46f:stripewebhook-post-api-stripewebhook__action_385_stripewebhook_post_api_stripewebhook_switch_385_6__switch_merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 367,
        "end": 408
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 367,
          "summary": "Control-flow fragment extracted for method StripeWebhook (POST /api/StripeWebhook).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13xh0j3:handlesubscriptionsuccess__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:13xh0j3:handlesubscriptionsuccess",
      "ownerSymbolName": "HandleSubscriptionSuccess",
      "entryNodeId": "method:13xh0j3:handlesubscriptionsuccess__entry",
      "exitNodeIds": [
        "method:13xh0j3:handlesubscriptionsuccess__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__entry",
          "kind": "entry",
          "label": "HandleSubscriptionSuccess entry",
          "line": 410,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Update a user's subscription plan and AI token limit after successful Stripe checkout/subscription update."
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Returns immediately when no email provided"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__true",
          "kind": "branch-true",
          "label": "return",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "kind": "statement",
          "label": "merge",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(email)) return;"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_await_418_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_repository_read_418_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_data_read_418__linear",
          "kind": "statement",
          "label": "Lookup user and subscription plan",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Find user by email and query SubscriptionPlans for specified plan"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.FindByEmailAsync",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "email"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition",
          "kind": "condition",
          "label": "user != null",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (user != null)"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_422_handlesubscriptionsuccess_await_422_4__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var plan = await dbContext.SubscriptionPlans.FirstOrDefaultAsync(p => p.PlanName == planName);"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "AppDbContext.SubscriptionPlans.FirstOrDefaultAsync",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "p => p.PlanName == planName"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition",
          "kind": "condition",
          "label": "plan != null",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (plan != null)"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__true",
          "kind": "branch-true",
          "label": "true",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__false",
          "kind": "branch-false",
          "label": "false",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "kind": "statement",
          "label": "merge",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_426_persistence_write_426__linear",
          "kind": "statement",
          "label": "Update user subscription fields and persist",
          "line": 426,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Set user.SubscriptionPlanId and user.AITokenLimit and call userManager.UpdateAsync"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_430_handlesubscriptionsuccess_await_430_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.UpdateAsync(user);"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.UpdateAsync",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "user"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 432,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__entry__method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition",
          "from": "method:13xh0j3:handlesubscriptionsuccess__entry",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition__method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__true",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__true",
          "kind": "condition-true",
          "label": "return",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition__method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__false",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__true__method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__true",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__false__method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__false",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge__method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition__method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__true",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition__method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__false",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__true__method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__true",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__false__method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__false",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "kind": "next",
          "line": 416,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge__method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_await_418_2__await",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_await_418_2__await",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_await_418_2__await__method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_repository_read_418_1__linear",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_await_418_2__await",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_repository_read_418_1__linear",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_repository_read_418_1__linear__method:13xh0j3:handlesubscriptionsuccess__action_418_data_read_418__linear",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_418_handlesubscriptionsuccess_repository_read_418_1__linear",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_418_data_read_418__linear",
          "kind": "next",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_418_data_read_418__linear__call_method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_418_data_read_418__linear",
          "to": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call",
          "label": "email",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync__method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition",
          "from": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition__method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__true",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition__method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__false",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__true__method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__true",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__false__method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__false",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "kind": "next",
          "line": 419,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge__method:13xh0j3:handlesubscriptionsuccess__action_422_handlesubscriptionsuccess_await_422_4__await",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_422_handlesubscriptionsuccess_await_422_4__await",
          "kind": "next",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_422_handlesubscriptionsuccess_await_422_4__await__call_method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_422_handlesubscriptionsuccess_await_422_4__await",
          "to": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call",
          "label": "p => p.PlanName == planName",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync__method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition",
          "from": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition__method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__true",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__true",
          "kind": "condition-true",
          "label": "true",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition__method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__false",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__condition",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__false",
          "kind": "condition-false",
          "label": "false",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__true__method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__true",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__false__method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__false",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "kind": "next",
          "line": 424,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge__method:13xh0j3:handlesubscriptionsuccess__action_426_persistence_write_426__linear",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_426_persistence_write_426__linear",
          "kind": "next",
          "line": 426,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_426_persistence_write_426__linear__method:13xh0j3:handlesubscriptionsuccess__action_430_handlesubscriptionsuccess_await_430_6__await",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_426_persistence_write_426__linear",
          "to": "method:13xh0j3:handlesubscriptionsuccess__action_430_handlesubscriptionsuccess_await_430_6__await",
          "kind": "next",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__action_430_handlesubscriptionsuccess_await_430_6__await__call_method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync",
          "from": "method:13xh0j3:handlesubscriptionsuccess__action_430_handlesubscriptionsuccess_await_430_6__await",
          "to": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync",
          "kind": "call",
          "label": "user",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync__implicit_return",
          "from": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync",
          "to": "method:13xh0j3:handlesubscriptionsuccess__implicit_return",
          "kind": "return",
          "line": 432,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync__jump_unknown_UserManager_NexusUser_FindByEmailAsync",
          "fromNodeId": "method:13xh0j3:handlesubscriptionsuccess__call_418_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.FindByEmailAsync",
          "line": 418,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.FindByEmailAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync__jump_unknown_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "fromNodeId": "method:13xh0j3:handlesubscriptionsuccess__call_422_AppDbContext_SubscriptionPlans_FirstOrDefaultAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AppDbContext.SubscriptionPlans.FirstOrDefaultAsync",
          "line": 422,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target AppDbContext.SubscriptionPlans.FirstOrDefaultAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync__jump_unknown_UserManager_NexusUser_UpdateAsync",
          "fromNodeId": "method:13xh0j3:handlesubscriptionsuccess__call_430_UserManager_NexusUser_UpdateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.UpdateAsync",
          "line": 430,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.UpdateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:13xh0j3:handlesubscriptionsuccess__action_416_guard_clause_416__merge",
        "method:13xh0j3:handlesubscriptionsuccess__action_416_handlesubscriptionsuccess_guard_clause_416_0__merge",
        "method:13xh0j3:handlesubscriptionsuccess__action_419_handlesubscriptionsuccess_branch_419_3__merge",
        "method:13xh0j3:handlesubscriptionsuccess__action_424_handlesubscriptionsuccess_branch_424_5__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 410,
        "end": 432
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 410,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionSuccess.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:72bnlj:handlesubscriptioncancellation__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:72bnlj:handlesubscriptioncancellation",
      "ownerSymbolName": "HandleSubscriptionCancellation",
      "entryNodeId": "method:72bnlj:handlesubscriptioncancellation__entry",
      "exitNodeIds": [
        "method:72bnlj:handlesubscriptioncancellation__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__entry",
          "kind": "entry",
          "label": "HandleSubscriptionCancellation entry",
          "line": 434,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Revert a user's subscription to free plan and reset AI token limit on subscription deletion."
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Returns immediately when no email provided"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__true",
          "kind": "branch-true",
          "label": "return",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "kind": "statement",
          "label": "merge",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(email)",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(email)) return;"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_await_441_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_repository_read_441_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var user = await userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_persistence_read_441__linear",
          "kind": "statement",
          "label": "Lookup user and free plan",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Find user and find free subscription plan by id"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.FindByEmailAsync",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "email"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition",
          "kind": "condition",
          "label": "user != null",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (user != null)"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__true",
          "kind": "branch-true",
          "label": "true",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__false",
          "kind": "branch-false",
          "label": "false",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_await_444_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var freePlan = await dbContext.SubscriptionPlans.FindAsync(SubscriptionPlan.FreeId);"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_repository_read_444_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var freePlan = await dbContext.SubscriptionPlans.FindAsync(SubscriptionPlan.FreeId);"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync",
          "kind": "call",
          "label": "AppDbContext.SubscriptionPlans.FindAsync",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "SubscriptionPlan.FreeId"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_445_persistence_write_445__linear",
          "kind": "statement",
          "label": "Assign free plan and update user",
          "line": 445,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Set user.SubscriptionPlanId and AITokenLimit then userManager.UpdateAsync"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_447_handlesubscriptioncancellation_await_447_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.UpdateAsync(user);"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.UpdateAsync",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "user"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 449,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__entry__method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition",
          "from": "method:72bnlj:handlesubscriptioncancellation__entry",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition__method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__true",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__true",
          "kind": "condition-true",
          "label": "return",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition__method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__false",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__true__method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__true",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__false__method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__false",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge__method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition__method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__true",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition__method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__false",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__true__method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__true",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__false__method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__false",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "kind": "next",
          "line": 439,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge__method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_await_441_2__await",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_await_441_2__await",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_await_441_2__await__method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_repository_read_441_1__linear",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_await_441_2__await",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_repository_read_441_1__linear",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_repository_read_441_1__linear__method:72bnlj:handlesubscriptioncancellation__action_441_persistence_read_441__linear",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_441_handlesubscriptioncancellation_repository_read_441_1__linear",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_441_persistence_read_441__linear",
          "kind": "next",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_441_persistence_read_441__linear__call_method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_441_persistence_read_441__linear",
          "to": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call",
          "label": "email",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync__method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition",
          "from": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition__method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__true",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__true",
          "kind": "condition-true",
          "label": "true",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition__method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__false",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__condition",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__false",
          "kind": "condition-false",
          "label": "false",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__true__method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__true",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__false__method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__false",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "kind": "next",
          "line": 442,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge__method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_await_444_5__await",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_await_444_5__await",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_await_444_5__await__method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_repository_read_444_4__linear",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_await_444_5__await",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_repository_read_444_4__linear",
          "kind": "next",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_repository_read_444_4__linear__call_method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_444_handlesubscriptioncancellation_repository_read_444_4__linear",
          "to": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync",
          "kind": "call",
          "label": "SubscriptionPlan.FreeId",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync__method:72bnlj:handlesubscriptioncancellation__action_445_persistence_write_445__linear",
          "from": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_445_persistence_write_445__linear",
          "kind": "next",
          "line": 445,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_445_persistence_write_445__linear__method:72bnlj:handlesubscriptioncancellation__action_447_handlesubscriptioncancellation_await_447_6__await",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_445_persistence_write_445__linear",
          "to": "method:72bnlj:handlesubscriptioncancellation__action_447_handlesubscriptioncancellation_await_447_6__await",
          "kind": "next",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__action_447_handlesubscriptioncancellation_await_447_6__await__call_method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync",
          "from": "method:72bnlj:handlesubscriptioncancellation__action_447_handlesubscriptioncancellation_await_447_6__await",
          "to": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync",
          "kind": "call",
          "label": "user",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync__implicit_return",
          "from": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync",
          "to": "method:72bnlj:handlesubscriptioncancellation__implicit_return",
          "kind": "return",
          "line": 449,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync__jump_unknown_UserManager_NexusUser_FindByEmailAsync",
          "fromNodeId": "method:72bnlj:handlesubscriptioncancellation__call_441_UserManager_NexusUser_FindByEmailAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.FindByEmailAsync",
          "line": 441,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.FindByEmailAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync__jump_unknown_AppDbContext_SubscriptionPlans_FindAsync",
          "fromNodeId": "method:72bnlj:handlesubscriptioncancellation__call_444_AppDbContext_SubscriptionPlans_FindAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "AppDbContext.SubscriptionPlans.FindAsync",
          "line": 444,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target AppDbContext.SubscriptionPlans.FindAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync__jump_unknown_UserManager_NexusUser_UpdateAsync",
          "fromNodeId": "method:72bnlj:handlesubscriptioncancellation__call_447_UserManager_NexusUser_UpdateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.UpdateAsync",
          "line": 447,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.UpdateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:72bnlj:handlesubscriptioncancellation__action_439_guard_clause_439__merge",
        "method:72bnlj:handlesubscriptioncancellation__action_439_handlesubscriptioncancellation_guard_clause_439_0__merge",
        "method:72bnlj:handlesubscriptioncancellation__action_442_handlesubscriptioncancellation_branch_442_3__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 434,
        "end": 449
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 434,
          "summary": "Control-flow fragment extracted for method HandleSubscriptionCancellation.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1rb8gnn:map-identity-api-mapgroup-identity__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:1rb8gnn:map-identity-api-mapgroup-identity",
      "ownerSymbolName": "Map Identity API (MapGroup /identity)",
      "entryNodeId": "method:1rb8gnn:map-identity-api-mapgroup-identity__entry",
      "exitNodeIds": [
        "method:1rb8gnn:map-identity-api-mapgroup-identity__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__entry",
          "kind": "entry",
          "label": "Map Identity API (MapGroup /identity) entry",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Map identity API endpoints provided by helper MapIdentityApi extension."
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_route_registration_451__linear",
          "kind": "statement",
          "label": "Mount identity endpoints under /identity",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Delegates to extension MapIdentityApi which registers standard identity endpoints"
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_map_identity_api_mapgroup_identity_mapping_451_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGroup(\"/identity\").MapIdentityApi<NexusUser>();"
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser_",
          "kind": "call",
          "label": "MapIdentityApi<NexusUser>",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__entry__method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_route_registration_451__linear",
          "from": "method:1rb8gnn:map-identity-api-mapgroup-identity__entry",
          "to": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_route_registration_451__linear",
          "kind": "next",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_route_registration_451__linear__method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_map_identity_api_mapgroup_identity_mapping_451_0__linear",
          "from": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_route_registration_451__linear",
          "to": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_map_identity_api_mapgroup_identity_mapping_451_0__linear",
          "kind": "next",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_map_identity_api_mapgroup_identity_mapping_451_0__linear__call_method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser_",
          "from": "method:1rb8gnn:map-identity-api-mapgroup-identity__action_451_map_identity_api_mapgroup_identity_mapping_451_0__linear",
          "to": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser_",
          "kind": "call",
          "label": "none",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser___implicit_return",
          "from": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser_",
          "to": "method:1rb8gnn:map-identity-api-mapgroup-identity__implicit_return",
          "kind": "return",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser___jump_unknown_MapIdentityApi_NexusUser_",
          "fromNodeId": "method:1rb8gnn:map-identity-api-mapgroup-identity__call_451_MapIdentityApi_NexusUser_",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "MapIdentityApi<NexusUser>",
          "line": 451,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target MapIdentityApi<NexusUser> in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7699999999999999,
      "lineSpan": {
        "start": 451,
        "end": 451
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 451,
          "summary": "Control-flow fragment extracted for method Map Identity API (MapGroup /identity).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:eni3nx:identity-login-get-identity-login-google__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:eni3nx:identity-login-get-identity-login-google",
      "ownerSymbolName": "Identity Login (GET /identity/login/google)",
      "entryNodeId": "method:eni3nx:identity-login-get-identity-login-google__entry",
      "exitNodeIds": [
        "method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return",
        "method:eni3nx:identity-login-get-identity-login-google__action_460_return_460__return"
      ],
      "nodes": [
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__entry",
          "kind": "entry",
          "label": "Identity Login (GET /identity/login/google) entry",
          "line": 453,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Initiate Google external login by issuing an authentication challenge with redirect metadata."
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_453_identity_login_get_identity_login_google_mapping_453_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 453,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/login/google\", (string? returnUrl) =>"
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_455_construct_455__linear",
          "kind": "statement",
          "label": "Create AuthenticationProperties with returnUrl",
          "line": 455,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Sets RedirectUri to callback and stores returnUrl in Items"
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Challenge(properties, new[] { \"Google\" });"
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_460_return_460__return",
          "kind": "return",
          "label": "Return Challenge to Google",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Results.Challenge(properties, new[] { 'Google' })"
        }
      ],
      "edges": [
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__entry__method:eni3nx:identity-login-get-identity-login-google__action_453_identity_login_get_identity_login_google_mapping_453_0__linear",
          "from": "method:eni3nx:identity-login-get-identity-login-google__entry",
          "to": "method:eni3nx:identity-login-get-identity-login-google__action_453_identity_login_get_identity_login_google_mapping_453_0__linear",
          "kind": "next",
          "line": 453,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_453_identity_login_get_identity_login_google_mapping_453_0__linear__method:eni3nx:identity-login-get-identity-login-google__action_455_construct_455__linear",
          "from": "method:eni3nx:identity-login-get-identity-login-google__action_453_identity_login_get_identity_login_google_mapping_453_0__linear",
          "to": "method:eni3nx:identity-login-get-identity-login-google__action_455_construct_455__linear",
          "kind": "next",
          "line": 455,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_455_construct_455__linear__method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return",
          "from": "method:eni3nx:identity-login-get-identity-login-google__action_455_construct_455__linear",
          "to": "method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return",
          "kind": "return",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return__method:eni3nx:identity-login-get-identity-login-google__action_460_return_460__return",
          "from": "method:eni3nx:identity-login-get-identity-login-google__action_460_identity_login_get_identity_login_google_return_460_1__return",
          "to": "method:eni3nx:identity-login-get-identity-login-google__action_460_return_460__return",
          "kind": "return",
          "line": 460,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 453,
        "end": 461
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 453,
          "summary": "Control-flow fragment extracted for method Identity Login (GET /identity/login/google).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19xkg6k:identity-callback-get-identity-callback-google__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:19xkg6k:identity-callback-get-identity-callback-google",
      "ownerSymbolName": "Identity Callback (GET /identity/callback/google)",
      "entryNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__entry",
      "exitNodeIds": [
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_517_identity_callback_get_identity_callback_google_return_517_27__return"
      ],
      "nodes": [
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__entry",
          "kind": "entry",
          "label": "Identity Callback (GET /identity/callback/google) entry",
          "line": 463,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Process Google external login callback: attempt sign-in, handle lockout, provision new user if needed, and log errors."
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_463_identity_callback_get_identity_callback_google_mapping_463_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 463,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/callback/google\", async ("
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_identity_callback_get_identity_callback_google_await_469_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var info = await signInManager.GetExternalLoginInfoAsync();"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition",
          "kind": "condition",
          "label": "info == null",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Logs warning and redirects to login with error"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__true",
          "kind": "branch-true",
          "label": "log warning & redirect Error",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__false",
          "kind": "branch-false",
          "label": "otherwise",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "kind": "statement",
          "label": "merge",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "kind": "call",
          "label": "SignInManager<NexusUser>.GetExternalLoginInfoAsync",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition",
          "kind": "condition",
          "label": "info == null",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (info == null)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_472_identity_callback_get_identity_callback_google_log_472_3__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 472,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogWarning(\"External login info from Google is null.\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 473,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=ExternalLoginFailed\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_identity_callback_get_identity_callback_google_await_476_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition",
          "kind": "condition",
          "label": "Handle existing external login sign-in",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "If sign-in succeeded -> Redirect('/') ; if locked out -> redirect with LockedOut"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__true",
          "kind": "branch-true",
          "label": "true",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__false",
          "kind": "branch-false",
          "label": "false",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "kind": "statement",
          "label": "merge",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "kind": "call",
          "label": "SignInManager<NexusUser>.ExternalLoginSignInAsync",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "info.LoginProvider, info.ProviderKey, isPersistent:false"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.Succeeded)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__true",
          "kind": "branch-true",
          "label": "true",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__false",
          "kind": "branch-false",
          "label": "false",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "kind": "statement",
          "label": "merge",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_repository_read_479_8__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "logger.LogInformation(\"User logged in via Google: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_log_479_7__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged in via Google: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_logging_479__linear",
          "kind": "statement",
          "label": "Log provisioning and error cases",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Logs info on success and error details on failure"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 480,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition",
          "kind": "condition",
          "label": "result.IsLockedOut",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.IsLockedOut)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__true",
          "kind": "branch-true",
          "label": "true",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__false",
          "kind": "branch-false",
          "label": "false",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "kind": "statement",
          "label": "merge",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_repository_read_485_12__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "logger.LogWarning(\"User account locked out during Google login: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_log_485_11__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogWarning(\"User account locked out during Google login: {Email}\", info.Principal.FindFirstValue(ClaimTypes.Email));"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return",
          "kind": "return",
          "label": "Returns result",
          "line": 486,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=LockedOut\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_identity_callback_get_identity_callback_google_repository_read_490_14__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var email = info.Principal.FindFirstValue(ClaimTypes.Email);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_provisioning_490__linear",
          "kind": "statement",
          "label": "Create local user for new external login",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Create NexusUser, CreateAsync, AddLoginAsync, SignInAsync; on CreateAsync errors log each and handle duplicate email/username by redirecting accordingly"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition",
          "kind": "condition",
          "label": "email != null",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (email != null)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__true",
          "kind": "branch-true",
          "label": "true",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__false",
          "kind": "branch-false",
          "label": "false",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "kind": "statement",
          "label": "merge",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_494_identity_callback_get_identity_callback_google_await_494_16__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var createResult = await userManager.CreateAsync(user);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.CreateAsync",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "user"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition",
          "kind": "condition",
          "label": "createResult.Succeeded",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (createResult.Succeeded)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__true",
          "kind": "branch-true",
          "label": "true",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__false",
          "kind": "branch-false",
          "label": "false",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "kind": "statement",
          "label": "merge",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_498_identity_callback_get_identity_callback_google_await_498_18__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await userManager.AddLoginAsync(user, info);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync",
          "kind": "call",
          "label": "UserManager<NexusUser>.AddLoginAsync",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "user, info"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_499_identity_callback_get_identity_callback_google_await_499_19__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await signInManager.SignInAsync(user, isPersistent: false);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync",
          "kind": "call",
          "label": "SignInManager<NexusUser>.SignInAsync",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "user, isPersistent:false"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_500_identity_callback_get_identity_callback_google_log_500_20__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 500,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"New user provisioned via Google: {Email}\", email);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return",
          "kind": "return",
          "label": "Returns result",
          "line": 501,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "kind": "loop-entry",
          "label": "var error in createResult.Errors",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "foreach (var error in createResult.Errors)"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body",
          "kind": "loop-body",
          "label": "foreach (var error in createResult.Errors)",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_507_identity_callback_get_identity_callback_google_log_507_23__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 507,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogError(\"Google provisioning failed for {Email}: {Code} - {Description}\", email, error.Code, error.Description);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition",
          "kind": "condition",
          "label": "createResult.Errors.Any(e => e.Code == \"DuplicateEmail\" || e.Code == \"DuplicateUserName\")",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (createResult.Errors.Any(e => e.Code == \"DuplicateEmail\" || e.Code == \"DuplicateUserName\"))"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__true",
          "kind": "branch-true",
          "label": "true",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__false",
          "kind": "branch-false",
          "label": "false",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "kind": "statement",
          "label": "merge",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return",
          "kind": "return",
          "label": "Returns result",
          "line": 512,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=UserAlreadyExists\");"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_516_identity_callback_get_identity_callback_google_log_516_26__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 516,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogError(\"Google provisioning failed - unknown reason for email {Email}\", email);"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_517_identity_callback_get_identity_callback_google_return_517_27__return",
          "kind": "return",
          "label": "Returns result",
          "line": 517,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login?error=ProvisioningFailed\");"
        }
      ],
      "edges": [
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__entry__method:19xkg6k:identity-callback-get-identity-callback-google__action_463_identity_callback_get_identity_callback_google_mapping_463_0__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__entry",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_463_identity_callback_get_identity_callback_google_mapping_463_0__linear",
          "kind": "next",
          "line": 463,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_463_identity_callback_get_identity_callback_google_mapping_463_0__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_identity_callback_get_identity_callback_google_await_469_1__await",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_463_identity_callback_get_identity_callback_google_mapping_463_0__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_identity_callback_get_identity_callback_google_await_469_1__await",
          "kind": "next",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_identity_callback_get_identity_callback_google_await_469_1__await__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_identity_callback_get_identity_callback_google_await_469_1__await",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition",
          "kind": "next",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__true",
          "kind": "condition-true",
          "label": "log warning & redirect Error",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__false",
          "kind": "condition-false",
          "label": "otherwise",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "kind": "next",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "kind": "next",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge__call_method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "kind": "call",
          "label": "none",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync__method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "kind": "next",
          "line": 470,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_472_identity_callback_get_identity_callback_google_log_472_3__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_472_identity_callback_get_identity_callback_google_log_472_3__linear",
          "kind": "next",
          "line": 472,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_472_identity_callback_get_identity_callback_google_log_472_3__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_472_identity_callback_get_identity_callback_google_log_472_3__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return",
          "kind": "return",
          "line": 473,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_identity_callback_get_identity_callback_google_await_476_5__await",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_473_identity_callback_get_identity_callback_google_return_473_4__return",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_identity_callback_get_identity_callback_google_await_476_5__await",
          "kind": "next",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_identity_callback_get_identity_callback_google_await_476_5__await__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_identity_callback_get_identity_callback_google_await_476_5__await",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition",
          "kind": "next",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__true",
          "kind": "condition-true",
          "label": "true",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__false",
          "kind": "condition-false",
          "label": "false",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "kind": "next",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "kind": "next",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge__call_method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "kind": "call",
          "label": "info.LoginProvider, info.ProviderKey, isPersistent:false",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync__method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__true",
          "kind": "condition-true",
          "label": "true",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__false",
          "kind": "condition-false",
          "label": "false",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "kind": "next",
          "line": 477,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_repository_read_479_8__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_repository_read_479_8__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_repository_read_479_8__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_log_479_7__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_repository_read_479_8__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_log_479_7__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_log_479_7__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_479_logging_479__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_identity_callback_get_identity_callback_google_log_479_7__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_logging_479__linear",
          "kind": "next",
          "line": 479,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_logging_479__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_479_logging_479__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return",
          "kind": "return",
          "line": 480,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return__method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_480_identity_callback_get_identity_callback_google_return_480_9__return",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__true",
          "kind": "condition-true",
          "label": "true",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__false",
          "kind": "condition-false",
          "label": "false",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "kind": "next",
          "line": 483,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_repository_read_485_12__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_repository_read_485_12__linear",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_repository_read_485_12__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_log_485_11__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_repository_read_485_12__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_log_485_11__linear",
          "kind": "next",
          "line": 485,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_log_485_11__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_485_identity_callback_get_identity_callback_google_log_485_11__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return",
          "kind": "return",
          "line": 486,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return__method:19xkg6k:identity-callback-get-identity-callback-google__action_490_identity_callback_get_identity_callback_google_repository_read_490_14__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_486_identity_callback_get_identity_callback_google_return_486_13__return",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_identity_callback_get_identity_callback_google_repository_read_490_14__linear",
          "kind": "next",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_identity_callback_get_identity_callback_google_repository_read_490_14__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_490_provisioning_490__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_identity_callback_get_identity_callback_google_repository_read_490_14__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_provisioning_490__linear",
          "kind": "next",
          "line": 490,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_provisioning_490__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_490_provisioning_490__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__true",
          "kind": "condition-true",
          "label": "true",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__false",
          "kind": "condition-false",
          "label": "false",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "kind": "next",
          "line": 491,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_494_identity_callback_get_identity_callback_google_await_494_16__await",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_494_identity_callback_get_identity_callback_google_await_494_16__await",
          "kind": "next",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_494_identity_callback_get_identity_callback_google_await_494_16__await__call_method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_494_identity_callback_get_identity_callback_google_await_494_16__await",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync",
          "kind": "call",
          "label": "user",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync__method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__true",
          "kind": "condition-true",
          "label": "true",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__false",
          "kind": "condition-false",
          "label": "false",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "kind": "next",
          "line": 496,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_498_identity_callback_get_identity_callback_google_await_498_18__await",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_498_identity_callback_get_identity_callback_google_await_498_18__await",
          "kind": "next",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_498_identity_callback_get_identity_callback_google_await_498_18__await__call_method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_498_identity_callback_get_identity_callback_google_await_498_18__await",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync",
          "kind": "call",
          "label": "user, info",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync__method:19xkg6k:identity-callback-get-identity-callback-google__action_499_identity_callback_get_identity_callback_google_await_499_19__await",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_499_identity_callback_get_identity_callback_google_await_499_19__await",
          "kind": "next",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_499_identity_callback_get_identity_callback_google_await_499_19__await__call_method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_499_identity_callback_get_identity_callback_google_await_499_19__await",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync",
          "kind": "call",
          "label": "user, isPersistent:false",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync__method:19xkg6k:identity-callback-get-identity-callback-google__action_500_identity_callback_get_identity_callback_google_log_500_20__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_500_identity_callback_get_identity_callback_google_log_500_20__linear",
          "kind": "next",
          "line": 500,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_500_identity_callback_get_identity_callback_google_log_500_20__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_500_identity_callback_get_identity_callback_google_log_500_20__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return",
          "kind": "return",
          "line": 501,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return__method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_501_identity_callback_get_identity_callback_google_return_501_21__return",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "kind": "next",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry__method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body",
          "kind": "loop-body",
          "label": "var error in createResult.Errors",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body__method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "kind": "loop-back",
          "label": "continue",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry__method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_exit",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_exit",
          "kind": "loop-exit",
          "label": "Leaves the loop when the condition no longer holds.",
          "line": 505,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_exit__method:19xkg6k:identity-callback-get-identity-callback-google__action_507_identity_callback_get_identity_callback_google_log_507_23__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_exit",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_507_identity_callback_get_identity_callback_google_log_507_23__linear",
          "kind": "next",
          "line": 507,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_507_identity_callback_get_identity_callback_google_log_507_23__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_507_identity_callback_get_identity_callback_google_log_507_23__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__true",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__true",
          "kind": "condition-true",
          "label": "true",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition__method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__false",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__condition",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__false",
          "kind": "condition-false",
          "label": "false",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__true__method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__true",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__false__method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__false",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "kind": "next",
          "line": 510,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge__method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return",
          "kind": "return",
          "line": 512,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return__method:19xkg6k:identity-callback-get-identity-callback-google__action_516_identity_callback_get_identity_callback_google_log_516_26__linear",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_512_identity_callback_get_identity_callback_google_return_512_25__return",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_516_identity_callback_get_identity_callback_google_log_516_26__linear",
          "kind": "next",
          "line": 516,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__action_516_identity_callback_get_identity_callback_google_log_516_26__linear__method:19xkg6k:identity-callback-get-identity-callback-google__action_517_identity_callback_get_identity_callback_google_return_517_27__return",
          "from": "method:19xkg6k:identity-callback-get-identity-callback-google__action_516_identity_callback_get_identity_callback_google_log_516_26__linear",
          "to": "method:19xkg6k:identity-callback-get-identity-callback-google__action_517_identity_callback_get_identity_callback_google_return_517_27__return",
          "kind": "return",
          "line": 517,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync__jump_unknown_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "fromNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__call_469_SignInManager_NexusUser_GetExternalLoginInfoAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "SignInManager<NexusUser>.GetExternalLoginInfoAsync",
          "line": 469,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target SignInManager<NexusUser>.GetExternalLoginInfoAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync__jump_unknown_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "fromNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__call_476_SignInManager_NexusUser_ExternalLoginSignInAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "SignInManager<NexusUser>.ExternalLoginSignInAsync",
          "line": 476,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target SignInManager<NexusUser>.ExternalLoginSignInAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync__jump_unknown_UserManager_NexusUser_CreateAsync",
          "fromNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__call_494_UserManager_NexusUser_CreateAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.CreateAsync",
          "line": 494,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.CreateAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync__jump_unknown_UserManager_NexusUser_AddLoginAsync",
          "fromNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__call_498_UserManager_NexusUser_AddLoginAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "UserManager<NexusUser>.AddLoginAsync",
          "line": 498,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target UserManager<NexusUser>.AddLoginAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync__jump_unknown_SignInManager_NexusUser_SignInAsync",
          "fromNodeId": "method:19xkg6k:identity-callback-get-identity-callback-google__call_499_SignInManager_NexusUser_SignInAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "SignInManager<NexusUser>.SignInAsync",
          "line": 499,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target SignInManager<NexusUser>.SignInAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_body__method:19xkg6k:identity-callback-get-identity-callback-google__action_505_identity_callback_get_identity_callback_google_loop_505_22__loop_entry"
      ],
      "mergeNodeIds": [
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_469_guard_clause_469__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_470_identity_callback_get_identity_callback_google_branch_470_2__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_476_branch_476__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_477_identity_callback_get_identity_callback_google_branch_477_6__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_483_identity_callback_get_identity_callback_google_branch_483_10__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_491_identity_callback_get_identity_callback_google_branch_491_15__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_496_identity_callback_get_identity_callback_google_branch_496_17__merge",
        "method:19xkg6k:identity-callback-get-identity-callback-google__action_510_identity_callback_get_identity_callback_google_branch_510_24__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 463,
        "end": 518
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 463,
          "summary": "Control-flow fragment extracted for method Identity Callback (GET /identity/callback/google).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:8fzkrx:account-login-form-post-account-login-form__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:8fzkrx:account-login-form-post-account-login-form",
      "ownerSymbolName": "Account Login Form (POST /account/login-form)",
      "entryNodeId": "method:8fzkrx:account-login-form-post-account-login-form__entry",
      "exitNodeIds": [
        "method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return",
        "method:8fzkrx:account-login-form-post-account-login-form__action_536_account_login_form_post_account_login_form_return_536_5__return"
      ],
      "nodes": [
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__entry",
          "kind": "entry",
          "label": "Account Login Form (POST /account/login-form) entry",
          "line": 520,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Authenticate user via form POST using SignInManager.PasswordSignInAsync and redirect on success or failure."
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_520_account_login_form_post_account_login_form_mapping_520_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 520,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapPost(\"/account/login-form\", async ("
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_528_account_login_form_post_account_login_form_await_528_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await signInManager.PasswordSignInAsync(email, password, rememberMe, lockoutOnFailure: true);"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_528_external_call_528__linear",
          "kind": "http-call",
          "label": "Attempt password sign-in",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Await PasswordSignInAsync"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync",
          "kind": "call",
          "label": "SignInManager<NexusUser>.PasswordSignInAsync",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "email, password, rememberMe, lockoutOnFailure:true"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition",
          "kind": "condition",
          "label": "Redirect on success or failure",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "On success redirect to returnUrl or /; on failure redirect to login with error (LockedOut or InvalidCredentials)"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__true",
          "kind": "branch-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__false",
          "kind": "branch-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "kind": "statement",
          "label": "merge",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78,
          "detail": "if (result.Succeeded)"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_531_account_login_form_post_account_login_form_log_531_3__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 531,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged in: {Email}\", email);"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 532,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(returnUrl ?? \"/\");"
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_536_account_login_form_post_account_login_form_return_536_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 536,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect($\"/account/login?error={error}\");"
        }
      ],
      "edges": [
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__entry__method:8fzkrx:account-login-form-post-account-login-form__action_520_account_login_form_post_account_login_form_mapping_520_0__linear",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__entry",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_520_account_login_form_post_account_login_form_mapping_520_0__linear",
          "kind": "next",
          "line": 520,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_520_account_login_form_post_account_login_form_mapping_520_0__linear__method:8fzkrx:account-login-form-post-account-login-form__action_528_account_login_form_post_account_login_form_await_528_1__await",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_520_account_login_form_post_account_login_form_mapping_520_0__linear",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_528_account_login_form_post_account_login_form_await_528_1__await",
          "kind": "next",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_528_account_login_form_post_account_login_form_await_528_1__await__method:8fzkrx:account-login-form-post-account-login-form__action_528_external_call_528__linear",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_528_account_login_form_post_account_login_form_await_528_1__await",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_528_external_call_528__linear",
          "kind": "next",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_528_external_call_528__linear__call_method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_528_external_call_528__linear",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync",
          "kind": "call",
          "label": "email, password, rememberMe, lockoutOnFailure:true",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync__method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition__method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__true",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__true",
          "kind": "condition-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition__method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__false",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__condition",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__false",
          "kind": "condition-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__true__method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__true",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__false__method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__false",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge__method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition__method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__true",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition__method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__false",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__condition",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__true__method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__true",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__false__method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__false",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "kind": "next",
          "line": 529,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.78
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge__method:8fzkrx:account-login-form-post-account-login-form__action_531_account_login_form_post_account_login_form_log_531_3__linear",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_531_account_login_form_post_account_login_form_log_531_3__linear",
          "kind": "next",
          "line": 531,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_531_account_login_form_post_account_login_form_log_531_3__linear__method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_531_account_login_form_post_account_login_form_log_531_3__linear",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return",
          "kind": "return",
          "line": 532,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return__method:8fzkrx:account-login-form-post-account-login-form__action_536_account_login_form_post_account_login_form_return_536_5__return",
          "from": "method:8fzkrx:account-login-form-post-account-login-form__action_532_account_login_form_post_account_login_form_return_532_4__return",
          "to": "method:8fzkrx:account-login-form-post-account-login-form__action_536_account_login_form_post_account_login_form_return_536_5__return",
          "kind": "return",
          "line": 536,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync__jump_unknown_SignInManager_NexusUser_PasswordSignInAsync",
          "fromNodeId": "method:8fzkrx:account-login-form-post-account-login-form__call_528_SignInManager_NexusUser_PasswordSignInAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "SignInManager<NexusUser>.PasswordSignInAsync",
          "line": 528,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target SignInManager<NexusUser>.PasswordSignInAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:8fzkrx:account-login-form-post-account-login-form__action_529_branch_529__merge",
        "method:8fzkrx:account-login-form-post-account-login-form__action_529_account_login_form_post_account_login_form_branch_529_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 520,
        "end": 537
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 520,
          "summary": "Control-flow fragment extracted for method Account Login Form (POST /account/login-form).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19x6wwx:account-logout-form-get-account-logout-form__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:19x6wwx:account-logout-form-get-account-logout-form",
      "ownerSymbolName": "Account Logout Form (GET /account/logout-form)",
      "entryNodeId": "method:19x6wwx:account-logout-form-get-account-logout-form__entry",
      "exitNodeIds": [
        "method:19x6wwx:account-logout-form-get-account-logout-form__action_545_account_logout_form_get_account_logout_form_return_545_3__return"
      ],
      "nodes": [
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__entry",
          "kind": "entry",
          "label": "Account Logout Form (GET /account/logout-form) entry",
          "line": 539,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Sign out current user and redirect to login page."
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_539_account_logout_form_get_account_logout_form_mapping_539_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 539,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/account/logout-form\", async ("
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_account_logout_form_get_account_logout_form_await_543_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "await signInManager.SignOutAsync();"
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_persistence_action_543__linear",
          "kind": "statement",
          "label": "Sign out",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "await signInManager.SignOutAsync()"
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync",
          "kind": "call",
          "label": "SignInManager<NexusUser>.SignOutAsync",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "none"
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_account_logout_form_get_account_logout_form_log_544_2__linear",
          "kind": "statement",
          "label": "Logs runtime state",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92,
          "detail": "logger.LogInformation(\"User logged out via form.\");"
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_logging_544__linear",
          "kind": "statement",
          "label": "Log logout",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "logger.LogInformation('User logged out via form.')"
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_545_account_logout_form_get_account_logout_form_return_545_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 545,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Redirect(\"/account/login\");"
        }
      ],
      "edges": [
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__entry__method:19x6wwx:account-logout-form-get-account-logout-form__action_539_account_logout_form_get_account_logout_form_mapping_539_0__linear",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__entry",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_539_account_logout_form_get_account_logout_form_mapping_539_0__linear",
          "kind": "next",
          "line": 539,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_539_account_logout_form_get_account_logout_form_mapping_539_0__linear__method:19x6wwx:account-logout-form-get-account-logout-form__action_543_account_logout_form_get_account_logout_form_await_543_1__await",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__action_539_account_logout_form_get_account_logout_form_mapping_539_0__linear",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_account_logout_form_get_account_logout_form_await_543_1__await",
          "kind": "next",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_account_logout_form_get_account_logout_form_await_543_1__await__method:19x6wwx:account-logout-form-get-account-logout-form__action_543_persistence_action_543__linear",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_account_logout_form_get_account_logout_form_await_543_1__await",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_persistence_action_543__linear",
          "kind": "next",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_persistence_action_543__linear__call_method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__action_543_persistence_action_543__linear",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync",
          "kind": "call",
          "label": "none",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync__method:19x6wwx:account-logout-form-get-account-logout-form__action_544_account_logout_form_get_account_logout_form_log_544_2__linear",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_account_logout_form_get_account_logout_form_log_544_2__linear",
          "kind": "next",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.92
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_account_logout_form_get_account_logout_form_log_544_2__linear__method:19x6wwx:account-logout-form-get-account-logout-form__action_544_logging_544__linear",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_account_logout_form_get_account_logout_form_log_544_2__linear",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_logging_544__linear",
          "kind": "next",
          "line": 544,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_logging_544__linear__method:19x6wwx:account-logout-form-get-account-logout-form__action_545_account_logout_form_get_account_logout_form_return_545_3__return",
          "from": "method:19x6wwx:account-logout-form-get-account-logout-form__action_544_logging_544__linear",
          "to": "method:19x6wwx:account-logout-form-get-account-logout-form__action_545_account_logout_form_get_account_logout_form_return_545_3__return",
          "kind": "return",
          "line": 545,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync__jump_unknown_SignInManager_NexusUser_SignOutAsync",
          "fromNodeId": "method:19x6wwx:account-logout-form-get-account-logout-form__call_543_SignInManager_NexusUser_SignOutAsync",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "SignInManager<NexusUser>.SignOutAsync",
          "line": 543,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target SignInManager<NexusUser>.SignOutAsync in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8599999999999999,
      "lineSpan": {
        "start": 539,
        "end": 546
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 539,
          "summary": "Control-flow fragment extracted for method Account Logout Form (GET /account/logout-form).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:7u4uld:get-user-profile-get-identity-profile__fragment",
      "ownerFileId": "file:12rhzck:program-cs",
      "ownerSymbolId": "method:7u4uld:get-user-profile-get-identity-profile",
      "ownerSymbolName": "Get User Profile (GET /identity/profile)",
      "entryNodeId": "method:7u4uld:get-user-profile-get-identity-profile__entry",
      "exitNodeIds": [
        "method:7u4uld:get-user-profile-get-identity-profile__action_556_get_user_profile_get_identity_profile_return_556_6__return"
      ],
      "nodes": [
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__entry",
          "kind": "entry",
          "label": "Get User Profile (GET /identity/profile) entry",
          "line": 548,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.99,
          "detail": "Return the current user's profile by dispatching GetUserProfileQuery via mediator."
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_548_get_user_profile_get_identity_profile_mapping_548_0__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 548,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74,
          "detail": "app.MapGet(\"/identity/profile\", async (ClaimsPrincipal user, IMediator mediator) =>"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_get_user_profile_get_identity_profile_repository_read_550_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition",
          "kind": "condition",
          "label": "userId == null",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "Return Unauthorized if no user id"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__true",
          "kind": "branch-true",
          "label": "Unauthorized",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "kind": "statement",
          "label": "merge",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition",
          "kind": "condition",
          "label": "userId == null) return Results.Unauthorized(",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (userId == null) return Results.Unauthorized();"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_553_get_user_profile_get_identity_profile_await_553_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81,
          "detail": "var result = await mediator.Send(new GetUserProfileQuery(userId));"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor_",
          "kind": "call",
          "label": "GetUserProfileQuery (ctor)",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "userId"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send",
          "kind": "call",
          "label": "IMediator.Send",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88,
          "detail": "GetUserProfileQuery(userId)"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition",
          "kind": "condition",
          "label": "Return NotFound or Ok based on mediator result",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "If result.IsFailed -> NotFound, else Ok(result.Value)"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__true",
          "kind": "branch-true",
          "label": "true",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__false",
          "kind": "branch-false",
          "label": "false",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "kind": "statement",
          "label": "merge",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_repository_read_554_5__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86,
          "detail": "if (result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message);"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition",
          "kind": "condition",
          "label": "result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9,
          "detail": "if (result.IsFailed) return Results.NotFound(result.Errors.FirstOrDefault()?.Message);"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_556_get_user_profile_get_identity_profile_return_556_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 556,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7,
          "detail": "return Results.Ok(result.Value);"
        }
      ],
      "edges": [
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__entry__method:7u4uld:get-user-profile-get-identity-profile__action_548_get_user_profile_get_identity_profile_mapping_548_0__linear",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__entry",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_548_get_user_profile_get_identity_profile_mapping_548_0__linear",
          "kind": "next",
          "line": 548,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.74
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_548_get_user_profile_get_identity_profile_mapping_548_0__linear__method:7u4uld:get-user-profile-get-identity-profile__action_550_get_user_profile_get_identity_profile_repository_read_550_1__linear",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_548_get_user_profile_get_identity_profile_mapping_548_0__linear",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_get_user_profile_get_identity_profile_repository_read_550_1__linear",
          "kind": "next",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_get_user_profile_get_identity_profile_repository_read_550_1__linear__method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_get_user_profile_get_identity_profile_repository_read_550_1__linear",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition",
          "kind": "next",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition__method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__true",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__true",
          "kind": "condition-true",
          "label": "Unauthorized",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition__method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__false",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__true__method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__true",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "kind": "next",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__false__method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__false",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "kind": "next",
          "line": 550,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge__method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition__method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__true",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition__method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__false",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__true__method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__true",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__false__method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__false",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "kind": "next",
          "line": 551,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge__method:7u4uld:get-user-profile-get-identity-profile__action_553_get_user_profile_get_identity_profile_await_553_3__await",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_553_get_user_profile_get_identity_profile_await_553_3__await",
          "kind": "next",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.81
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_553_get_user_profile_get_identity_profile_await_553_3__await__call_method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor_",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_553_get_user_profile_get_identity_profile_await_553_3__await",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor_",
          "kind": "call",
          "label": "userId",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor___call_method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor_",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send",
          "kind": "call",
          "label": "GetUserProfileQuery(userId)",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.88
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send__method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition__method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__true",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__true",
          "kind": "condition-true",
          "label": "true",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition__method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__false",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__false",
          "kind": "condition-false",
          "label": "false",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__true__method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__true",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__false__method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__false",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_repository_read_554_5__linear",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_repository_read_554_5__linear",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.86
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_repository_read_554_5__linear__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_repository_read_554_5__linear",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__true",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__false",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__condition",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__true__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__true",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__false__method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__false",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "kind": "next",
          "line": 554,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.9
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge__method:7u4uld:get-user-profile-get-identity-profile__action_556_get_user_profile_get_identity_profile_return_556_6__return",
          "from": "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge",
          "to": "method:7u4uld:get-user-profile-get-identity-profile__action_556_get_user_profile_get_identity_profile_return_556_6__return",
          "kind": "return",
          "line": 556,
          "sourcePath": "NexusReader.Web/Program.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor___jump_NexusReader_Application_Queries_User_GetUserProfileQuery_ctor_",
          "fromNodeId": "method:7u4uld:get-user-profile-get-identity-profile__call_553_GetUserProfileQuery_ctor_",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Queries.User",
          "targetHint": "GetUserProfileQuery (ctor)",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target GetUserProfileQuery (ctor) in NexusReader.Application.Queries.User could not be matched to an extracted method symbol.",
          "status": "unresolved"
        },
        {
          "id": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send__jump_unknown_IMediator_Send",
          "fromNodeId": "method:7u4uld:get-user-profile-get-identity-profile__call_553_IMediator_Send",
          "kind": "call-target",
          "targetPath": "unknown",
          "targetHint": "IMediator.Send",
          "line": 553,
          "sourcePath": "NexusReader.Web/Program.cs",
          "reason": "Call target IMediator.Send in unknown could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:7u4uld:get-user-profile-get-identity-profile__action_550_guard_clause_550__merge",
        "method:7u4uld:get-user-profile-get-identity-profile__action_551_get_user_profile_get_identity_profile_guard_clause_551_2__merge",
        "method:7u4uld:get-user-profile-get-identity-profile__action_554_branch_554__merge",
        "method:7u4uld:get-user-profile-get-identity-profile__action_554_get_user_profile_get_identity_profile_guard_clause_554_4__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 548,
        "end": 557
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Program.cs",
          "line": 548,
          "summary": "Control-flow fragment extracted for method Get User Profile (GET /identity/profile).",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:4dh69s:nativestorageservice__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:4dh69s:nativestorageservice",
      "ownerSymbolName": "NativeStorageService",
      "entryNodeId": "method:4dh69s:nativestorageservice__entry",
      "exitNodeIds": [
        "method:4dh69s:nativestorageservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:4dh69s:nativestorageservice__entry",
          "kind": "entry",
          "label": "NativeStorageService entry",
          "line": 16,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Constructs the service and stores the IJSRuntime for JS interop calls."
        },
        {
          "id": "method:4dh69s:nativestorageservice__action_18_assignment_18__linear",
          "kind": "statement",
          "label": "Store IJS runtime",
          "line": 18,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "_jsRuntime = jsRuntime"
        },
        {
          "id": "method:4dh69s:nativestorageservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:4dh69s:nativestorageservice__entry__method:4dh69s:nativestorageservice__action_18_assignment_18__linear",
          "from": "method:4dh69s:nativestorageservice__entry",
          "to": "method:4dh69s:nativestorageservice__action_18_assignment_18__linear",
          "kind": "next",
          "line": 18,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:4dh69s:nativestorageservice__action_18_assignment_18__linear__implicit_return",
          "from": "method:4dh69s:nativestorageservice__action_18_assignment_18__linear",
          "to": "method:4dh69s:nativestorageservice__implicit_return",
          "kind": "return",
          "line": 19,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 16,
        "end": 19
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 16,
          "summary": "Control-flow fragment extracted for method NativeStorageService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:18nxwdn:savestringasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:18nxwdn:savestringasync",
      "ownerSymbolName": "SaveStringAsync",
      "entryNodeId": "method:18nxwdn:savestringasync__entry",
      "exitNodeIds": [
        "method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return",
        "method:18nxwdn:savestringasync__action_26_return_26__return",
        "method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return",
        "method:18nxwdn:savestringasync__action_30_return_30__return"
      ],
      "nodes": [
        {
          "id": "method:18nxwdn:savestringasync__entry",
          "kind": "entry",
          "label": "SaveStringAsync entry",
          "line": 21,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Saves a string value into browser localStorage via JS interop; returns a FluentResults Result indicating success or failure."
        },
        {
          "id": "method:18nxwdn:savestringasync__action_23_try_catch_23__linear",
          "kind": "statement",
          "label": "Return success or failure based on JS call",
          "line": 23,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "try -> return Result.Ok(); catch(Exception ex) -> return Result.Fail(ex.Message)"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_23_savestringasync_try_23_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 23,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_25_savestringasync_await_25_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 25,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value);"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_25_external_call_25__linear",
          "kind": "http-call",
          "label": "Invoke JS to set localStorage item",
          "line": 25,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.setItem\", key, value)"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 26,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_26_return_26__return",
          "kind": "return",
          "label": "Result.Ok on success",
          "line": 26,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok()"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_28_savestringasync_catch_28_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 28,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 30,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:18nxwdn:savestringasync__action_30_return_30__return",
          "kind": "return",
          "label": "Result.Fail on exception",
          "line": 30,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:18nxwdn:savestringasync__entry__method:18nxwdn:savestringasync__action_23_try_catch_23__linear",
          "from": "method:18nxwdn:savestringasync__entry",
          "to": "method:18nxwdn:savestringasync__action_23_try_catch_23__linear",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18nxwdn:savestringasync__action_23_try_catch_23__linear__method:18nxwdn:savestringasync__action_23_savestringasync_try_23_0__try",
          "from": "method:18nxwdn:savestringasync__action_23_try_catch_23__linear",
          "to": "method:18nxwdn:savestringasync__action_23_savestringasync_try_23_0__try",
          "kind": "next",
          "line": 23,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:18nxwdn:savestringasync__action_23_savestringasync_try_23_0__try__method:18nxwdn:savestringasync__action_25_savestringasync_await_25_1__await",
          "from": "method:18nxwdn:savestringasync__action_23_savestringasync_try_23_0__try",
          "to": "method:18nxwdn:savestringasync__action_25_savestringasync_await_25_1__await",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:18nxwdn:savestringasync__action_25_savestringasync_await_25_1__await__method:18nxwdn:savestringasync__action_25_external_call_25__linear",
          "from": "method:18nxwdn:savestringasync__action_25_savestringasync_await_25_1__await",
          "to": "method:18nxwdn:savestringasync__action_25_external_call_25__linear",
          "kind": "next",
          "line": 25,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18nxwdn:savestringasync__action_25_external_call_25__linear__method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return",
          "from": "method:18nxwdn:savestringasync__action_25_external_call_25__linear",
          "to": "method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return__method:18nxwdn:savestringasync__action_26_return_26__return",
          "from": "method:18nxwdn:savestringasync__action_26_savestringasync_return_26_2__return",
          "to": "method:18nxwdn:savestringasync__action_26_return_26__return",
          "kind": "return",
          "line": 26,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18nxwdn:savestringasync__action_26_return_26__return__method:18nxwdn:savestringasync__action_28_savestringasync_catch_28_3__catch",
          "from": "method:18nxwdn:savestringasync__action_26_return_26__return",
          "to": "method:18nxwdn:savestringasync__action_28_savestringasync_catch_28_3__catch",
          "kind": "exception",
          "line": 28,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:18nxwdn:savestringasync__action_28_savestringasync_catch_28_3__catch__method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return",
          "from": "method:18nxwdn:savestringasync__action_28_savestringasync_catch_28_3__catch",
          "to": "method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return__method:18nxwdn:savestringasync__action_30_return_30__return",
          "from": "method:18nxwdn:savestringasync__action_30_savestringasync_return_30_4__return",
          "to": "method:18nxwdn:savestringasync__action_30_return_30__return",
          "kind": "return",
          "line": 30,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 21,
        "end": 32
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 21,
          "summary": "Control-flow fragment extracted for method SaveStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:wsqlg8:getstringasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:wsqlg8:getstringasync",
      "ownerSymbolName": "GetStringAsync",
      "entryNodeId": "method:wsqlg8:getstringasync__entry",
      "exitNodeIds": [
        "method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return",
        "method:wsqlg8:getstringasync__action_39_return_39__return",
        "method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return",
        "method:wsqlg8:getstringasync__action_43_return_43__return"
      ],
      "nodes": [
        {
          "id": "method:wsqlg8:getstringasync__entry",
          "kind": "entry",
          "label": "GetStringAsync entry",
          "line": 34,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a string value from browser localStorage via JS interop and wraps it in a FluentResults Result."
        },
        {
          "id": "method:wsqlg8:getstringasync__action_36_try_catch_36__linear",
          "kind": "statement",
          "label": "Return value or failure based on JS call",
          "line": 36,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "try -> return Result.Ok(value); catch(Exception ex) -> return Result.Fail(ex.Message)"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_36_getstringasync_try_36_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 36,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_38_getstringasync_await_38_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 38,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key);"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_38_external_call_38__linear",
          "kind": "http-call",
          "label": "Invoke JS to get localStorage item",
          "line": 38,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 39,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(value);"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_39_return_39__return",
          "kind": "return",
          "label": "Result.Ok with returned string",
          "line": 39,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(value)"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_41_getstringasync_catch_41_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:wsqlg8:getstringasync__action_43_return_43__return",
          "kind": "return",
          "label": "Result.Fail on exception",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:wsqlg8:getstringasync__entry__method:wsqlg8:getstringasync__action_36_try_catch_36__linear",
          "from": "method:wsqlg8:getstringasync__entry",
          "to": "method:wsqlg8:getstringasync__action_36_try_catch_36__linear",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wsqlg8:getstringasync__action_36_try_catch_36__linear__method:wsqlg8:getstringasync__action_36_getstringasync_try_36_0__try",
          "from": "method:wsqlg8:getstringasync__action_36_try_catch_36__linear",
          "to": "method:wsqlg8:getstringasync__action_36_getstringasync_try_36_0__try",
          "kind": "next",
          "line": 36,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:wsqlg8:getstringasync__action_36_getstringasync_try_36_0__try__method:wsqlg8:getstringasync__action_38_getstringasync_await_38_1__await",
          "from": "method:wsqlg8:getstringasync__action_36_getstringasync_try_36_0__try",
          "to": "method:wsqlg8:getstringasync__action_38_getstringasync_await_38_1__await",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:wsqlg8:getstringasync__action_38_getstringasync_await_38_1__await__method:wsqlg8:getstringasync__action_38_external_call_38__linear",
          "from": "method:wsqlg8:getstringasync__action_38_getstringasync_await_38_1__await",
          "to": "method:wsqlg8:getstringasync__action_38_external_call_38__linear",
          "kind": "next",
          "line": 38,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wsqlg8:getstringasync__action_38_external_call_38__linear__method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return",
          "from": "method:wsqlg8:getstringasync__action_38_external_call_38__linear",
          "to": "method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return",
          "kind": "return",
          "line": 39,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return__method:wsqlg8:getstringasync__action_39_return_39__return",
          "from": "method:wsqlg8:getstringasync__action_39_getstringasync_return_39_2__return",
          "to": "method:wsqlg8:getstringasync__action_39_return_39__return",
          "kind": "return",
          "line": 39,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wsqlg8:getstringasync__action_39_return_39__return__method:wsqlg8:getstringasync__action_41_getstringasync_catch_41_3__catch",
          "from": "method:wsqlg8:getstringasync__action_39_return_39__return",
          "to": "method:wsqlg8:getstringasync__action_41_getstringasync_catch_41_3__catch",
          "kind": "exception",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:wsqlg8:getstringasync__action_41_getstringasync_catch_41_3__catch__method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return",
          "from": "method:wsqlg8:getstringasync__action_41_getstringasync_catch_41_3__catch",
          "to": "method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return__method:wsqlg8:getstringasync__action_43_return_43__return",
          "from": "method:wsqlg8:getstringasync__action_43_getstringasync_return_43_4__return",
          "to": "method:wsqlg8:getstringasync__action_43_return_43__return",
          "kind": "return",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 34,
        "end": 45
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 34,
          "summary": "Control-flow fragment extracted for method GetStringAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:19ghosy:saveboolasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:19ghosy:saveboolasync",
      "ownerSymbolName": "SaveBoolAsync",
      "entryNodeId": "method:19ghosy:saveboolasync__entry",
      "exitNodeIds": [
        "method:19ghosy:saveboolasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:19ghosy:saveboolasync__entry",
          "kind": "entry",
          "label": "SaveBoolAsync entry",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Stores a boolean as a string in localStorage by delegating to SaveStringAsync."
        },
        {
          "id": "method:19ghosy:saveboolasync__action_47_delegation_47__linear",
          "kind": "statement",
          "label": "Delegate to SaveStringAsync",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "SaveStringAsync(key, value.ToString())"
        },
        {
          "id": "method:19ghosy:saveboolasync__call_47_SaveStringAsync",
          "kind": "call",
          "label": "SaveStringAsync",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88,
          "detail": "key, value.ToString()"
        },
        {
          "id": "method:19ghosy:saveboolasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:19ghosy:saveboolasync__entry__method:19ghosy:saveboolasync__action_47_delegation_47__linear",
          "from": "method:19ghosy:saveboolasync__entry",
          "to": "method:19ghosy:saveboolasync__action_47_delegation_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:19ghosy:saveboolasync__action_47_delegation_47__linear__call_method:19ghosy:saveboolasync__call_47_SaveStringAsync",
          "from": "method:19ghosy:saveboolasync__action_47_delegation_47__linear",
          "to": "method:19ghosy:saveboolasync__call_47_SaveStringAsync",
          "kind": "call",
          "label": "key, value.ToString()",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:19ghosy:saveboolasync__call_47_SaveStringAsync__implicit_return",
          "from": "method:19ghosy:saveboolasync__call_47_SaveStringAsync",
          "to": "method:19ghosy:saveboolasync__implicit_return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:19ghosy:saveboolasync__call_47_SaveStringAsync__jump_NexusReader_Web_Services_NativeStorageService_cs_SaveStringAsync",
          "fromNodeId": "method:19ghosy:saveboolasync__call_47_SaveStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:18nxwdn:savestringasync",
          "targetPath": "NexusReader.Web/Services/NativeStorageService.cs",
          "targetHint": "SaveStringAsync",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "reason": "Call target SaveStringAsync resolved to NexusReader.Web/Services/NativeStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 47,
        "end": 47
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 47,
          "summary": "Control-flow fragment extracted for method SaveBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:nguekt:getboolasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:nguekt:getboolasync",
      "ownerSymbolName": "GetBoolAsync",
      "entryNodeId": "method:nguekt:getboolasync__entry",
      "exitNodeIds": [
        "method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return",
        "method:nguekt:getboolasync__action_55_return_55__return",
        "method:nguekt:getboolasync__action_59_getboolasync_return_59_5__return"
      ],
      "nodes": [
        {
          "id": "method:nguekt:getboolasync__entry",
          "kind": "entry",
          "label": "GetBoolAsync entry",
          "line": 49,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Reads a boolean value from localStorage, with parsing, default fallback and exception-safe behavior."
        },
        {
          "id": "method:nguekt:getboolasync__action_51_try_catch_51__linear",
          "kind": "statement",
          "label": "Catch any exception and return default",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "catch -> return Result.Ok(defaultValue)"
        },
        {
          "id": "method:nguekt:getboolasync__action_51_getboolasync_try_51_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:nguekt:getboolasync__action_53_getboolasync_await_53_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key);"
        },
        {
          "id": "method:nguekt:getboolasync__action_53_external_call_53__linear",
          "kind": "http-call",
          "label": "Invoke JS to get localStorage item",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "var value = await _jsRuntime.InvokeAsync<string?>(\"localStorage.getItem\", key)"
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(value)",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "if empty -> return Result.Ok(defaultValue)"
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__true",
          "kind": "branch-true",
          "label": "return default",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "kind": "statement",
          "label": "merge",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition",
          "kind": "condition",
          "label": "string.IsNullOrEmpty(value)) return Result.Ok(defaultValue",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9,
          "detail": "if (string.IsNullOrEmpty(value)) return Result.Ok(defaultValue);"
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_55_parsing_55__linear",
          "kind": "statement",
          "label": "Try parse bool",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "bool.TryParse(value, out var result) ? result : defaultValue"
        },
        {
          "id": "method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(bool.TryParse(value, out var result) ? result : defaultValue);"
        },
        {
          "id": "method:nguekt:getboolasync__action_55_return_55__return",
          "kind": "return",
          "label": "Result.Ok with boolean (parsed or default)",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok(bool.TryParse(...) ? result : defaultValue)"
        },
        {
          "id": "method:nguekt:getboolasync__action_57_getboolasync_catch_57_4__catch",
          "kind": "catch",
          "label": "Handles exception path",
          "line": 57,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86,
          "detail": "catch"
        },
        {
          "id": "method:nguekt:getboolasync__action_59_getboolasync_return_59_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 59,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(defaultValue);"
        }
      ],
      "edges": [
        {
          "id": "method:nguekt:getboolasync__entry__method:nguekt:getboolasync__action_51_try_catch_51__linear",
          "from": "method:nguekt:getboolasync__entry",
          "to": "method:nguekt:getboolasync__action_51_try_catch_51__linear",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_51_try_catch_51__linear__method:nguekt:getboolasync__action_51_getboolasync_try_51_0__try",
          "from": "method:nguekt:getboolasync__action_51_try_catch_51__linear",
          "to": "method:nguekt:getboolasync__action_51_getboolasync_try_51_0__try",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:nguekt:getboolasync__action_51_getboolasync_try_51_0__try__method:nguekt:getboolasync__action_53_getboolasync_await_53_1__await",
          "from": "method:nguekt:getboolasync__action_51_getboolasync_try_51_0__try",
          "to": "method:nguekt:getboolasync__action_53_getboolasync_await_53_1__await",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:nguekt:getboolasync__action_53_getboolasync_await_53_1__await__method:nguekt:getboolasync__action_53_external_call_53__linear",
          "from": "method:nguekt:getboolasync__action_53_getboolasync_await_53_1__await",
          "to": "method:nguekt:getboolasync__action_53_external_call_53__linear",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_53_external_call_53__linear__method:nguekt:getboolasync__action_54_guard_clause_54__condition",
          "from": "method:nguekt:getboolasync__action_53_external_call_53__linear",
          "to": "method:nguekt:getboolasync__action_54_guard_clause_54__condition",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__condition__method:nguekt:getboolasync__action_54_guard_clause_54__true",
          "from": "method:nguekt:getboolasync__action_54_guard_clause_54__condition",
          "to": "method:nguekt:getboolasync__action_54_guard_clause_54__true",
          "kind": "condition-true",
          "label": "return default",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__condition__method:nguekt:getboolasync__action_54_guard_clause_54__false",
          "from": "method:nguekt:getboolasync__action_54_guard_clause_54__condition",
          "to": "method:nguekt:getboolasync__action_54_guard_clause_54__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__true__method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "from": "method:nguekt:getboolasync__action_54_guard_clause_54__true",
          "to": "method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__false__method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "from": "method:nguekt:getboolasync__action_54_guard_clause_54__false",
          "to": "method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_54_guard_clause_54__merge__method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition",
          "from": "method:nguekt:getboolasync__action_54_guard_clause_54__merge",
          "to": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition__method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__true",
          "from": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition",
          "to": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition__method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__false",
          "from": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__condition",
          "to": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__true__method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "from": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__true",
          "to": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__false__method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "from": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__false",
          "to": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "kind": "next",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge__method:nguekt:getboolasync__action_55_parsing_55__linear",
          "from": "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge",
          "to": "method:nguekt:getboolasync__action_55_parsing_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_55_parsing_55__linear__method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return",
          "from": "method:nguekt:getboolasync__action_55_parsing_55__linear",
          "to": "method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return",
          "kind": "return",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return__method:nguekt:getboolasync__action_55_return_55__return",
          "from": "method:nguekt:getboolasync__action_55_getboolasync_return_55_3__return",
          "to": "method:nguekt:getboolasync__action_55_return_55__return",
          "kind": "return",
          "line": 55,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:nguekt:getboolasync__action_55_return_55__return__method:nguekt:getboolasync__action_57_getboolasync_catch_57_4__catch",
          "from": "method:nguekt:getboolasync__action_55_return_55__return",
          "to": "method:nguekt:getboolasync__action_57_getboolasync_catch_57_4__catch",
          "kind": "exception",
          "line": 57,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:nguekt:getboolasync__action_57_getboolasync_catch_57_4__catch__method:nguekt:getboolasync__action_59_getboolasync_return_59_5__return",
          "from": "method:nguekt:getboolasync__action_57_getboolasync_catch_57_4__catch",
          "to": "method:nguekt:getboolasync__action_59_getboolasync_return_59_5__return",
          "kind": "return",
          "line": 59,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:nguekt:getboolasync__action_54_guard_clause_54__merge",
        "method:nguekt:getboolasync__action_54_getboolasync_guard_clause_54_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 49,
        "end": 61
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 49,
          "summary": "Control-flow fragment extracted for method GetBoolAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1gw1s7x:removeasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:1gw1s7x:removeasync",
      "ownerSymbolName": "RemoveAsync",
      "entryNodeId": "method:1gw1s7x:removeasync__entry",
      "exitNodeIds": [
        "method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return",
        "method:1gw1s7x:removeasync__action_68_return_68__return",
        "method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return",
        "method:1gw1s7x:removeasync__action_72_return_72__return"
      ],
      "nodes": [
        {
          "id": "method:1gw1s7x:removeasync__entry",
          "kind": "entry",
          "label": "RemoveAsync entry",
          "line": 63,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Removes an item from browser localStorage via JS interop and reports success/failure."
        },
        {
          "id": "method:1gw1s7x:removeasync__action_65_try_catch_65__linear",
          "kind": "statement",
          "label": "Return success or failure based on JS call",
          "line": 65,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "try -> return Result.Ok(); catch(Exception ex) -> return Result.Fail(ex.Message)"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_65_removeasync_try_65_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 65,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_67_removeasync_await_67_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 67,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key);"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_67_external_call_67__linear",
          "kind": "http-call",
          "label": "Invoke JS to remove localStorage item",
          "line": 67,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "await _jsRuntime.InvokeVoidAsync(\"localStorage.removeItem\", key)"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_68_return_68__return",
          "kind": "return",
          "label": "Result.Ok on success",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Ok()"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_70_removeasync_catch_70_3__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 70,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return",
          "kind": "return",
          "label": "Returns result",
          "line": 72,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(ex.Message);"
        },
        {
          "id": "method:1gw1s7x:removeasync__action_72_return_72__return",
          "kind": "return",
          "label": "Result.Fail on exception",
          "line": 72,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "Result.Fail(ex.Message)"
        }
      ],
      "edges": [
        {
          "id": "method:1gw1s7x:removeasync__entry__method:1gw1s7x:removeasync__action_65_try_catch_65__linear",
          "from": "method:1gw1s7x:removeasync__entry",
          "to": "method:1gw1s7x:removeasync__action_65_try_catch_65__linear",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gw1s7x:removeasync__action_65_try_catch_65__linear__method:1gw1s7x:removeasync__action_65_removeasync_try_65_0__try",
          "from": "method:1gw1s7x:removeasync__action_65_try_catch_65__linear",
          "to": "method:1gw1s7x:removeasync__action_65_removeasync_try_65_0__try",
          "kind": "next",
          "line": 65,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1gw1s7x:removeasync__action_65_removeasync_try_65_0__try__method:1gw1s7x:removeasync__action_67_removeasync_await_67_1__await",
          "from": "method:1gw1s7x:removeasync__action_65_removeasync_try_65_0__try",
          "to": "method:1gw1s7x:removeasync__action_67_removeasync_await_67_1__await",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1gw1s7x:removeasync__action_67_removeasync_await_67_1__await__method:1gw1s7x:removeasync__action_67_external_call_67__linear",
          "from": "method:1gw1s7x:removeasync__action_67_removeasync_await_67_1__await",
          "to": "method:1gw1s7x:removeasync__action_67_external_call_67__linear",
          "kind": "next",
          "line": 67,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gw1s7x:removeasync__action_67_external_call_67__linear__method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return",
          "from": "method:1gw1s7x:removeasync__action_67_external_call_67__linear",
          "to": "method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return__method:1gw1s7x:removeasync__action_68_return_68__return",
          "from": "method:1gw1s7x:removeasync__action_68_removeasync_return_68_2__return",
          "to": "method:1gw1s7x:removeasync__action_68_return_68__return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gw1s7x:removeasync__action_68_return_68__return__method:1gw1s7x:removeasync__action_70_removeasync_catch_70_3__catch",
          "from": "method:1gw1s7x:removeasync__action_68_return_68__return",
          "to": "method:1gw1s7x:removeasync__action_70_removeasync_catch_70_3__catch",
          "kind": "exception",
          "line": 70,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1gw1s7x:removeasync__action_70_removeasync_catch_70_3__catch__method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return",
          "from": "method:1gw1s7x:removeasync__action_70_removeasync_catch_70_3__catch",
          "to": "method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return",
          "kind": "return",
          "line": 72,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return__method:1gw1s7x:removeasync__action_72_return_72__return",
          "from": "method:1gw1s7x:removeasync__action_72_removeasync_return_72_4__return",
          "to": "method:1gw1s7x:removeasync__action_72_return_72__return",
          "kind": "return",
          "line": 72,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 63,
        "end": 74
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 63,
          "summary": "Control-flow fragment extracted for method RemoveAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:10perg:savesecurestring__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:10perg:savesecurestring",
      "ownerSymbolName": "SaveSecureString",
      "entryNodeId": "method:10perg:savesecurestring__entry",
      "exitNodeIds": [
        "method:10perg:savesecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:10perg:savesecurestring__entry",
          "kind": "entry",
          "label": "SaveSecureString entry",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Alias for SaveStringAsync; intended for secure-string semantics at the API level."
        },
        {
          "id": "method:10perg:savesecurestring__action_76_savesecurestring_await_76_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result> SaveSecureString(string key, string value) => await SaveStringAsync(key, value);"
        },
        {
          "id": "method:10perg:savesecurestring__action_76_delegation_76__linear",
          "kind": "statement",
          "label": "Delegate to SaveStringAsync",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "await SaveStringAsync(key, value)"
        },
        {
          "id": "method:10perg:savesecurestring__call_76_SaveStringAsync",
          "kind": "call",
          "label": "SaveStringAsync",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88,
          "detail": "key, value"
        },
        {
          "id": "method:10perg:savesecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:10perg:savesecurestring__entry__method:10perg:savesecurestring__action_76_savesecurestring_await_76_0__await",
          "from": "method:10perg:savesecurestring__entry",
          "to": "method:10perg:savesecurestring__action_76_savesecurestring_await_76_0__await",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:10perg:savesecurestring__action_76_savesecurestring_await_76_0__await__method:10perg:savesecurestring__action_76_delegation_76__linear",
          "from": "method:10perg:savesecurestring__action_76_savesecurestring_await_76_0__await",
          "to": "method:10perg:savesecurestring__action_76_delegation_76__linear",
          "kind": "next",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:10perg:savesecurestring__action_76_delegation_76__linear__call_method:10perg:savesecurestring__call_76_SaveStringAsync",
          "from": "method:10perg:savesecurestring__action_76_delegation_76__linear",
          "to": "method:10perg:savesecurestring__call_76_SaveStringAsync",
          "kind": "call",
          "label": "key, value",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:10perg:savesecurestring__call_76_SaveStringAsync__implicit_return",
          "from": "method:10perg:savesecurestring__call_76_SaveStringAsync",
          "to": "method:10perg:savesecurestring__implicit_return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:10perg:savesecurestring__call_76_SaveStringAsync__jump_NexusReader_Web_Services_NativeStorageService_cs_SaveStringAsync",
          "fromNodeId": "method:10perg:savesecurestring__call_76_SaveStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:18nxwdn:savestringasync",
          "targetPath": "NexusReader.Web/Services/NativeStorageService.cs",
          "targetHint": "SaveStringAsync",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "reason": "Call target SaveStringAsync resolved to NexusReader.Web/Services/NativeStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 76,
        "end": 76
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 76,
          "summary": "Control-flow fragment extracted for method SaveSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1olwlbd:getsecurestring__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:1olwlbd:getsecurestring",
      "ownerSymbolName": "GetSecureString",
      "entryNodeId": "method:1olwlbd:getsecurestring__entry",
      "exitNodeIds": [
        "method:1olwlbd:getsecurestring__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1olwlbd:getsecurestring__entry",
          "kind": "entry",
          "label": "GetSecureString entry",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Alias for GetStringAsync; intended for secure-string semantics at the API level."
        },
        {
          "id": "method:1olwlbd:getsecurestring__action_78_getsecurestring_await_78_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81,
          "detail": "public async Task<Result<string?>> GetSecureString(string key) => await GetStringAsync(key);"
        },
        {
          "id": "method:1olwlbd:getsecurestring__action_78_delegation_78__linear",
          "kind": "statement",
          "label": "Delegate to GetStringAsync",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "await GetStringAsync(key)"
        },
        {
          "id": "method:1olwlbd:getsecurestring__call_78_GetStringAsync",
          "kind": "call",
          "label": "GetStringAsync",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88,
          "detail": "key"
        },
        {
          "id": "method:1olwlbd:getsecurestring__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1olwlbd:getsecurestring__entry__method:1olwlbd:getsecurestring__action_78_getsecurestring_await_78_0__await",
          "from": "method:1olwlbd:getsecurestring__entry",
          "to": "method:1olwlbd:getsecurestring__action_78_getsecurestring_await_78_0__await",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1olwlbd:getsecurestring__action_78_getsecurestring_await_78_0__await__method:1olwlbd:getsecurestring__action_78_delegation_78__linear",
          "from": "method:1olwlbd:getsecurestring__action_78_getsecurestring_await_78_0__await",
          "to": "method:1olwlbd:getsecurestring__action_78_delegation_78__linear",
          "kind": "next",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1olwlbd:getsecurestring__action_78_delegation_78__linear__call_method:1olwlbd:getsecurestring__call_78_GetStringAsync",
          "from": "method:1olwlbd:getsecurestring__action_78_delegation_78__linear",
          "to": "method:1olwlbd:getsecurestring__call_78_GetStringAsync",
          "kind": "call",
          "label": "key",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1olwlbd:getsecurestring__call_78_GetStringAsync__implicit_return",
          "from": "method:1olwlbd:getsecurestring__call_78_GetStringAsync",
          "to": "method:1olwlbd:getsecurestring__implicit_return",
          "kind": "return",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1olwlbd:getsecurestring__call_78_GetStringAsync__jump_NexusReader_Web_Services_NativeStorageService_cs_GetStringAsync",
          "fromNodeId": "method:1olwlbd:getsecurestring__call_78_GetStringAsync",
          "kind": "call-target",
          "targetNodeId": "method:wsqlg8:getstringasync",
          "targetPath": "NexusReader.Web/Services/NativeStorageService.cs",
          "targetHint": "GetStringAsync",
          "line": 78,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "reason": "Call target GetStringAsync resolved to NexusReader.Web/Services/NativeStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.82,
      "lineSpan": {
        "start": 78,
        "end": 78
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 78,
          "summary": "Control-flow fragment extracted for method GetSecureString.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1k49ns3:removesecureasync__fragment",
      "ownerFileId": "file:902xey:nativestorageservice-cs",
      "ownerSymbolId": "method:1k49ns3:removesecureasync",
      "ownerSymbolName": "RemoveSecureAsync",
      "entryNodeId": "method:1k49ns3:removesecureasync__entry",
      "exitNodeIds": [
        "method:1k49ns3:removesecureasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1k49ns3:removesecureasync__entry",
          "kind": "entry",
          "label": "RemoveSecureAsync entry",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.99,
          "detail": "Alias for RemoveAsync; intended for secure-string removal semantics."
        },
        {
          "id": "method:1k49ns3:removesecureasync__action_80_delegation_80__linear",
          "kind": "statement",
          "label": "Delegate to RemoveAsync",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7,
          "detail": "RemoveAsync(key)"
        },
        {
          "id": "method:1k49ns3:removesecureasync__call_80_RemoveAsync",
          "kind": "call",
          "label": "RemoveAsync",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88,
          "detail": "key"
        },
        {
          "id": "method:1k49ns3:removesecureasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1k49ns3:removesecureasync__entry__method:1k49ns3:removesecureasync__action_80_delegation_80__linear",
          "from": "method:1k49ns3:removesecureasync__entry",
          "to": "method:1k49ns3:removesecureasync__action_80_delegation_80__linear",
          "kind": "next",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1k49ns3:removesecureasync__action_80_delegation_80__linear__call_method:1k49ns3:removesecureasync__call_80_RemoveAsync",
          "from": "method:1k49ns3:removesecureasync__action_80_delegation_80__linear",
          "to": "method:1k49ns3:removesecureasync__call_80_RemoveAsync",
          "kind": "call",
          "label": "key",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1k49ns3:removesecureasync__call_80_RemoveAsync__implicit_return",
          "from": "method:1k49ns3:removesecureasync__call_80_RemoveAsync",
          "to": "method:1k49ns3:removesecureasync__implicit_return",
          "kind": "return",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1k49ns3:removesecureasync__call_80_RemoveAsync__jump_NexusReader_Web_Services_NativeStorageService_cs_RemoveAsync",
          "fromNodeId": "method:1k49ns3:removesecureasync__call_80_RemoveAsync",
          "kind": "call-target",
          "targetNodeId": "method:1gw1s7x:removeasync",
          "targetPath": "NexusReader.Web/Services/NativeStorageService.cs",
          "targetHint": "RemoveAsync",
          "line": 80,
          "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs",
          "reason": "Call target RemoveAsync resolved to NexusReader.Web/Services/NativeStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 80,
        "end": 80
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/NativeStorageService.cs",
          "line": 80,
          "summary": "Control-flow fragment extracted for method RemoveSecureAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:icuddu:serveridentityservice__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:icuddu:serveridentityservice",
      "ownerSymbolName": "ServerIdentityService",
      "entryNodeId": "method:icuddu:serveridentityservice__entry",
      "exitNodeIds": [
        "method:icuddu:serveridentityservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:icuddu:serveridentityservice__entry",
          "kind": "entry",
          "label": "ServerIdentityService entry",
          "line": 25,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "Constructor - wires up UserManager, SignInManager, HttpContextAccessor, Mediator and native storage dependency fields."
        },
        {
          "id": "method:icuddu:serveridentityservice__action_32_assignment_32__linear",
          "kind": "statement",
          "label": "Assign injected dependencies to fields",
          "line": 32,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_userManager, _signInManager, _httpContextAccessor, _mediator, _storageService assignments"
        },
        {
          "id": "method:icuddu:serveridentityservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 37,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:icuddu:serveridentityservice__entry__method:icuddu:serveridentityservice__action_32_assignment_32__linear",
          "from": "method:icuddu:serveridentityservice__entry",
          "to": "method:icuddu:serveridentityservice__action_32_assignment_32__linear",
          "kind": "next",
          "line": 32,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:icuddu:serveridentityservice__action_32_assignment_32__linear__implicit_return",
          "from": "method:icuddu:serveridentityservice__action_32_assignment_32__linear",
          "to": "method:icuddu:serveridentityservice__implicit_return",
          "kind": "return",
          "line": 37,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 25,
        "end": 37
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method ServerIdentityService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1pi9wuc:loginasync__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:1pi9wuc:loginasync",
      "ownerSymbolName": "LoginAsync",
      "entryNodeId": "method:1pi9wuc:loginasync__entry",
      "exitNodeIds": [
        "method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return",
        "method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return",
        "method:1pi9wuc:loginasync__action_64_return_64__return",
        "method:1pi9wuc:loginasync__action_68_loginasync_return_68_13__return"
      ],
      "nodes": [
        {
          "id": "method:1pi9wuc:loginasync__entry",
          "kind": "entry",
          "label": "LoginAsync entry",
          "line": 39,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "Validates user credentials server-side (for Blazor Server) but deliberately does not perform cookie sign-in; returns success/failure result."
        },
        {
          "id": "method:1pi9wuc:loginasync__action_41_try_catch_41__linear",
          "kind": "statement",
          "label": "Wraps credential verification to return friendly failure on exceptions",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(...) }"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_41_loginasync_try_41_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_loginasync_await_43_2__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "var user = await _userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_loginasync_repository_read_43_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86,
          "detail": "var user = await _userManager.FindByEmailAsync(email);"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_external_call_43__linear",
          "kind": "http-call",
          "label": "Find user by email",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_userManager.FindByEmailAsync(email) -- framework identity external call"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition",
          "kind": "condition",
          "label": "user == null",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "if (user == null) return Result.Fail(\"Nieprawidłowy e-mail lub hasło.\")"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__true",
          "kind": "branch-true",
          "label": "invalid",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__false",
          "kind": "branch-false",
          "label": "return fail",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "kind": "statement",
          "label": "merge",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition",
          "kind": "condition",
          "label": "user == null) return Result.Fail(\"Nieprawidłowy e-mail lub hasło.\"",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9,
          "detail": "if (user == null) return Result.Fail(\"Nieprawidłowy e-mail lub hasło.\");"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "kind": "statement",
          "label": "merge",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_await_47_5__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "if (await _userManager.IsLockedOutAsync(user)) return Result.Fail(\"Konto zostało zablokowane.\");"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition",
          "kind": "condition",
          "label": "IsLockedOutAsync(user) == true",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "if (await _userManager.IsLockedOutAsync(user)) return Result.Fail(\"Konto zostało zablokowane.\")"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__true",
          "kind": "branch-true",
          "label": "locked",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__false",
          "kind": "branch-false",
          "label": "return fail",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition",
          "kind": "condition",
          "label": "await _userManager.IsLockedOutAsync(user)) return Result.Fail(\"Konto zostało zablokowane.\"",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9,
          "detail": "if (await _userManager.IsLockedOutAsync(user)) return Result.Fail(\"Konto zostało zablokowane.\");"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_external_call_47__linear",
          "kind": "http-call",
          "label": "Check if account is locked",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_userManager.IsLockedOutAsync(user) -- framework identity external call"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_50_loginasync_await_50_6__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 50,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "var isCorrect = await _userManager.CheckPasswordAsync(user, password);"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_50_external_call_50__linear",
          "kind": "http-call",
          "label": "Verify password",
          "line": 50,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_userManager.CheckPasswordAsync(user, password) -- framework identity external call"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition",
          "kind": "condition",
          "label": "!isCorrect",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.AccessFailedAsync(user); return Result.Fail(...)"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__true",
          "kind": "branch-true",
          "label": "increment-failure",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__false",
          "kind": "branch-false",
          "label": "return fail",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition",
          "kind": "condition",
          "label": "!isCorrect",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78,
          "detail": "if (!isCorrect)"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__true",
          "kind": "branch-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__false",
          "kind": "branch-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "kind": "statement",
          "label": "merge",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_53_loginasync_await_53_8__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "await _userManager.AccessFailedAsync(user);"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return",
          "kind": "return",
          "label": "Returns result",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(\"Nieprawidłowy e-mail lub hasło.\");"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_58_loginasync_await_58_10__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 58,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "await _userManager.ResetAccessFailedCountAsync(user);"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_58_external_call_58__linear",
          "kind": "http-call",
          "label": "Reset access failed count after successful auth",
          "line": 58,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "await _userManager.ResetAccessFailedCountAsync(user)"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return",
          "kind": "return",
          "label": "Returns result",
          "line": 64,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_64_return_64__return",
          "kind": "return",
          "label": "Return OK to indicate credentials valid (no server-side cookie set here)",
          "line": 64,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_66_loginasync_catch_66_12__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 66,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1pi9wuc:loginasync__action_68_loginasync_return_68_13__return",
          "kind": "return",
          "label": "Returns result",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Błąd podczas weryfikacji poświadczeń: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1pi9wuc:loginasync__entry__method:1pi9wuc:loginasync__action_41_try_catch_41__linear",
          "from": "method:1pi9wuc:loginasync__entry",
          "to": "method:1pi9wuc:loginasync__action_41_try_catch_41__linear",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_41_try_catch_41__linear__method:1pi9wuc:loginasync__action_41_loginasync_try_41_0__try",
          "from": "method:1pi9wuc:loginasync__action_41_try_catch_41__linear",
          "to": "method:1pi9wuc:loginasync__action_41_loginasync_try_41_0__try",
          "kind": "next",
          "line": 41,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1pi9wuc:loginasync__action_41_loginasync_try_41_0__try__method:1pi9wuc:loginasync__action_43_loginasync_await_43_2__await",
          "from": "method:1pi9wuc:loginasync__action_41_loginasync_try_41_0__try",
          "to": "method:1pi9wuc:loginasync__action_43_loginasync_await_43_2__await",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_loginasync_await_43_2__await__method:1pi9wuc:loginasync__action_43_loginasync_repository_read_43_1__linear",
          "from": "method:1pi9wuc:loginasync__action_43_loginasync_await_43_2__await",
          "to": "method:1pi9wuc:loginasync__action_43_loginasync_repository_read_43_1__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_loginasync_repository_read_43_1__linear__method:1pi9wuc:loginasync__action_43_external_call_43__linear",
          "from": "method:1pi9wuc:loginasync__action_43_loginasync_repository_read_43_1__linear",
          "to": "method:1pi9wuc:loginasync__action_43_external_call_43__linear",
          "kind": "next",
          "line": 43,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_43_external_call_43__linear__method:1pi9wuc:loginasync__action_44_guard_clause_44__condition",
          "from": "method:1pi9wuc:loginasync__action_43_external_call_43__linear",
          "to": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition__method:1pi9wuc:loginasync__action_44_guard_clause_44__true",
          "from": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition",
          "to": "method:1pi9wuc:loginasync__action_44_guard_clause_44__true",
          "kind": "condition-true",
          "label": "invalid",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition__method:1pi9wuc:loginasync__action_44_guard_clause_44__false",
          "from": "method:1pi9wuc:loginasync__action_44_guard_clause_44__condition",
          "to": "method:1pi9wuc:loginasync__action_44_guard_clause_44__false",
          "kind": "condition-false",
          "label": "return fail",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__true__method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "from": "method:1pi9wuc:loginasync__action_44_guard_clause_44__true",
          "to": "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__false__method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "from": "method:1pi9wuc:loginasync__action_44_guard_clause_44__false",
          "to": "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge__method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition",
          "from": "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
          "to": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition__method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__true",
          "from": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition",
          "to": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition__method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__false",
          "from": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__condition",
          "to": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__true__method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "from": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__true",
          "to": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__false__method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "from": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__false",
          "to": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "kind": "next",
          "line": 44,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge__method:1pi9wuc:loginasync__action_47_loginasync_await_47_5__await",
          "from": "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_await_47_5__await",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_await_47_5__await__method:1pi9wuc:loginasync__action_47_guard_clause_47__condition",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_await_47_5__await",
          "to": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition__method:1pi9wuc:loginasync__action_47_guard_clause_47__true",
          "from": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition",
          "to": "method:1pi9wuc:loginasync__action_47_guard_clause_47__true",
          "kind": "condition-true",
          "label": "locked",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition__method:1pi9wuc:loginasync__action_47_guard_clause_47__false",
          "from": "method:1pi9wuc:loginasync__action_47_guard_clause_47__condition",
          "to": "method:1pi9wuc:loginasync__action_47_guard_clause_47__false",
          "kind": "condition-false",
          "label": "return fail",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__true__method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "from": "method:1pi9wuc:loginasync__action_47_guard_clause_47__true",
          "to": "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__false__method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "from": "method:1pi9wuc:loginasync__action_47_guard_clause_47__false",
          "to": "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge__method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition",
          "from": "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition__method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__true",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition__method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__false",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__condition",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__true__method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__true",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__false__method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__false",
          "to": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge__method:1pi9wuc:loginasync__action_47_external_call_47__linear",
          "from": "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
          "to": "method:1pi9wuc:loginasync__action_47_external_call_47__linear",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_47_external_call_47__linear__method:1pi9wuc:loginasync__action_50_loginasync_await_50_6__await",
          "from": "method:1pi9wuc:loginasync__action_47_external_call_47__linear",
          "to": "method:1pi9wuc:loginasync__action_50_loginasync_await_50_6__await",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pi9wuc:loginasync__action_50_loginasync_await_50_6__await__method:1pi9wuc:loginasync__action_50_external_call_50__linear",
          "from": "method:1pi9wuc:loginasync__action_50_loginasync_await_50_6__await",
          "to": "method:1pi9wuc:loginasync__action_50_external_call_50__linear",
          "kind": "next",
          "line": 50,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_50_external_call_50__linear__method:1pi9wuc:loginasync__action_51_guard_clause_51__condition",
          "from": "method:1pi9wuc:loginasync__action_50_external_call_50__linear",
          "to": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition__method:1pi9wuc:loginasync__action_51_guard_clause_51__true",
          "from": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition",
          "to": "method:1pi9wuc:loginasync__action_51_guard_clause_51__true",
          "kind": "condition-true",
          "label": "increment-failure",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition__method:1pi9wuc:loginasync__action_51_guard_clause_51__false",
          "from": "method:1pi9wuc:loginasync__action_51_guard_clause_51__condition",
          "to": "method:1pi9wuc:loginasync__action_51_guard_clause_51__false",
          "kind": "condition-false",
          "label": "return fail",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__true__method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "from": "method:1pi9wuc:loginasync__action_51_guard_clause_51__true",
          "to": "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__false__method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "from": "method:1pi9wuc:loginasync__action_51_guard_clause_51__false",
          "to": "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge__method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition",
          "from": "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
          "to": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition__method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__true",
          "from": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition",
          "to": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__true",
          "kind": "condition-true",
          "label": "true",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition__method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__false",
          "from": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__condition",
          "to": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__false",
          "kind": "condition-false",
          "label": "false",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__true__method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "from": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__true",
          "to": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__false__method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "from": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__false",
          "to": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "kind": "next",
          "line": 51,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge__method:1pi9wuc:loginasync__action_53_loginasync_await_53_8__await",
          "from": "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge",
          "to": "method:1pi9wuc:loginasync__action_53_loginasync_await_53_8__await",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pi9wuc:loginasync__action_53_loginasync_await_53_8__await__method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return",
          "from": "method:1pi9wuc:loginasync__action_53_loginasync_await_53_8__await",
          "to": "method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return",
          "kind": "return",
          "line": 54,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return__method:1pi9wuc:loginasync__action_58_loginasync_await_58_10__await",
          "from": "method:1pi9wuc:loginasync__action_54_loginasync_return_54_9__return",
          "to": "method:1pi9wuc:loginasync__action_58_loginasync_await_58_10__await",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1pi9wuc:loginasync__action_58_loginasync_await_58_10__await__method:1pi9wuc:loginasync__action_58_external_call_58__linear",
          "from": "method:1pi9wuc:loginasync__action_58_loginasync_await_58_10__await",
          "to": "method:1pi9wuc:loginasync__action_58_external_call_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_58_external_call_58__linear__method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return",
          "from": "method:1pi9wuc:loginasync__action_58_external_call_58__linear",
          "to": "method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return__method:1pi9wuc:loginasync__action_64_return_64__return",
          "from": "method:1pi9wuc:loginasync__action_64_loginasync_return_64_11__return",
          "to": "method:1pi9wuc:loginasync__action_64_return_64__return",
          "kind": "return",
          "line": 64,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1pi9wuc:loginasync__action_64_return_64__return__method:1pi9wuc:loginasync__action_66_loginasync_catch_66_12__catch",
          "from": "method:1pi9wuc:loginasync__action_64_return_64__return",
          "to": "method:1pi9wuc:loginasync__action_66_loginasync_catch_66_12__catch",
          "kind": "exception",
          "line": 66,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1pi9wuc:loginasync__action_66_loginasync_catch_66_12__catch__method:1pi9wuc:loginasync__action_68_loginasync_return_68_13__return",
          "from": "method:1pi9wuc:loginasync__action_66_loginasync_catch_66_12__catch",
          "to": "method:1pi9wuc:loginasync__action_68_loginasync_return_68_13__return",
          "kind": "return",
          "line": 68,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1pi9wuc:loginasync__action_44_guard_clause_44__merge",
        "method:1pi9wuc:loginasync__action_44_loginasync_guard_clause_44_3__merge",
        "method:1pi9wuc:loginasync__action_47_guard_clause_47__merge",
        "method:1pi9wuc:loginasync__action_47_loginasync_guard_clause_47_4__merge",
        "method:1pi9wuc:loginasync__action_51_guard_clause_51__merge",
        "method:1pi9wuc:loginasync__action_51_loginasync_branch_51_7__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 39,
        "end": 70
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 39,
          "summary": "Control-flow fragment extracted for method LoginAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1a1t07w:logoutasync__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:1a1t07w:logoutasync",
      "ownerSymbolName": "LogoutAsync",
      "entryNodeId": "method:1a1t07w:logoutasync__entry",
      "exitNodeIds": [
        "method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return",
        "method:1a1t07w:logoutasync__action_76_return_76__return"
      ],
      "nodes": [
        {
          "id": "method:1a1t07w:logoutasync__entry",
          "kind": "entry",
          "label": "LogoutAsync entry",
          "line": 72,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "No-op logout helper for Blazor/SignalR scenarios; instructs UI to use a logout-form endpoint to clear cookies."
        },
        {
          "id": "method:1a1t07w:logoutasync__action_74_comment_74__linear",
          "kind": "statement",
          "label": "Notes about cookie clearing limitations in SignalR/Blazor",
          "line": 74,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "UI should redirect to /account/logout-form"
        },
        {
          "id": "method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return",
          "kind": "return",
          "label": "Returns result",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1a1t07w:logoutasync__action_76_return_76__return",
          "kind": "return",
          "label": "Return OK (no server-side sign-out performed here)",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok()"
        }
      ],
      "edges": [
        {
          "id": "method:1a1t07w:logoutasync__entry__method:1a1t07w:logoutasync__action_74_comment_74__linear",
          "from": "method:1a1t07w:logoutasync__entry",
          "to": "method:1a1t07w:logoutasync__action_74_comment_74__linear",
          "kind": "next",
          "line": 74,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1a1t07w:logoutasync__action_74_comment_74__linear__method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return",
          "from": "method:1a1t07w:logoutasync__action_74_comment_74__linear",
          "to": "method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return__method:1a1t07w:logoutasync__action_76_return_76__return",
          "from": "method:1a1t07w:logoutasync__action_76_logoutasync_return_76_0__return",
          "to": "method:1a1t07w:logoutasync__action_76_return_76__return",
          "kind": "return",
          "line": 76,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.7899999999999999,
      "lineSpan": {
        "start": 72,
        "end": 77
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 72,
          "summary": "Control-flow fragment extracted for method LogoutAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1ekb3x6:registerasync__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:1ekb3x6:registerasync",
      "ownerSymbolName": "RegisterAsync",
      "entryNodeId": "method:1ekb3x6:registerasync__entry",
      "exitNodeIds": [
        "method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return",
        "method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return",
        "method:1ekb3x6:registerasync__action_102_registerasync_return_102_8__return"
      ],
      "nodes": [
        {
          "id": "method:1ekb3x6:registerasync__entry",
          "kind": "entry",
          "label": "RegisterAsync entry",
          "line": 79,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "Creates a new NexusUser with default subscription/tenant and returns success or the first identity error; does not sign in the user."
        },
        {
          "id": "method:1ekb3x6:registerasync__action_81_try_catch_81__linear",
          "kind": "statement",
          "label": "Wraps registration to return friendly failure on exceptions",
          "line": 81,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "try { ... } catch (Exception ex) { return Result.Fail(...) }"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_81_registerasync_try_81_0__try",
          "kind": "try",
          "label": "Begins protected execution",
          "line": 81,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.84,
          "detail": "try"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_83_object_construction_83__linear",
          "kind": "statement",
          "label": "Build new NexusUser DTO/entity for creation",
          "line": 83,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "new NexusUser { UserName = email, Email = email, SubscriptionPlanId = SubscriptionPlan.FreeId, TenantId = \"global\" }"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_90_registerasync_await_90_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 90,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "var result = await _userManager.CreateAsync(user, password);"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_90_external_call_90__linear",
          "kind": "http-call",
          "label": "Persist new user",
          "line": 90,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_userManager.CreateAsync(user, password) -- framework identity external call"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "If succeeded return Result.Ok(); else return Result.Fail(first error or fallback message)"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__true",
          "kind": "branch-true",
          "label": "succeeded -> return OK",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__false",
          "kind": "branch-false",
          "label": "failed -> return first error",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition",
          "kind": "condition",
          "label": "result.Succeeded",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78,
          "detail": "if (result.Succeeded)"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__true",
          "kind": "branch-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__false",
          "kind": "branch-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return",
          "kind": "return",
          "label": "Returns result",
          "line": 95,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok();"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return",
          "kind": "return",
          "label": "Returns result",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_repository_read_98_4__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_mapping_98_5__linear",
          "kind": "statement",
          "label": "Maps data or transforms shape",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.74,
          "detail": "return Result.Fail(result.Errors.Select(e => e.Description).FirstOrDefault() ?? \"Rejestracja nie powiodła się.\");"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_100_registerasync_catch_100_7__catch",
          "kind": "catch",
          "label": "catch Exception ex",
          "line": 100,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86,
          "detail": "catch (Exception ex)"
        },
        {
          "id": "method:1ekb3x6:registerasync__action_102_registerasync_return_102_8__return",
          "kind": "return",
          "label": "Returns result",
          "line": 102,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Fail(new Error($\"Błąd podczas rejestracji na serwerze: {ex.Message}\").CausedBy(ex));"
        }
      ],
      "edges": [
        {
          "id": "method:1ekb3x6:registerasync__entry__method:1ekb3x6:registerasync__action_81_try_catch_81__linear",
          "from": "method:1ekb3x6:registerasync__entry",
          "to": "method:1ekb3x6:registerasync__action_81_try_catch_81__linear",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_81_try_catch_81__linear__method:1ekb3x6:registerasync__action_81_registerasync_try_81_0__try",
          "from": "method:1ekb3x6:registerasync__action_81_try_catch_81__linear",
          "to": "method:1ekb3x6:registerasync__action_81_registerasync_try_81_0__try",
          "kind": "next",
          "line": 81,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.84
        },
        {
          "id": "method:1ekb3x6:registerasync__action_81_registerasync_try_81_0__try__method:1ekb3x6:registerasync__action_83_object_construction_83__linear",
          "from": "method:1ekb3x6:registerasync__action_81_registerasync_try_81_0__try",
          "to": "method:1ekb3x6:registerasync__action_83_object_construction_83__linear",
          "kind": "next",
          "line": 83,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_83_object_construction_83__linear__method:1ekb3x6:registerasync__action_90_registerasync_await_90_1__await",
          "from": "method:1ekb3x6:registerasync__action_83_object_construction_83__linear",
          "to": "method:1ekb3x6:registerasync__action_90_registerasync_await_90_1__await",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1ekb3x6:registerasync__action_90_registerasync_await_90_1__await__method:1ekb3x6:registerasync__action_90_external_call_90__linear",
          "from": "method:1ekb3x6:registerasync__action_90_registerasync_await_90_1__await",
          "to": "method:1ekb3x6:registerasync__action_90_external_call_90__linear",
          "kind": "next",
          "line": 90,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_90_external_call_90__linear__method:1ekb3x6:registerasync__action_92_branch_92__condition",
          "from": "method:1ekb3x6:registerasync__action_90_external_call_90__linear",
          "to": "method:1ekb3x6:registerasync__action_92_branch_92__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__condition__method:1ekb3x6:registerasync__action_92_branch_92__true",
          "from": "method:1ekb3x6:registerasync__action_92_branch_92__condition",
          "to": "method:1ekb3x6:registerasync__action_92_branch_92__true",
          "kind": "condition-true",
          "label": "succeeded -> return OK",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__condition__method:1ekb3x6:registerasync__action_92_branch_92__false",
          "from": "method:1ekb3x6:registerasync__action_92_branch_92__condition",
          "to": "method:1ekb3x6:registerasync__action_92_branch_92__false",
          "kind": "condition-false",
          "label": "failed -> return first error",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__true__method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "from": "method:1ekb3x6:registerasync__action_92_branch_92__true",
          "to": "method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__false__method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "from": "method:1ekb3x6:registerasync__action_92_branch_92__false",
          "to": "method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_branch_92__merge__method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition",
          "from": "method:1ekb3x6:registerasync__action_92_branch_92__merge",
          "to": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition__method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__true",
          "from": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition",
          "to": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__true",
          "kind": "condition-true",
          "label": "true",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition__method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__false",
          "from": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__condition",
          "to": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__false",
          "kind": "condition-false",
          "label": "false",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__true__method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "from": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__true",
          "to": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__false__method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "from": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__false",
          "to": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "kind": "next",
          "line": 92,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge__method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return",
          "from": "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge",
          "to": "method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return",
          "kind": "return",
          "line": 95,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return__method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return",
          "from": "method:1ekb3x6:registerasync__action_95_registerasync_return_95_3__return",
          "to": "method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return",
          "kind": "return",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return__method:1ekb3x6:registerasync__action_98_registerasync_repository_read_98_4__linear",
          "from": "method:1ekb3x6:registerasync__action_98_registerasync_return_98_6__return",
          "to": "method:1ekb3x6:registerasync__action_98_registerasync_repository_read_98_4__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_repository_read_98_4__linear__method:1ekb3x6:registerasync__action_98_registerasync_mapping_98_5__linear",
          "from": "method:1ekb3x6:registerasync__action_98_registerasync_repository_read_98_4__linear",
          "to": "method:1ekb3x6:registerasync__action_98_registerasync_mapping_98_5__linear",
          "kind": "next",
          "line": 98,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.74
        },
        {
          "id": "method:1ekb3x6:registerasync__action_98_registerasync_mapping_98_5__linear__method:1ekb3x6:registerasync__action_100_registerasync_catch_100_7__catch",
          "from": "method:1ekb3x6:registerasync__action_98_registerasync_mapping_98_5__linear",
          "to": "method:1ekb3x6:registerasync__action_100_registerasync_catch_100_7__catch",
          "kind": "exception",
          "line": 100,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:1ekb3x6:registerasync__action_100_registerasync_catch_100_7__catch__method:1ekb3x6:registerasync__action_102_registerasync_return_102_8__return",
          "from": "method:1ekb3x6:registerasync__action_100_registerasync_catch_100_7__catch",
          "to": "method:1ekb3x6:registerasync__action_102_registerasync_return_102_8__return",
          "kind": "return",
          "line": 102,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1ekb3x6:registerasync__action_92_branch_92__merge",
        "method:1ekb3x6:registerasync__action_92_registerasync_branch_92_2__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 79,
        "end": 104
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 79,
          "summary": "Control-flow fragment extracted for method RegisterAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:pcq8ik:refreshtokenasync__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:pcq8ik:refreshtokenasync",
      "ownerSymbolName": "RefreshTokenAsync",
      "entryNodeId": "method:pcq8ik:refreshtokenasync__entry",
      "exitNodeIds": [
        "method:pcq8ik:refreshtokenasync__action_106_return_106__return"
      ],
      "nodes": [
        {
          "id": "method:pcq8ik:refreshtokenasync__entry",
          "kind": "entry",
          "label": "RefreshTokenAsync entry",
          "line": 106,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "Placeholder/no-op refresh token implementation returning success."
        },
        {
          "id": "method:pcq8ik:refreshtokenasync__action_106_return_106__return",
          "kind": "return",
          "label": "Return OK immediately",
          "line": 106,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "Task.FromResult(Result.Ok())"
        }
      ],
      "edges": [
        {
          "id": "method:pcq8ik:refreshtokenasync__entry__method:pcq8ik:refreshtokenasync__action_106_return_106__return",
          "from": "method:pcq8ik:refreshtokenasync__entry",
          "to": "method:pcq8ik:refreshtokenasync__action_106_return_106__return",
          "kind": "return",
          "line": 106,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.73,
      "lineSpan": {
        "start": 106,
        "end": 106
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 106,
          "summary": "Control-flow fragment extracted for method RefreshTokenAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:13af2s9:getprofileasync__fragment",
      "ownerFileId": "file:10axm6l:serveridentityservice-cs",
      "ownerSymbolId": "method:13af2s9:getprofileasync",
      "ownerSymbolName": "GetProfileAsync",
      "entryNodeId": "method:13af2s9:getprofileasync__entry",
      "exitNodeIds": [
        "method:13af2s9:getprofileasync__action_119_getprofileasync_return_119_5__return"
      ],
      "nodes": [
        {
          "id": "method:13af2s9:getprofileasync__entry",
          "kind": "entry",
          "label": "GetProfileAsync entry",
          "line": 108,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.99,
          "detail": "Reads the current authenticated user's ID from HttpContext and fetches their profile via a mediator query; returns profile or failure."
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition",
          "kind": "condition",
          "label": "user == null OR user.Identity?.IsAuthenticated != true",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "if (user == null || !user.Identity?.IsAuthenticated == true) return Result.Fail(\"Not authenticated.\")"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__true",
          "kind": "branch-true",
          "label": "not authenticated -> return fail",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "kind": "statement",
          "label": "merge",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition",
          "kind": "condition",
          "label": "user == null || !user.Identity?.IsAuthenticated == true) return Result.Fail(\"Not authenticated.\"",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9,
          "detail": "if (user == null || !user.Identity?.IsAuthenticated == true) return Result.Fail(\"Not authenticated.\");"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_113_getprofileasync_repository_read_113_1__linear",
          "kind": "db-read",
          "label": "Reads repository or persistence state",
          "line": 113,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86,
          "detail": "var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_113_extraction_113__linear",
          "kind": "statement",
          "label": "Extract user ID claim",
          "line": 113,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "user.FindFirstValue(ClaimTypes.NameIdentifier)"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition",
          "kind": "condition",
          "label": "userId == null) return Result.Fail(\"User ID not found.\"",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9,
          "detail": "if (userId == null) return Result.Fail(\"User ID not found.\");"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition",
          "kind": "condition",
          "label": "userId == null",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "if (userId == null) return Result.Fail(\"User ID not found.\")"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__true",
          "kind": "branch-true",
          "label": "missing id -> return fail",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "kind": "statement",
          "label": "merge",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_116_getprofileasync_await_116_3__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81,
          "detail": "var result = await _mediator.Send(new GetUserProfileQuery(userId));"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_116_external_call_116__linear",
          "kind": "http-call",
          "label": "Query for user profile via mediator",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "_mediator.Send(new GetUserProfileQuery(userId)) -> delegates to application layer handler"
        },
        {
          "id": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery",
          "kind": "call",
          "label": "GetUserProfileQuery",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.88,
          "detail": "new GetUserProfileQuery(userId) -> userId string"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition",
          "kind": "condition",
          "label": "result.IsFailed",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "if (result.IsFailed) return Result.Fail(result.Errors); else return Result.Ok(result.Value)"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__true",
          "kind": "branch-true",
          "label": "query failed -> return fail",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__false",
          "kind": "branch-false",
          "label": "successful -> return profile",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "kind": "statement",
          "label": "merge",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition",
          "kind": "condition",
          "label": "result.IsFailed) return Result.Fail(result.Errors",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9,
          "detail": "if (result.IsFailed) return Result.Fail(result.Errors);"
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "kind": "statement",
          "label": "merge",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_119_getprofileasync_return_119_5__return",
          "kind": "return",
          "label": "Returns result",
          "line": 119,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7,
          "detail": "return Result.Ok(result.Value);"
        }
      ],
      "edges": [
        {
          "id": "method:13af2s9:getprofileasync__entry__method:13af2s9:getprofileasync__action_110_guard_clause_110__condition",
          "from": "method:13af2s9:getprofileasync__entry",
          "to": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition__method:13af2s9:getprofileasync__action_110_guard_clause_110__true",
          "from": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition",
          "to": "method:13af2s9:getprofileasync__action_110_guard_clause_110__true",
          "kind": "condition-true",
          "label": "not authenticated -> return fail",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition__method:13af2s9:getprofileasync__action_110_guard_clause_110__false",
          "from": "method:13af2s9:getprofileasync__action_110_guard_clause_110__condition",
          "to": "method:13af2s9:getprofileasync__action_110_guard_clause_110__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__true__method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "from": "method:13af2s9:getprofileasync__action_110_guard_clause_110__true",
          "to": "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__false__method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "from": "method:13af2s9:getprofileasync__action_110_guard_clause_110__false",
          "to": "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "kind": "next",
          "line": 110,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge__method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition",
          "from": "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
          "to": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition__method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__true",
          "from": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition",
          "to": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition__method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__false",
          "from": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__condition",
          "to": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__true__method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "from": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__true",
          "to": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__false__method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "from": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__false",
          "to": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "kind": "next",
          "line": 111,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge__method:13af2s9:getprofileasync__action_113_getprofileasync_repository_read_113_1__linear",
          "from": "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
          "to": "method:13af2s9:getprofileasync__action_113_getprofileasync_repository_read_113_1__linear",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.86
        },
        {
          "id": "method:13af2s9:getprofileasync__action_113_getprofileasync_repository_read_113_1__linear__method:13af2s9:getprofileasync__action_113_extraction_113__linear",
          "from": "method:13af2s9:getprofileasync__action_113_getprofileasync_repository_read_113_1__linear",
          "to": "method:13af2s9:getprofileasync__action_113_extraction_113__linear",
          "kind": "next",
          "line": 113,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_113_extraction_113__linear__method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition",
          "from": "method:13af2s9:getprofileasync__action_113_extraction_113__linear",
          "to": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition__method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__true",
          "from": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition",
          "to": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition__method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__false",
          "from": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__condition",
          "to": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__true__method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "from": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__true",
          "to": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__false__method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "from": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__false",
          "to": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge__method:13af2s9:getprofileasync__action_114_guard_clause_114__condition",
          "from": "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
          "to": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition__method:13af2s9:getprofileasync__action_114_guard_clause_114__true",
          "from": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition",
          "to": "method:13af2s9:getprofileasync__action_114_guard_clause_114__true",
          "kind": "condition-true",
          "label": "missing id -> return fail",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition__method:13af2s9:getprofileasync__action_114_guard_clause_114__false",
          "from": "method:13af2s9:getprofileasync__action_114_guard_clause_114__condition",
          "to": "method:13af2s9:getprofileasync__action_114_guard_clause_114__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__true__method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "from": "method:13af2s9:getprofileasync__action_114_guard_clause_114__true",
          "to": "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__false__method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "from": "method:13af2s9:getprofileasync__action_114_guard_clause_114__false",
          "to": "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "kind": "next",
          "line": 114,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge__method:13af2s9:getprofileasync__action_116_getprofileasync_await_116_3__await",
          "from": "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
          "to": "method:13af2s9:getprofileasync__action_116_getprofileasync_await_116_3__await",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:13af2s9:getprofileasync__action_116_getprofileasync_await_116_3__await__method:13af2s9:getprofileasync__action_116_external_call_116__linear",
          "from": "method:13af2s9:getprofileasync__action_116_getprofileasync_await_116_3__await",
          "to": "method:13af2s9:getprofileasync__action_116_external_call_116__linear",
          "kind": "next",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_116_external_call_116__linear__call_method:13af2s9:getprofileasync__call_116_GetUserProfileQuery",
          "from": "method:13af2s9:getprofileasync__action_116_external_call_116__linear",
          "to": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery",
          "kind": "call",
          "label": "new GetUserProfileQuery(userId) -> userId string",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery__method:13af2s9:getprofileasync__action_117_guard_clause_117__condition",
          "from": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery",
          "to": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition__method:13af2s9:getprofileasync__action_117_guard_clause_117__true",
          "from": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition",
          "to": "method:13af2s9:getprofileasync__action_117_guard_clause_117__true",
          "kind": "condition-true",
          "label": "query failed -> return fail",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition__method:13af2s9:getprofileasync__action_117_guard_clause_117__false",
          "from": "method:13af2s9:getprofileasync__action_117_guard_clause_117__condition",
          "to": "method:13af2s9:getprofileasync__action_117_guard_clause_117__false",
          "kind": "condition-false",
          "label": "successful -> return profile",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__true__method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "from": "method:13af2s9:getprofileasync__action_117_guard_clause_117__true",
          "to": "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__false__method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "from": "method:13af2s9:getprofileasync__action_117_guard_clause_117__false",
          "to": "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge__method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition",
          "from": "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
          "to": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition__method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__true",
          "from": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition",
          "to": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition__method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__false",
          "from": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__condition",
          "to": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__true__method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "from": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__true",
          "to": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__false__method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "from": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__false",
          "to": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "kind": "next",
          "line": 117,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge__method:13af2s9:getprofileasync__action_119_getprofileasync_return_119_5__return",
          "from": "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge",
          "to": "method:13af2s9:getprofileasync__action_119_getprofileasync_return_119_5__return",
          "kind": "return",
          "line": 119,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery__jump_NexusReader_Application_Queries_User_GetUserProfileQuery",
          "fromNodeId": "method:13af2s9:getprofileasync__call_116_GetUserProfileQuery",
          "kind": "call-target",
          "targetPath": "NexusReader.Application.Queries.User",
          "targetHint": "GetUserProfileQuery",
          "line": 116,
          "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs",
          "reason": "Call target GetUserProfileQuery in NexusReader.Application.Queries.User could not be matched to an extracted method symbol.",
          "status": "unresolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:13af2s9:getprofileasync__action_110_guard_clause_110__merge",
        "method:13af2s9:getprofileasync__action_111_getprofileasync_guard_clause_111_0__merge",
        "method:13af2s9:getprofileasync__action_114_getprofileasync_guard_clause_114_2__merge",
        "method:13af2s9:getprofileasync__action_114_guard_clause_114__merge",
        "method:13af2s9:getprofileasync__action_117_guard_clause_117__merge",
        "method:13af2s9:getprofileasync__action_117_getprofileasync_guard_clause_117_4__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 108,
        "end": 120
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Web/Services/ServerIdentityService.cs",
          "line": 108,
          "summary": "Control-flow fragment extracted for method GetProfileAsync.",
          "kind": "file-summary"
        }
      ]
    }
  ],
  "seeds": [
    {
      "id": "1do64az",
      "nodeId": "file:163bafi:imports-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "_Imports",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:163bafi:imports-razor",
      "sourcePath": "NexusReader.Web/Components/_Imports.razor"
    },
    {
      "id": "1lp4geo",
      "nodeId": "file:1molfey:imports-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "_Imports",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1molfey:imports-razor",
      "sourcePath": "NexusReader.UI.Shared/_Imports.razor"
    },
    {
      "id": "wzkrun",
      "nodeId": "file:e9w1fz:imports-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "_Imports",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:e9w1fz:imports-razor",
      "sourcePath": "NexusReader.Maui/_Imports.razor"
    },
    {
      "id": "14kk0a6",
      "nodeId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260428184727_InitialPostgres",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
    },
    {
      "id": "5xgluh",
      "nodeId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260428184727_InitialPostgres.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs"
    },
    {
      "id": "w04v42",
      "nodeId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260428185239_IncreaseHashLength",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
    },
    {
      "id": "r3eur9",
      "nodeId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260428185239_IncreaseHashLength.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs"
    },
    {
      "id": "daaazy",
      "nodeId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260429080302_AddQuizResults",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
    },
    {
      "id": "1dtennz",
      "nodeId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260429080302_AddQuizResults.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
    },
    {
      "id": "x4anry",
      "nodeId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260503175906_FinalNormalizedSubscriptionArchitecture",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
    },
    {
      "id": "luwf3w",
      "nodeId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260503175906_FinalNormalizedSubscriptionArchitecture.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
    },
    {
      "id": "1orr2o2",
      "nodeId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
    },
    {
      "id": "c3ty3g",
      "nodeId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
    },
    {
      "id": "vjjnxp",
      "nodeId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510151022_NormalizeAuthor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
    },
    {
      "id": "c78jr1",
      "nodeId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510151022_NormalizeAuthor.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
    },
    {
      "id": "1bszth4",
      "nodeId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510161155_AddEbookProgressAndChapter",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"
    },
    {
      "id": "11dqk26",
      "nodeId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510161155_AddEbookProgressAndChapter.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
    },
    {
      "id": "1bff0yc",
      "nodeId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510171941_AddEbookLastChapterIndex",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
    },
    {
      "id": "rhjkl4",
      "nodeId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260510171941_AddEbookLastChapterIndex.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs"
    },
    {
      "id": "uw4q2u",
      "nodeId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513181743_AddEbookReadyFlag",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
    },
    {
      "id": "gtxtyy",
      "nodeId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513181743_AddEbookReadyFlag.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs"
    },
    {
      "id": "1o2un9w",
      "nodeId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513183726_FixKnowledgeUnitEbookId",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
    },
    {
      "id": "pk200r",
      "nodeId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513183726_FixKnowledgeUnitEbookId.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"
    },
    {
      "id": "gunycw",
      "nodeId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513185108_MakeKnowledgeUnitEbookIdNullable",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
    },
    {
      "id": "1gxvkfb",
      "nodeId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs"
    },
    {
      "id": "13bmrm2",
      "nodeId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260514184243_AddDescriptionToEbook",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
    },
    {
      "id": "16986h3",
      "nodeId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "20260514184243_AddDescriptionToEbook.Designer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs"
    },
    {
      "id": "bfyqyq",
      "nodeId": "method:8fzkrx:account-login-form-post-account-login-form",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Account Login Form (POST /account/login-form)",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:12rhzck:program-cs",
      "sourcePath": "NexusReader.Web/Program.cs"
    },
    {
      "id": "kfefz4",
      "nodeId": "method:ulf8of:addauthor",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AddAuthor()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1dbwiwx:program-cs",
      "sourcePath": "NexusReader.Web.Client/Program.cs"
    },
    {
      "id": "zctigl",
      "nodeId": "class:1ca124f:adddescriptiontoebook",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddDescriptionToEbook",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:145xyqd:20260514184243-adddescriptiontoebook-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
    },
    {
      "id": "1bpycly",
      "nodeId": "class:tfj298:adddescriptiontoebook",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddDescriptionToEbook",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1vkv6ym:20260514184243-adddescriptiontoebook-designer-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs"
    },
    {
      "id": "vxcsax",
      "nodeId": "method:v3kul8:addebook",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AddEbook()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1dbwiwx:program-cs",
      "sourcePath": "NexusReader.Web.Client/Program.cs"
    },
    {
      "id": "ek7aex",
      "nodeId": "method:vkortc:addebook",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AddEbook()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
    },
    {
      "id": "5kzey5",
      "nodeId": "class:1kl84eu:addebooklastchapterindex",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookLastChapterIndex",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:12mya84:20260510171941-addebooklastchapterindex-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
    },
    {
      "id": "1qg4cpi",
      "nodeId": "class:1ojuflh:addebooklastchapterindex",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookLastChapterIndex",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:la4sdl:20260510171941-addebooklastchapterindex-designer",
      "sourcePath": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs"
    },
    {
      "id": "aed0za",
      "nodeId": "class:1eh84ev:addebookprogressandchapter",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookProgressAndChapter",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:kwumax:20260510161155-addebookprogressandchapter-design",
      "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
    },
    {
      "id": "ctcoqr",
      "nodeId": "class:kshwxo:addebookprogressandchapter",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookProgressAndChapter",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1orks5g:20260510161155-addebookprogressandchapter-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"
    },
    {
      "id": "1x3ixrc",
      "nodeId": "class:1eb2dy:addebookreadyflag",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookReadyFlag",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1wy1v1s:20260513181743-addebookreadyflag-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
    },
    {
      "id": "1yemfqv",
      "nodeId": "class:4p0c5r:addebookreadyflag",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddEbookReadyFlag",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:jl4svh:20260513181743-addebookreadyflag-designer-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs"
    },
    {
      "id": "14z2jsv",
      "nodeId": "method:14hjndb:addmapsterconfiguration",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AddMapsterConfiguration()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs"
    },
    {
      "id": "q69hyz",
      "nodeId": "class:3a8sch:addquizresults",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddQuizResults",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q6hq0x:20260429080302-addquizresults-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
    },
    {
      "id": "7gi9xc",
      "nodeId": "class:9ftatg:addquizresults",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AddQuizResults",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1j2onoi:20260429080302-addquizresults-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
    },
    {
      "id": "14gcql2",
      "nodeId": "file:83c16m:aiassistantbubble-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AiAssistantBubble",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
    },
    {
      "id": "1tjt0gz",
      "nodeId": "class:1e23oyo:aisettings",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AiSettings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:11mkiaz:aisettings-cs",
      "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs"
    },
    {
      "id": "1i55fjk",
      "nodeId": "file:11mkiaz:aisettings-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AiSettings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:11mkiaz:aisettings-cs",
      "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs"
    },
    {
      "id": "1f8fd9i",
      "nodeId": "class:a8yza:app",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "App",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:62lucr:app-xaml-cs",
      "sourcePath": "NexusReader.Maui/App.xaml.cs"
    },
    {
      "id": "1fav1ne",
      "nodeId": "file:qvoxmq:app-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "App",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qvoxmq:app-razor",
      "sourcePath": "NexusReader.Web/Components/App.razor"
    },
    {
      "id": "twpb6x",
      "nodeId": "file:62lucr:app-xaml-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "App.xaml",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:62lucr:app-xaml-cs",
      "sourcePath": "NexusReader.Maui/App.xaml.cs"
    },
    {
      "id": "1q4zwb7",
      "nodeId": "class:wtyati:appdbcontext",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AppDbContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs"
    },
    {
      "id": "1gurhh8",
      "nodeId": "file:1pacvtg:appdbcontext-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AppDbContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1pacvtg:appdbcontext-cs",
      "sourcePath": "NexusReader.Data/Persistence/AppDbContext.cs"
    },
    {
      "id": "1dfyffd",
      "nodeId": "class:1g09xpu:appdbcontextfactory",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AppDbContextFactory",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs"
    },
    {
      "id": "f757iq",
      "nodeId": "file:1h2hpbe:appdbcontextfactory-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AppDbContextFactory",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1h2hpbe:appdbcontextfactory-cs",
      "sourcePath": "NexusReader.Data/Persistence/AppDbContextFactory.cs"
    },
    {
      "id": "18r6jbb",
      "nodeId": "class:1v2rkom:appdbcontextmodelsnapshot",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AppDbContextModelSnapshot",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs"
    },
    {
      "id": "1mjr9iq",
      "nodeId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AppDbContextModelSnapshot",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1yttr8x:appdbcontextmodelsnapshot-cs",
      "sourcePath": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs"
    },
    {
      "id": "18ygmqw",
      "nodeId": "class:potzj8:appjsoncontext",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AppJsonContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:wxheam:appjsoncontext-cs",
      "sourcePath": "NexusReader.Application/Common/AppJsonContext.cs"
    },
    {
      "id": "1s71c34",
      "nodeId": "file:wxheam:appjsoncontext-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AppJsonContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:wxheam:appjsoncontext-cs",
      "sourcePath": "NexusReader.Application/Common/AppJsonContext.cs"
    },
    {
      "id": "12y4ei8",
      "nodeId": "file:xxwh7p:asklibraryquestionquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AskLibraryQuestionQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
    },
    {
      "id": "q0q2ps",
      "nodeId": "class:1n4pq65:asklibraryquestionqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AskLibraryQuestionQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
    },
    {
      "id": "g3ns8f",
      "nodeId": "method:c84ulg:askquestionasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AskQuestionAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor"
    },
    {
      "id": "1l2plra",
      "nodeId": "method:io0xiq:askquestionasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AskQuestionAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "140a41r",
      "nodeId": "method:jffhoh:askquestionasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "AskQuestionAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "1dvkpaq",
      "nodeId": "class:jvil15:authenticationheaderhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AuthenticationHeaderHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
    },
    {
      "id": "1djut8w",
      "nodeId": "file:17v8pus:authenticationheaderhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AuthenticationHeaderHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
    },
    {
      "id": "ludoll",
      "nodeId": "class:1k4its0:authlayout",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AuthLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:18yxzxe:authlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/AuthLayout.razor"
    },
    {
      "id": "13lurtp",
      "nodeId": "file:18yxzxe:authlayout-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AuthLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:18yxzxe:authlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/AuthLayout.razor"
    },
    {
      "id": "j79euh",
      "nodeId": "class:1nsniny:author",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Author",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1y56eud:author-cs",
      "sourcePath": "NexusReader.Domain/Entities/Author.cs"
    },
    {
      "id": "ptlxqz",
      "nodeId": "file:1y56eud:author-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Author",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1y56eud:author-cs",
      "sourcePath": "NexusReader.Domain/Entities/Author.cs"
    },
    {
      "id": "bynqc2",
      "nodeId": "class:z1d2u7:authordto",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "AuthorDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:e05hy9:authordto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/AuthorDto.cs"
    },
    {
      "id": "2ocfju",
      "nodeId": "file:e05hy9:authordto-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "AuthorDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:e05hy9:authordto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/AuthorDto.cs"
    },
    {
      "id": "1ahsz4j",
      "nodeId": "class:11gdjq4:billingservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "BillingService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:13phiik:billingservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs"
    },
    {
      "id": "c0ir6n",
      "nodeId": "file:13phiik:billingservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "BillingService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:13phiik:billingservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs"
    },
    {
      "id": "1xeajea",
      "nodeId": "class:twnl84:bookingestionmodal",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "BookIngestionModal",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
    },
    {
      "id": "17bhnqd",
      "nodeId": "file:8kve74:bookingestionmodal-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "BookIngestionModal",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
    },
    {
      "id": "15g24ss",
      "nodeId": "class:gamvik:bookstorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "BookStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs"
    },
    {
      "id": "1rm28y5",
      "nodeId": "file:14qnurl:bookstorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "BookStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:14qnurl:bookstorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs"
    },
    {
      "id": "jaicuk",
      "nodeId": "method:1s8oq59:broadcastingestionprogressasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "BroadcastIngestionProgressAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
    },
    {
      "id": "1ifs8bx",
      "nodeId": "method:115yp5z:broadcastprogressasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "BroadcastProgressAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
    },
    {
      "id": "1ln1nyn",
      "nodeId": "method:1wohrks:buildtargetmodel",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "BuildTargetModel()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs"
    },
    {
      "id": "13x2708",
      "nodeId": "method:tz9mq3:buildtargetmodel",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "BuildTargetModel()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
    },
    {
      "id": "mx5a89",
      "nodeId": "method:3dd3av:callknowledgeapiasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "CallKnowledgeApiAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "1h3hi6g",
      "nodeId": "class:1133tob:class1",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Class1",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:43kjze:class1-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Class1.cs"
    },
    {
      "id": "1do1ov1",
      "nodeId": "file:43kjze:class1-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Class1",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:43kjze:class1-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Class1.cs"
    },
    {
      "id": "1rknk90",
      "nodeId": "method:1uy10ke:clear",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Clear()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "1wfpgwu",
      "nodeId": "method:10r1sy2:clearcacheasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ClearCacheAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "9gsat4",
      "nodeId": "method:1wz04qu:clearcacheasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ClearCacheAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "yhufwc",
      "nodeId": "method:1pecu6b:closeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "CloseAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
    },
    {
      "id": "1r2c0ch",
      "nodeId": "method:pslukv:computehash",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ComputeHash()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
    },
    {
      "id": "khpkbk",
      "nodeId": "class:lvxelt:contenthasher",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ContentHasher",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
    },
    {
      "id": "ngcd11",
      "nodeId": "file:13kvr59:contenthasher-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ContentHasher",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:13kvr59:contenthasher-cs",
      "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
    },
    {
      "id": "2839du",
      "nodeId": "class:1tn889i:currentreadingwidget",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "CurrentReadingWidget",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
    },
    {
      "id": "1s18euh",
      "nodeId": "file:1uvdam9:currentreadingwidget-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "CurrentReadingWidget",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
    },
    {
      "id": "4ld9bp",
      "nodeId": "class:140cn9s:dashboard",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Dashboard",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor"
    },
    {
      "id": "a923py",
      "nodeId": "file:1b5rrku:dashboard-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Dashboard",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor"
    },
    {
      "id": "u4o50o",
      "nodeId": "class:1t4ptj6:dbinitializer",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "DbInitializer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs"
    },
    {
      "id": "ols3ai",
      "nodeId": "file:136c3oe:dbinitializer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "DbInitializer",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs"
    },
    {
      "id": "1dy2y82",
      "nodeId": "class:5jkcay:dependencyinjection",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "DependencyInjection",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:qieb5i:dependencyinjection-cs",
      "sourcePath": "NexusReader.Application/DependencyInjection.cs"
    },
    {
      "id": "1eoqcgm",
      "nodeId": "class:k4fx0v:dependencyinjection",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "DependencyInjection",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs"
    },
    {
      "id": "12iyevj",
      "nodeId": "file:qieb5i:dependencyinjection-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "DependencyInjection",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qieb5i:dependencyinjection-cs",
      "sourcePath": "NexusReader.Application/DependencyInjection.cs"
    },
    {
      "id": "1qttgor",
      "nodeId": "file:r7svsj:dependencyinjection-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "DependencyInjection",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:r7svsj:dependencyinjection-cs",
      "sourcePath": "NexusReader.Infrastructure/DependencyInjection.cs"
    },
    {
      "id": "osfbvz",
      "nodeId": "method:pkbr0t:down",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Down()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
    },
    {
      "id": "1f5cxuk",
      "nodeId": "class:1k2zgaa:ebook",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Ebook",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "sourcePath": "NexusReader.Domain/Entities/Ebook.cs"
    },
    {
      "id": "1nll2dm",
      "nodeId": "file:lcvwj6:ebook-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Ebook",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:lcvwj6:ebook-cs",
      "sourcePath": "NexusReader.Domain/Entities/Ebook.cs"
    },
    {
      "id": "1xyrbbp",
      "nodeId": "class:frxocr:ebookrepository",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "EbookRepository",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
    },
    {
      "id": "u24jv8",
      "nodeId": "file:veuxa3:ebookrepository-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "EbookRepository",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
    },
    {
      "id": "jwygmw",
      "nodeId": "class:1oxys0a:epubmetadataextractor",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "EpubMetadataExtractor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
    },
    {
      "id": "vauukq",
      "nodeId": "file:d3gg9l:epubmetadataextractor-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "EpubMetadataExtractor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:d3gg9l:epubmetadataextractor-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
    },
    {
      "id": "gl53e3",
      "nodeId": "class:1ynrixc:epubreaderservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "EpubReaderService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
    },
    {
      "id": "in74ay",
      "nodeId": "file:q4k94a:epubreaderservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "EpubReaderService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
    },
    {
      "id": "gy4r5f",
      "nodeId": "class:1jtdq7s:error",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Error",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:p5ean4:error-razor",
      "sourcePath": "NexusReader.Web/Components/Pages/Error.razor"
    },
    {
      "id": "fr0cmt",
      "nodeId": "class:1v3riqz:error",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Error",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1awldsb:error-razor",
      "sourcePath": "NexusReader.Web/Components/Error.razor"
    },
    {
      "id": "1yxwk5q",
      "nodeId": "file:1awldsb:error-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Error",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1awldsb:error-razor",
      "sourcePath": "NexusReader.Web/Components/Error.razor"
    },
    {
      "id": "g52c7",
      "nodeId": "file:p5ean4:error-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Error",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:p5ean4:error-razor",
      "sourcePath": "NexusReader.Web/Components/Pages/Error.razor"
    },
    {
      "id": "qpdkjn",
      "nodeId": "method:1egheyd:executeairequestandcacheasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ExecuteAiRequestAndCacheAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "l9j415",
      "nodeId": "method:1do3jf2:extractmetadataasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ExtractMetadataAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs"
    },
    {
      "id": "7gym5z",
      "nodeId": "method:9ujebp:fetchandstreamasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "FetchAndStreamAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:83c16m:aiassistantbubble-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
    },
    {
      "id": "1dh1efz",
      "nodeId": "class:tkzvf7:finalnormalizedsubscriptionarchitecture",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "FinalNormalizedSubscriptionArchitecture",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:18pke7q:20260503175906-finalnormalizedsubscriptionarchit",
      "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
    },
    {
      "id": "jla2bj",
      "nodeId": "class:zj074q:finalnormalizedsubscriptionarchitecture",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "FinalNormalizedSubscriptionArchitecture",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1xzhi6b:20260503175906-finalnormalizedsubscriptionarchit",
      "sourcePath": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
    },
    {
      "id": "pmzt19",
      "nodeId": "method:101vezb:findauthorbynameasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "FindAuthorByNameAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:veuxa3:ebookrepository-cs",
      "sourcePath": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
    },
    {
      "id": "1c2xt36",
      "nodeId": "method:3jcuy:findauthorbynameasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "FindAuthorByNameAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
    },
    {
      "id": "1ultmod",
      "nodeId": "method:s3i4fd:findauthorbynameasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "FindAuthorByNameAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1dbwiwx:program-cs",
      "sourcePath": "NexusReader.Web.Client/Program.cs"
    },
    {
      "id": "sj5hv1",
      "nodeId": "method:12jssth:findtitleinnavigation",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "FindTitleInNavigation()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
    },
    {
      "id": "8x12u8",
      "nodeId": "class:181ukvc:fixknowledgeunitebookid",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "FixKnowledgeUnitEbookId",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:sl1mo0:20260513183726-fixknowledgeunitebookid-designer-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"
    },
    {
      "id": "an9j2o",
      "nodeId": "class:1jh8uof:fixknowledgeunitebookid",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "FixKnowledgeUnitEbookId",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1r47ykv:20260513183726-fixknowledgeunitebookid-cs",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
    },
    {
      "id": "nu4wjd",
      "nodeId": "class:oyj9xs:focusmodeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "FocusModeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs"
    },
    {
      "id": "1tfbb9i",
      "nodeId": "file:1953stk:focusmodeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "FocusModeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1953stk:focusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/FocusModeService.cs"
    },
    {
      "id": "jpavtt",
      "nodeId": "method:1bkauax:generatefullquiz",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GenerateFullQuiz()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
    },
    {
      "id": "1snf41n",
      "nodeId": "method:13yeu7e:getauthenticationstateasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetAuthenticationStateAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
    },
    {
      "id": "1w9rgrp",
      "nodeId": "method:en9pi8:getboolasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetBoolAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    },
    {
      "id": "rdsgna",
      "nodeId": "method:nguekt:getboolasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetBoolAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "xir2a6",
      "nodeId": "method:rzym3m:getboolasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetBoolAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "13lhriw",
      "nodeId": "method:1luv0m2:getepubcontent-get-api-epub-ebookid-index",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetEpubContent (GET /api/epub/{ebookId}/{index})",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:12rhzck:program-cs",
      "sourcePath": "NexusReader.Web/Program.cs"
    },
    {
      "id": "hioef7",
      "nodeId": "method:10bpn0:getepubcontentasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetEpubContentAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs"
    },
    {
      "id": "v5b7iw",
      "nodeId": "method:bamm0e:getepubcontentasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetEpubContentAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:q4k94a:epubreaderservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
    },
    {
      "id": "1sbck77",
      "nodeId": "method:1fgpnj9:getgraphdataasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetGraphDataAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "1ghrblo",
      "nodeId": "class:904yf3:getinitializationstatusquery",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetInitializationStatusQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"
    },
    {
      "id": "l3awo1",
      "nodeId": "file:1m26se1:getinitializationstatusquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetInitializationStatusQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1m26se1:getinitializationstatusquery-cs",
      "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"
    },
    {
      "id": "1r7i2cd",
      "nodeId": "class:19ihp67:getinitializationstatusqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetInitializationStatusQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"
    },
    {
      "id": "1ygblbe",
      "nodeId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetInitializationStatusQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1fn3yz7:getinitializationstatusqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"
    },
    {
      "id": "1w48ibp",
      "nodeId": "class:1qgqpgy:getknowledgegraphquery",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetKnowledgeGraphQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"
    },
    {
      "id": "onxcj",
      "nodeId": "file:10kr3oo:getknowledgegraphquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetKnowledgeGraphQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:10kr3oo:getknowledgegraphquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"
    },
    {
      "id": "884aqo",
      "nodeId": "class:p0no6:getknowledgegraphqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetKnowledgeGraphQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs"
    },
    {
      "id": "1hoji9k",
      "nodeId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetKnowledgeGraphQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs"
    },
    {
      "id": "uj2m3l",
      "nodeId": "method:965937:getknowledgeinternalasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetKnowledgeInternalAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "of2e8g",
      "nodeId": "file:16axv5i:getmyebooksquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetMyEbooksQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs"
    },
    {
      "id": "iqevkv",
      "nodeId": "class:1far2m1:getmyebooksqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetMyEbooksQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs"
    },
    {
      "id": "12gqa45",
      "nodeId": "method:13af2s9:getprofileasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetProfileAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs"
    },
    {
      "id": "iy85ju",
      "nodeId": "method:nyrl9z:getprofileinternalasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetProfileInternalAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs"
    },
    {
      "id": "1a02dlm",
      "nodeId": "class:z6s0dl:getreaderpagequery",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetReaderPageQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:9lh011:getreaderpagequery-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"
    },
    {
      "id": "1pf4kkl",
      "nodeId": "file:9lh011:getreaderpagequery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetReaderPageQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:9lh011:getreaderpagequery-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"
    },
    {
      "id": "10zlab0",
      "nodeId": "class:1lgm7qp:getreaderpagequeryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetReaderPageQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"
    },
    {
      "id": "1m9s9vn",
      "nodeId": "file:y077jr:getreaderpagequeryhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetReaderPageQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"
    },
    {
      "id": "fsxswc",
      "nodeId": "method:1ca58m3:getrelevantcontextasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetRelevantContextAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "6aoi6u",
      "nodeId": "method:1sxv1a4:getrelevantcontextasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetRelevantContextAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "w0e2zn",
      "nodeId": "method:191bta3:getsecurestring",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetSecureString()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs"
    },
    {
      "id": "8ag27",
      "nodeId": "method:1bfedhw:getsecurestring",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetSecureString()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "1rxcwnt",
      "nodeId": "method:1olwlbd:getsecurestring",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetSecureString()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "1n7qlc3",
      "nodeId": "method:1rgphlw:getstringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    },
    {
      "id": "1cvq70f",
      "nodeId": "method:6i8lek:getstringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "u0b91s",
      "nodeId": "method:wsqlg8:getstringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GetStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "1sfpoi3",
      "nodeId": "class:1opd2vh:getuserprofilequery",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetUserProfileQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:vjfxh7:getuserprofilequery-cs",
      "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs"
    },
    {
      "id": "u34hab",
      "nodeId": "file:vjfxh7:getuserprofilequery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetUserProfileQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:vjfxh7:getuserprofilequery-cs",
      "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs"
    },
    {
      "id": "1uvk1ey",
      "nodeId": "class:158ohhh:getuserprofilequeryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GetUserProfileQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs"
    },
    {
      "id": "1xkunqu",
      "nodeId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GetUserProfileQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs"
    },
    {
      "id": "19z47ot",
      "nodeId": "class:cps3pc:globalintelligencepanel",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GlobalIntelligencePanel",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
    },
    {
      "id": "i3qg5p",
      "nodeId": "file:1niza9w:globalintelligencepanel-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GlobalIntelligencePanel",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
    },
    {
      "id": "1nlciyc",
      "nodeId": "method:1dvbk1u:gotonextchapter",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GoToNextChapter()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
    },
    {
      "id": "12yxw5u",
      "nodeId": "method:12odud7:gotopreviouschapter",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "GoToPreviousChapter()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
    },
    {
      "id": "cgjp52",
      "nodeId": "file:1c4q2p1:graphviewmodels-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GraphViewModels",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1c4q2p1:graphviewmodels-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GraphViewModels.cs"
    },
    {
      "id": "14bu1ut",
      "nodeId": "class:3ugxc0:groundednessbadge",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "GroundednessBadge",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
    },
    {
      "id": "1ushqby",
      "nodeId": "file:108l4jq:groundednessbadge-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GroundednessBadge",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
    },
    {
      "id": "7v5xkn",
      "nodeId": "file:1bdy8y4:groundedresponsedto-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "GroundedResponseDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1bdy8y4:groundedresponsedto-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"
    },
    {
      "id": "l1vk90",
      "nodeId": "method:16gxcfa:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:4pj82p:getuserprofilequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs"
    },
    {
      "id": "14omihb",
      "nodeId": "method:17jlxw0:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:xxwh7p:asklibraryquestionquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
    },
    {
      "id": "ykh8g5",
      "nodeId": "method:1al0hre:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:y077jr:getreaderpagequeryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"
    },
    {
      "id": "4uf3hc",
      "nodeId": "method:1bus1hn:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
    },
    {
      "id": "1mibz2h",
      "nodeId": "method:1epuq0y:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:16axv5i:getmyebooksquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs"
    },
    {
      "id": "y4kpgt",
      "nodeId": "method:1fl6nt2:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
    },
    {
      "id": "ac8j0",
      "nodeId": "method:1jqlijy:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
    },
    {
      "id": "m7e88a",
      "nodeId": "method:e8akyb:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"
    },
    {
      "id": "8y7zso",
      "nodeId": "method:gy7qh:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs"
    },
    {
      "id": "1tehj1y",
      "nodeId": "method:tgg1x1:handle",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Handle()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:16f33jo:getknowledgegraphqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs"
    },
    {
      "id": "1jo4vv5",
      "nodeId": "method:1dyzngl:handleclearcache",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleClearCache()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
    },
    {
      "id": "2r1gud",
      "nodeId": "method:yy00ql:handlecontinuereading",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleContinueReading()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
    },
    {
      "id": "2tj945",
      "nodeId": "method:1ptxaoh:handlefileselected",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleFileSelected()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
    },
    {
      "id": "xtalfh",
      "nodeId": "method:j1tqds:handlekeypress",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleKeyPress()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
    },
    {
      "id": "itvrsr",
      "nodeId": "method:uwsk5z:handlelogin",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleLogin()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:csf9l7:login-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor"
    },
    {
      "id": "nrtue",
      "nodeId": "method:1jxczws:handlelogout",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleLogout()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:11crtur:profile-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
    },
    {
      "id": "1uyl2mv",
      "nodeId": "method:64smty:handlelogout",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleLogout()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
    },
    {
      "id": "10xruwj",
      "nodeId": "method:68za1u:handlelogout",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleLogout()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
    },
    {
      "id": "1x3blx",
      "nodeId": "method:t1zuul:handlenodeselected",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleNodeSelected()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
    },
    {
      "id": "1hdilb2",
      "nodeId": "method:mj67eu:handleregister",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleRegister()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1hn70tz:register-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor"
    },
    {
      "id": "1j27qi2",
      "nodeId": "method:13vwa6r:handlerequirementasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleRequirementAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs"
    },
    {
      "id": "1fh89t1",
      "nodeId": "method:14jdxkg:handlerequirementasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleRequirementAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs"
    },
    {
      "id": "1gqt3o8",
      "nodeId": "method:h9z30t:handlesearch",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleSearch()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1niza9w:globalintelligencepanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
    },
    {
      "id": "1spvryh",
      "nodeId": "method:174nry:handlesubscriptiondeletedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleSubscriptionDeletedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:13phiik:billingservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs"
    },
    {
      "id": "1nbc2ry",
      "nodeId": "method:1ctlycb:handlesubscriptionupdatedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "HandleSubscriptionUpdatedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:13phiik:billingservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs"
    },
    {
      "id": "1vpsx05",
      "nodeId": "class:jfh85m:home",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Home",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:h6mj95:home-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor"
    },
    {
      "id": "c7kw9l",
      "nodeId": "file:h6mj95:home-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Home",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:h6mj95:home-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor"
    },
    {
      "id": "1dw62lw",
      "nodeId": "class:qlxnhj:ibillingservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IBillingService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs"
    },
    {
      "id": "1l92oaf",
      "nodeId": "file:rfn6bc:ibillingservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IBillingService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:rfn6bc:ibillingservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IBillingService.cs"
    },
    {
      "id": "w2xtnr",
      "nodeId": "class:lhjxtl:ibookstorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IBookStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
    },
    {
      "id": "612iej",
      "nodeId": "file:9fivst:ibookstorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IBookStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:9fivst:ibookstorageservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
    },
    {
      "id": "1m82nrx",
      "nodeId": "file:gg5jm5:icommand-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ICommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:gg5jm5:icommand-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/ICommand.cs"
    },
    {
      "id": "gyph3p",
      "nodeId": "file:kgb933:icommandhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ICommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:kgb933:icommandhandler-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"
    },
    {
      "id": "1igh14y",
      "nodeId": "class:vgua1e:identityservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IdentityService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs"
    },
    {
      "id": "1w1matd",
      "nodeId": "file:b8uv8h:identityservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IdentityService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs"
    },
    {
      "id": "8uxo8w",
      "nodeId": "class:ir9z2o:iebookrepository",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IEbookRepository",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
    },
    {
      "id": "1ee5oyd",
      "nodeId": "file:1hlb3r7:iebookrepository-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IEbookRepository",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1hlb3r7:iebookrepository-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
    },
    {
      "id": "2sr5uf",
      "nodeId": "class:18sfucp:iepubmetadataextractor",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IEpubMetadataExtractor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs"
    },
    {
      "id": "17ua0nv",
      "nodeId": "file:vdwqp9:iepubmetadataextractor-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IEpubMetadataExtractor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:vdwqp9:iepubmetadataextractor-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs"
    },
    {
      "id": "1otnhhw",
      "nodeId": "class:euc6fx:iepubreader",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IEpubReader",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1mo9e25:iepubreader-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs"
    },
    {
      "id": "1kibopu",
      "nodeId": "file:1mo9e25:iepubreader-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IEpubReader",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1mo9e25:iepubreader-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IEpubReader.cs"
    },
    {
      "id": "xssg5b",
      "nodeId": "class:18bavme:ifocusmodeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IFocusModeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
    },
    {
      "id": "diuk2v",
      "nodeId": "file:xs3ks1:ifocusmodeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IFocusModeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
    },
    {
      "id": "4gv677",
      "nodeId": "file:1ud0jop:iidentityservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IIdentityService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1ud0jop:iidentityservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
    },
    {
      "id": "1ubr0l6",
      "nodeId": "class:1y1hevk:iknowledgegraphservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IKnowledgeGraphService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "6a0q67",
      "nodeId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IKnowledgeGraphService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "x81i8i",
      "nodeId": "class:utixgx:iknowledgeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IKnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
    },
    {
      "id": "9tt0j5",
      "nodeId": "file:pvs6tn:iknowledgeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IKnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:pvs6tn:iknowledgeservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
    },
    {
      "id": "127zdac",
      "nodeId": "class:1owrs1t:inativestorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "INativeStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
    },
    {
      "id": "1enyd7r",
      "nodeId": "file:1it42kj:inativestorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "INativeStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1it42kj:inativestorageservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
    },
    {
      "id": "1b491y",
      "nodeId": "class:14xe27n:increasehashlength",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IncreaseHashLength",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
    },
    {
      "id": "1bav8bc",
      "nodeId": "class:mi743e:increasehashlength",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IncreaseHashLength",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:qoj05g:20260428185239-increasehashlength-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs"
    },
    {
      "id": "1l8eu72",
      "nodeId": "class:byhisx:ingestebookcommand",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IngestEbookCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs"
    },
    {
      "id": "1bzvlmy",
      "nodeId": "file:1tk8lz4:ingestebookcommand-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IngestEbookCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1tk8lz4:ingestebookcommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs"
    },
    {
      "id": "6jncll",
      "nodeId": "class:1kfw737:ingestebookcommandhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IngestEbookCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs"
    },
    {
      "id": "7ujj71",
      "nodeId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IngestEbookCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:lqr4h8:ingestebookcommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs"
    },
    {
      "id": "1mfnqyv",
      "nodeId": "file:1qcpa0s:ingestebookrequest-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IngestEbookRequest",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1qcpa0s:ingestebookrequest-cs",
      "sourcePath": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs"
    },
    {
      "id": "mqcjv1",
      "nodeId": "method:fpl7t6:initializeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "InitializeAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
    },
    {
      "id": "1ah5sjs",
      "nodeId": "method:1l7jj8x:initializeobserverasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "InitializeObserverAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "uvrp3m",
      "nodeId": "method:w4053o:initializeselectionlistenerasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "InitializeSelectionListenerAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "1g3dy2a",
      "nodeId": "class:1a6v1w9:initialpostgres",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "InitialPostgres",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:yngxn0:20260428184727-initialpostgres-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs"
    },
    {
      "id": "1axaqt4",
      "nodeId": "class:1xhm2de:initialpostgres",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "InitialPostgres",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:a32vvn:20260428184727-initialpostgres-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
    },
    {
      "id": "2azemo",
      "nodeId": "file:1kjntt:intelligence-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Intelligence",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor"
    },
    {
      "id": "1cdf07t",
      "nodeId": "class:nsawvo:intelligencetoolbar",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IntelligenceToolbar",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
    },
    {
      "id": "o6wej3",
      "nodeId": "file:q33ld0:intelligencetoolbar-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IntelligenceToolbar",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q33ld0:intelligencetoolbar-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
    },
    {
      "id": "12d2cjd",
      "nodeId": "class:1gyz12d:iplatformservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
    },
    {
      "id": "zq8xdg",
      "nodeId": "file:wb18l0:iplatformservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:wb18l0:iplatformservice-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
    },
    {
      "id": "1i9m5va",
      "nodeId": "file:1k4g04u:iquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1k4g04u:iquery-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQuery.cs"
    },
    {
      "id": "1xs372u",
      "nodeId": "class:4nrp60:iquery-tresponse",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IQuery<TResponse>",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1k4g04u:iquery-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQuery.cs"
    },
    {
      "id": "1m5q13b",
      "nodeId": "class:daunpv:iqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:ayj9r2:iqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"
    },
    {
      "id": "1x0i5gv",
      "nodeId": "file:ayj9r2:iqueryhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:ayj9r2:iqueryhandler-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"
    },
    {
      "id": "1xzk2wd",
      "nodeId": "class:36xxdc:iquizstateservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IQuizStateService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
    },
    {
      "id": "j2rmv0",
      "nodeId": "file:savadk:iquizstateservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IQuizStateService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:savadk:iquizstateservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
    },
    {
      "id": "1lx91ki",
      "nodeId": "class:w9vxji:ireaderinteractionservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IReaderInteractionService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
    },
    {
      "id": "ydbcxo",
      "nodeId": "file:1szg1zb:ireaderinteractionservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IReaderInteractionService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
    },
    {
      "id": "t02gf",
      "nodeId": "class:9gxpik:ireadernavigationservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IReaderNavigationService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
    },
    {
      "id": "cpjj5s",
      "nodeId": "file:wgkae9:ireadernavigationservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IReaderNavigationService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
    },
    {
      "id": "x6fr6q",
      "nodeId": "class:1kfpdx9:isyncbroadcaster",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ISyncBroadcaster",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs"
    },
    {
      "id": "qr9iy7",
      "nodeId": "file:441s21:isyncbroadcaster-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ISyncBroadcaster",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:441s21:isyncbroadcaster-cs",
      "sourcePath": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs"
    },
    {
      "id": "eg0csq",
      "nodeId": "class:1xcfdo4:isyncservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ISyncService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs"
    },
    {
      "id": "1a2jqc3",
      "nodeId": "file:l3weg3:isyncservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ISyncService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:l3weg3:isyncservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ISyncService.cs"
    },
    {
      "id": "1bhk1q0",
      "nodeId": "class:1a23wve:ithemeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "IThemeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs"
    },
    {
      "id": "1y5ch",
      "nodeId": "file:vbuljf:ithemeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "IThemeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:vbuljf:ithemeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IThemeService.cs"
    },
    {
      "id": "1vzitqq",
      "nodeId": "class:ogoid1:jsonrepairhelper",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "JsonRepairHelper",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
    },
    {
      "id": "bvz7w3",
      "nodeId": "file:1dyqnkg:jsonrepairhelper-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "JsonRepairHelper",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1dyqnkg:jsonrepairhelper-cs",
      "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
    },
    {
      "id": "w2i14j",
      "nodeId": "file:yno7se:knowledgecheck-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeCheck",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
    },
    {
      "id": "w5x6co",
      "nodeId": "class:1cca8vk:knowledgecoordinator",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeCoordinator",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
    },
    {
      "id": "1blu1nk",
      "nodeId": "file:uvydt4:knowledgecoordinator-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeCoordinator",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
    },
    {
      "id": "1awd9ms",
      "nodeId": "class:11lr4zo:knowledgegraph",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeGraph",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
    },
    {
      "id": "p9tzbe",
      "nodeId": "file:jo64ly:knowledgegraph-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeGraph",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:jo64ly:knowledgegraph-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
    },
    {
      "id": "dsglbe",
      "nodeId": "class:zdhkb2:knowledgegraphservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeGraphService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
    },
    {
      "id": "1teq433",
      "nodeId": "file:q6pxzf:knowledgegraphservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeGraphService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q6pxzf:knowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
    },
    {
      "id": "arj5zw",
      "nodeId": "class:1h9lza8:knowledgepacket",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgePacket",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
    },
    {
      "id": "1kz6od6",
      "nodeId": "file:hjtala:knowledgepacket-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgePacket",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:hjtala:knowledgepacket-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
    },
    {
      "id": "1veru67",
      "nodeId": "class:1ybxixo:knowledgeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "1jh6tfb",
      "nodeId": "file:27eki7:knowledgeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "7qv0pq",
      "nodeId": "class:fvtez6:knowledgeunit",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeUnit",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "sourcePath": "NexusReader.Domain/Entities/KnowledgeUnit.cs"
    },
    {
      "id": "ihtmpo",
      "nodeId": "file:h6a0xu:knowledgeunit-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeUnit",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:h6a0xu:knowledgeunit-cs",
      "sourcePath": "NexusReader.Domain/Entities/KnowledgeUnit.cs"
    },
    {
      "id": "13smnny",
      "nodeId": "class:mqaz6:knowledgeunitlink",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "KnowledgeUnitLink",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "sourcePath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs"
    },
    {
      "id": "uba8en",
      "nodeId": "file:1m6x5qy:knowledgeunitlink-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeUnitLink",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1m6x5qy:knowledgeunitlink-cs",
      "sourcePath": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs"
    },
    {
      "id": "1oujghb",
      "nodeId": "file:17um7nh:knowledgeunittype-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "KnowledgeUnitType",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:17um7nh:knowledgeunittype-cs",
      "sourcePath": "NexusReader.Domain/Enums/KnowledgeUnitType.cs"
    },
    {
      "id": "190x9bx",
      "nodeId": "file:vxd4dk:launchsettings-json",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "launchSettings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:vxd4dk:launchsettings-json",
      "sourcePath": "NexusReader.Web/Properties/launchSettings.json"
    },
    {
      "id": "55b4yw",
      "nodeId": "class:g9nkgg:library",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Library",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1uhcs2l:library-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor"
    },
    {
      "id": "8kk11w",
      "nodeId": "file:1uhcs2l:library-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Library",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1uhcs2l:library-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor"
    },
    {
      "id": "hzo8ba",
      "nodeId": "method:676x78:loadbooksasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "LoadBooksAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1uhcs2l:library-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Library.razor"
    },
    {
      "id": "1f2l8to",
      "nodeId": "method:ero6bp:loadchapterasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "LoadChapterAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "1v4mbh3",
      "nodeId": "class:1vvya1l:localepubmetadata",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "LocalEpubMetadata",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:485hwz:localepubmetadata-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"
    },
    {
      "id": "5lzj1g",
      "nodeId": "file:485hwz:localepubmetadata-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "LocalEpubMetadata",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:485hwz:localepubmetadata-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"
    },
    {
      "id": "j66idv",
      "nodeId": "class:1qurvhs:login",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Login",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:csf9l7:login-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor"
    },
    {
      "id": "wgrs5q",
      "nodeId": "file:csf9l7:login-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Login",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:csf9l7:login-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Login.razor"
    },
    {
      "id": "1n8g240",
      "nodeId": "method:1pi9wuc:loginasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "LoginAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs"
    },
    {
      "id": "1i9qsxs",
      "nodeId": "file:jg997z:main-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Main",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:jg997z:main-razor",
      "sourcePath": "NexusReader.Maui/Main.razor"
    },
    {
      "id": "q3a2nk",
      "nodeId": "class:1ay0je3:mainactivity",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MainActivity",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1246987:mainactivity-cs",
      "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs"
    },
    {
      "id": "16e2jm5",
      "nodeId": "file:1246987:mainactivity-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MainActivity",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1246987:mainactivity-cs",
      "sourcePath": "NexusReader.Maui/Platforms/Android/MainActivity.cs"
    },
    {
      "id": "1fvtyxk",
      "nodeId": "class:471u2p:mainapplication",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MainApplication",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
    },
    {
      "id": "1c7ljtb",
      "nodeId": "file:p180ke:mainapplication-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MainApplication",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:p180ke:mainapplication-cs",
      "sourcePath": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
    },
    {
      "id": "10odf7v",
      "nodeId": "class:vf4020:mainhublayout",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MainHubLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
    },
    {
      "id": "q1zm14",
      "nodeId": "file:1ain1yo:mainhublayout-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MainHubLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
    },
    {
      "id": "l86w3v",
      "nodeId": "class:8viv8y:mainpage",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MainPage",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:ua9rra:mainpage-xaml-cs",
      "sourcePath": "NexusReader.Maui/MainPage.xaml.cs"
    },
    {
      "id": "14qkdrp",
      "nodeId": "file:ua9rra:mainpage-xaml-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MainPage.xaml",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:ua9rra:mainpage-xaml-cs",
      "sourcePath": "NexusReader.Maui/MainPage.xaml.cs"
    },
    {
      "id": "p86ilc",
      "nodeId": "class:1gb1hzf:makeknowledgeunitebookidnullable",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MakeKnowledgeUnitEbookIdNullable",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:u0dg0d:20260513185108-makeknowledgeunitebookidnullable-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
    },
    {
      "id": "19ickb0",
      "nodeId": "class:1gem37m:makeknowledgeunitebookidnullable",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MakeKnowledgeUnitEbookIdNullable",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:6fusgm:20260513185108-makeknowledgeunitebookidnullable-",
      "sourcePath": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs"
    },
    {
      "id": "1o1df1d",
      "nodeId": "class:1lmiwem:mappingconfig",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MappingConfig",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs"
    },
    {
      "id": "1bmf0t2",
      "nodeId": "file:w6cklc:mappingconfig-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MappingConfig",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:w6cklc:mappingconfig-cs",
      "sourcePath": "NexusReader.Application/Mappings/MappingConfig.cs"
    },
    {
      "id": "1o827l9",
      "nodeId": "class:tx0x5k:mauiplatformservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MauiPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
    },
    {
      "id": "1bvin8w",
      "nodeId": "file:12lov7s:mauiplatformservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MauiPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:12lov7s:mauiplatformservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
    },
    {
      "id": "1itw4na",
      "nodeId": "class:1e8p0hy:mauiprogram",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MauiProgram",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1uay25w:mauiprogram-cs",
      "sourcePath": "NexusReader.Maui/MauiProgram.cs"
    },
    {
      "id": "1sp7y08",
      "nodeId": "file:1uay25w:mauiprogram-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MauiProgram",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1uay25w:mauiprogram-cs",
      "sourcePath": "NexusReader.Maui/MauiProgram.cs"
    },
    {
      "id": "upp27m",
      "nodeId": "class:18xcrf7:mauistorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MauiStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs"
    },
    {
      "id": "1mi8qkd",
      "nodeId": "class:jm4wx0:mauistorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "MauiStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "104zd8f",
      "nodeId": "file:7ji0h3:mauistorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MauiStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs"
    },
    {
      "id": "l21s78",
      "nodeId": "file:d17zn6:mauistorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "MauiStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "1that3w",
      "nodeId": "class:vyfiaz:nativestorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NativeStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "uckbmp",
      "nodeId": "file:902xey:nativestorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NativeStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "155u3t4",
      "nodeId": "method:6z33me:navigatetobook",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "NavigateToBook()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
    },
    {
      "id": "e8mqib",
      "nodeId": "method:b9ya71:navigatetolibrary-inline-lambda",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "NavigateToLibrary (inline lambda)",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1uvdam9:currentreadingwidget-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
    },
    {
      "id": "ymuoax",
      "nodeId": "class:1yjf0sw:nexusauthenticationstateprovider",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NexusAuthenticationStateProvider",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
    },
    {
      "id": "1m267mg",
      "nodeId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusAuthenticationStateProvider",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:i7as8l:nexusauthenticationstateprovider-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
    },
    {
      "id": "1cy2914",
      "nodeId": "file:1bp3my2:nexusbutton-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusButton",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1bp3my2:nexusbutton-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
    },
    {
      "id": "1qp60fy",
      "nodeId": "class:rzlm6n:nexusicon",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NexusIcon",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q8opk3:nexusicon-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
    },
    {
      "id": "1jgk32",
      "nodeId": "file:q8opk3:nexusicon-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusIcon",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q8opk3:nexusicon-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
    },
    {
      "id": "1bxil9j",
      "nodeId": "file:mpxmz7:nexusreader-application-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Application",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:mpxmz7:nexusreader-application-csproj",
      "sourcePath": "NexusReader.Application/NexusReader.Application.csproj"
    },
    {
      "id": "w5uufq",
      "nodeId": "file:bk6gk1:nexusreader-data-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Data",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:bk6gk1:nexusreader-data-csproj",
      "sourcePath": "NexusReader.Data/NexusReader.Data.csproj"
    },
    {
      "id": "v6zfau",
      "nodeId": "file:167q7jt:nexusreader-domain-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Domain",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:167q7jt:nexusreader-domain-csproj",
      "sourcePath": "NexusReader.Domain/NexusReader.Domain.csproj"
    },
    {
      "id": "14jlqow",
      "nodeId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Infrastructure",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:nkvoe3:nexusreader-infrastructure-csproj",
      "sourcePath": "NexusReader.Infrastructure/NexusReader.Infrastructure.csproj"
    },
    {
      "id": "574pp3",
      "nodeId": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Infrastructure.Mobile",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qnk9mr:nexusreader-infrastructure-mobile-csproj",
      "sourcePath": "NexusReader.Infrastructure.Mobile/NexusReader.Infrastructure.Mobile.csproj"
    },
    {
      "id": "1p6ia83",
      "nodeId": "file:1670zex:nexusreader-maui-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Maui",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1670zex:nexusreader-maui-csproj",
      "sourcePath": "NexusReader.Maui/NexusReader.Maui.csproj"
    },
    {
      "id": "t2dnsl",
      "nodeId": "file:69lwdf:nexusreader-ui-shared-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.UI.Shared",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:69lwdf:nexusreader-ui-shared-csproj",
      "sourcePath": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj"
    },
    {
      "id": "7u584n",
      "nodeId": "file:mhxlbr:nexusreader-web-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Web",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:mhxlbr:nexusreader-web-csproj",
      "sourcePath": "NexusReader.Web/NexusReader.Web.csproj"
    },
    {
      "id": "10gc10w",
      "nodeId": "file:1wvgol7:nexusreader-web-client-csproj",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusReader.Web.Client",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1wvgol7:nexusreader-web-client-csproj",
      "sourcePath": "NexusReader.Web.Client/NexusReader.Web.Client.csproj"
    },
    {
      "id": "wuaeqq",
      "nodeId": "class:c49vab:nexussearchbox",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NexusSearchBox",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
    },
    {
      "id": "1ukr5c6",
      "nodeId": "file:igeyi7:nexussearchbox-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusSearchBox",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:igeyi7:nexussearchbox-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
    },
    {
      "id": "1q5h7iq",
      "nodeId": "class:vspg7j:nexustypography",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NexusTypography",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
    },
    {
      "id": "oqzgxx",
      "nodeId": "file:184ajmn:nexustypography-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusTypography",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:184ajmn:nexustypography-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
    },
    {
      "id": "1nl7v7v",
      "nodeId": "class:q7xqjm:nexususer",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NexusUser",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:xcxh5w:nexususer-cs",
      "sourcePath": "NexusReader.Domain/Entities/NexusUser.cs"
    },
    {
      "id": "6dr0s9",
      "nodeId": "file:xcxh5w:nexususer-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NexusUser",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:xcxh5w:nexususer-cs",
      "sourcePath": "NexusReader.Domain/Entities/NexusUser.cs"
    },
    {
      "id": "nqlzai",
      "nodeId": "class:1j6dl20:normalizeauthor",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NormalizeAuthor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:13u663i:20260510151022-normalizeauthor-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
    },
    {
      "id": "8u95l9",
      "nodeId": "class:1l7wkbd:normalizeauthor",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "NormalizeAuthor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1jljncb:20260510151022-normalizeauthor-designer-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
    },
    {
      "id": "17unv27",
      "nodeId": "file:13jb3vh:notfound-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "NotFound",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:13jb3vh:notfound-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/NotFound.razor"
    },
    {
      "id": "1xkrxtt",
      "nodeId": "method:rb5d4b:notifynavigationchangedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "NotifyNavigationChangedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
    },
    {
      "id": "1rc8uuo",
      "nodeId": "method:15ros9m:notifytextselected",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "NotifyTextSelected()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
    },
    {
      "id": "12uhjgs",
      "nodeId": "method:p2mw02:notifytextselected",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "NotifyTextSelected()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1szg1zb:ireaderinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
    },
    {
      "id": "1e25yz5",
      "nodeId": "method:1r63qu7:onafterrenderasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnAfterRenderAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:h6mj95:home-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor"
    },
    {
      "id": "g8su08",
      "nodeId": "method:1r68c5i:onafterrenderasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnAfterRenderAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
    },
    {
      "id": "10961m",
      "nodeId": "method:1whrhth:onconnectedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnConnectedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "api-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:47d4sb:synchub-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
    },
    {
      "id": "hkwgoc",
      "nodeId": "method:1jy35qw:ondisconnectedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnDisconnectedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "api-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:47d4sb:synchub-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
    },
    {
      "id": "1e90cym",
      "nodeId": "method:whfss9:onfocuskeypressed",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnFocusKeypressed()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:h6mj95:home-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor"
    },
    {
      "id": "ce91uy",
      "nodeId": "method:11o3hgs:oninitialized",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitialized()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
    },
    {
      "id": "1omxeda",
      "nodeId": "method:upe53r:oninitialized",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitialized()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor"
    },
    {
      "id": "1gt6i9q",
      "nodeId": "method:1f4bu99:oninitializedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitializedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1kjntt:intelligence-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Intelligence.razor"
    },
    {
      "id": "1wn2thm",
      "nodeId": "method:lqrlha:oninitializedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitializedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1b5rrku:dashboard-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Dashboard.razor"
    },
    {
      "id": "zhoca0",
      "nodeId": "method:p4hxqo:oninitializedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitializedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ain1yo:mainhublayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
    },
    {
      "id": "1sjpftn",
      "nodeId": "method:z1n8tn:oninitializedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnInitializedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:11crtur:profile-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
    },
    {
      "id": "14d97vp",
      "nodeId": "method:p5ejmn:onparameterssetasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "OnParametersSetAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:h6mj95:home-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Home.razor"
    },
    {
      "id": "1r9fu12",
      "nodeId": "class:59bgj0:planconstants",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "PlanConstants",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:qqutlm:planconstants-cs",
      "sourcePath": "NexusReader.Application/Constants/PlanConstants.cs"
    },
    {
      "id": "wqjzyk",
      "nodeId": "file:qqutlm:planconstants-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "PlanConstants",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qqutlm:planconstants-cs",
      "sourcePath": "NexusReader.Application/Constants/PlanConstants.cs"
    },
    {
      "id": "aakvtl",
      "nodeId": "method:1x9gjeq:processfullpageasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ProcessFullPageAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
    },
    {
      "id": "1r4psdk",
      "nodeId": "method:yif4p8:processknowledgeunitsasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ProcessKnowledgeUnitsAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "1nf263c",
      "nodeId": "file:11crtur:profile-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Profile",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:11crtur:profile-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
    },
    {
      "id": "4gu13d",
      "nodeId": "file:12rhzck:program-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Program",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:12rhzck:program-cs",
      "sourcePath": "NexusReader.Web/Program.cs"
    },
    {
      "id": "1sa13u8",
      "nodeId": "file:1dbwiwx:program-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Program",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1dbwiwx:program-cs",
      "sourcePath": "NexusReader.Web.Client/Program.cs"
    },
    {
      "id": "1w9tif",
      "nodeId": "method:1uibcuk:program-top-level",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Program (top-level)",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:12rhzck:program-cs",
      "sourcePath": "NexusReader.Web/Program.cs"
    },
    {
      "id": "1xtcz54",
      "nodeId": "class:1x9y5vk:promptregistry",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "PromptRegistry",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:ha7eft:promptregistry-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs"
    },
    {
      "id": "16safnh",
      "nodeId": "file:ha7eft:promptregistry-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "PromptRegistry",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:ha7eft:promptregistry-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs"
    },
    {
      "id": "1t4qex2",
      "nodeId": "class:1hxasb:prouserhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ProUserHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs"
    },
    {
      "id": "cwfh09",
      "nodeId": "file:1hyu1ez:prouserhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ProUserHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1hyu1ez:prouserhandler-cs",
      "sourcePath": "NexusReader.Application/Security/Authorization/ProUserHandler.cs"
    },
    {
      "id": "11x2l85",
      "nodeId": "class:42ukrv:prouserrequirement",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ProUserRequirement",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1vi6r42:prouserrequirement-cs",
      "sourcePath": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs"
    },
    {
      "id": "xlt4h2",
      "nodeId": "file:1vi6r42:prouserrequirement-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ProUserRequirement",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1vi6r42:prouserrequirement-cs",
      "sourcePath": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs"
    },
    {
      "id": "1vessyx",
      "nodeId": "class:xbp5rm:quizresult",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "QuizResult",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs"
    },
    {
      "id": "19l6ym8",
      "nodeId": "file:1wyr0y8:quizresult-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "QuizResult",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1wyr0y8:quizresult-cs",
      "sourcePath": "NexusReader.Domain/Entities/QuizResult.cs"
    },
    {
      "id": "uyk7s5",
      "nodeId": "class:1t69b7g:quizstateservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "QuizStateService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs"
    },
    {
      "id": "1mqrch0",
      "nodeId": "file:3xx07l:quizstateservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "QuizStateService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:3xx07l:quizstateservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/QuizStateService.cs"
    },
    {
      "id": "1cwr61c",
      "nodeId": "file:uhcd4x:quizviewmodels-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "QuizViewModels",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:uhcd4x:quizviewmodels-cs",
      "sourcePath": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs"
    },
    {
      "id": "tpx5jf",
      "nodeId": "class:scmh0y:readercanvas",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ReaderCanvas",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "1cxgi5r",
      "nodeId": "file:3sb16d:readercanvas-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReaderCanvas",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "r44p8h",
      "nodeId": "class:gqmtg:readerfooter",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ReaderFooter",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
    },
    {
      "id": "193febg",
      "nodeId": "file:1foudu6:readerfooter-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReaderFooter",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
    },
    {
      "id": "1rll9ip",
      "nodeId": "class:18r7noo:readerinteractionservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ReaderInteractionService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
    },
    {
      "id": "yfaex9",
      "nodeId": "file:1jnstne:readerinteractionservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReaderInteractionService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1jnstne:readerinteractionservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
    },
    {
      "id": "137wzhh",
      "nodeId": "class:15qe4r2:readerlayout",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ReaderLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
    },
    {
      "id": "1gwvdvz",
      "nodeId": "file:mm1vnb:readerlayout-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReaderLayout",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:mm1vnb:readerlayout-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
    },
    {
      "id": "2r70af",
      "nodeId": "class:1baxnes:readernavigationservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ReaderNavigationService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
    },
    {
      "id": "1if2uu6",
      "nodeId": "file:1aunxq2:readernavigationservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReaderNavigationService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1aunxq2:readernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
    },
    {
      "id": "1vcbhpj",
      "nodeId": "file:uzi8zg:reconnectmodal-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReconnectModal",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:uzi8zg:reconnectmodal-razor",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor"
    },
    {
      "id": "2urtht",
      "nodeId": "file:1wkle85:reconnectmodal-razor-js",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ReconnectModal.razor",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1wkle85:reconnectmodal-razor-js",
      "sourcePath": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
    },
    {
      "id": "1kq0qdf",
      "nodeId": "file:82rsqa:redirecttologin-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "RedirectToLogin",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:82rsqa:redirecttologin-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/RedirectToLogin.razor"
    },
    {
      "id": "1uxnwdl",
      "nodeId": "method:nb75z9:refreshtokenasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RefreshTokenAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs"
    },
    {
      "id": "15rwfzq",
      "nodeId": "file:1hn70tz:register-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Register",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1hn70tz:register-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Account/Register.razor"
    },
    {
      "id": "gjcmue",
      "nodeId": "method:1ekb3x6:registerasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RegisterAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs"
    },
    {
      "id": "1x89a9h",
      "nodeId": "method:kf6qfg:registerasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RegisterAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:b8uv8h:identityservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IdentityService.cs"
    },
    {
      "id": "yc562u",
      "nodeId": "class:1wekmss:relevantcontext",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "RelevantContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:q380me:relevantcontext-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/RelevantContext.cs"
    },
    {
      "id": "jpzbfi",
      "nodeId": "file:q380me:relevantcontext-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "RelevantContext",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:q380me:relevantcontext-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/RelevantContext.cs"
    },
    {
      "id": "1bpkz7q",
      "nodeId": "method:17924up:removeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RemoveAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    },
    {
      "id": "vyc40c",
      "nodeId": "method:1gw1s7x:removeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RemoveAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "xeoat4",
      "nodeId": "method:1w0f8ik:removeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RemoveAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "1xjflhp",
      "nodeId": "method:kv7eey:removesecureasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RemoveSecureAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "1gqjdue",
      "nodeId": "method:tmysty:render-razor-markup",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Render (Razor markup)",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1foudu6:readerfooter-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
    },
    {
      "id": "h37myy",
      "nodeId": "method:1oq28g8:requestsummary",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RequestSummary()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
    },
    {
      "id": "1ly0bsb",
      "nodeId": "method:2y4xzb:requestsummaryandquizasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RequestSummaryAndQuizAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:uvydt4:knowledgecoordinator-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
    },
    {
      "id": "17zngnu",
      "nodeId": "class:19wn0m3:routes",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "Routes",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1sm6kjd:routes-razor",
      "sourcePath": "NexusReader.UI.Shared/Routes.razor"
    },
    {
      "id": "1g2fpe0",
      "nodeId": "file:1sm6kjd:routes-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Routes",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1sm6kjd:routes-razor",
      "sourcePath": "NexusReader.UI.Shared/Routes.razor"
    },
    {
      "id": "1y14wbe",
      "nodeId": "method:xt4lks:runcheck",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "RunCheck()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:108l4jq:groundednessbadge-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
    },
    {
      "id": "18bsyes",
      "nodeId": "method:ef0iff:saveboolasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveBoolAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "ll64cm",
      "nodeId": "method:1wp2z4z:savechangesasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveChangesAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1dbwiwx:program-cs",
      "sourcePath": "NexusReader.Web.Client/Program.cs"
    },
    {
      "id": "1tsnp1a",
      "nodeId": "method:17pqj2a:savesecurestring",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveSecureString()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:7ji0h3:mauistorageservice-cs",
      "sourcePath": "NexusReader.Maui/Services/MauiStorageService.cs"
    },
    {
      "id": "1qwq7ux",
      "nodeId": "method:h3fyyz:savesecurestring",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveSecureString()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "k99t1x",
      "nodeId": "method:16m1d8f:savestringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    },
    {
      "id": "9x7dls",
      "nodeId": "method:18nxwdn:savestringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:902xey:nativestorageservice-cs",
      "sourcePath": "NexusReader.Web/Services/NativeStorageService.cs"
    },
    {
      "id": "1c4mx7j",
      "nodeId": "method:s95smj:savestringasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveStringAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:d17zn6:mauistorageservice-cs",
      "sourcePath": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
    },
    {
      "id": "390ap2",
      "nodeId": "method:10uf4tt:savetolibrary",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SaveToLibrary()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:8kve74:bookingestionmodal-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
    },
    {
      "id": "1gk7dx5",
      "nodeId": "method:105vz8s:scrolltonodeasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ScrollToNodeAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:3sb16d:readercanvas-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
    },
    {
      "id": "wu8b6c",
      "nodeId": "method:1sn20bf:searchlibrarysemanticallyasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SearchLibrarySemanticallyAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "1b0yl0w",
      "nodeId": "method:yy3thw:searchlibrarysemanticallyasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SearchLibrarySemanticallyAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:27eki7:knowledgeservice-cs",
      "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
    },
    {
      "id": "11a557x",
      "nodeId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SearchLibrarySemanticallyQuery",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
    },
    {
      "id": "15new14",
      "nodeId": "class:1x3939l:searchlibrarysemanticallyqueryhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SearchLibrarySemanticallyQueryHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
    },
    {
      "id": "1p1x9tq",
      "nodeId": "method:17jd9c8:searchlibrarysemanticallyqueryhandler",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SearchLibrarySemanticallyQueryHandler()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:qbybjm:searchlibrarysemanticallyquery-cs",
      "sourcePath": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
    },
    {
      "id": "1fabrlc",
      "nodeId": "method:n19kbi:seedasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SeedAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:136c3oe:dbinitializer-cs",
      "sourcePath": "NexusReader.Data/Persistence/DbInitializer.cs"
    },
    {
      "id": "2njb2v",
      "nodeId": "class:5wh0z0:selectionaipanel",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SelectionAiPanel",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
    },
    {
      "id": "1oeqppm",
      "nodeId": "file:1ez5kuw:selectionaipanel-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SelectionAiPanel",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1ez5kuw:selectionaipanel-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
    },
    {
      "id": "1w2tqk6",
      "nodeId": "method:cgrv35:selectoptionasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SelectOptionAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:yno7se:knowledgecheck-razor",
      "sourcePath": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
    },
    {
      "id": "15bx0l4",
      "nodeId": "class:e0216a:semanticknowledgecache",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SemanticKnowledgeCache",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "sourcePath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"
    },
    {
      "id": "u4btiq",
      "nodeId": "file:1d4ycw2:semanticknowledgecache-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SemanticKnowledgeCache",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1d4ycw2:semanticknowledgecache-cs",
      "sourcePath": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"
    },
    {
      "id": "1923xgg",
      "nodeId": "class:1lzvao4:semanticsearchresultdto",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SemanticSearchResultDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"
    },
    {
      "id": "15f0b42",
      "nodeId": "file:1k69za4:semanticsearchresultdto-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SemanticSearchResultDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1k69za4:semanticsearchresultdto-cs",
      "sourcePath": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"
    },
    {
      "id": "1193gl8",
      "nodeId": "method:17fop7p:sendasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SendAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:17v8pus:authenticationheaderhandler-cs",
      "sourcePath": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
    },
    {
      "id": "4llnf3",
      "nodeId": "class:1l2fmrv:serveridentityservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ServerIdentityService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs"
    },
    {
      "id": "wvmttf",
      "nodeId": "file:10axm6l:serveridentityservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ServerIdentityService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:10axm6l:serveridentityservice-cs",
      "sourcePath": "NexusReader.Web/Services/ServerIdentityService.cs"
    },
    {
      "id": "ftpnqt",
      "nodeId": "method:p6r8md:setactivenode",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SetActiveNode()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "1bvx2o6",
      "nodeId": "method:4o7htd:setbook",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SetBook()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:wgkae9:ireadernavigationservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
    },
    {
      "id": "85tg5z",
      "nodeId": "method:x4s1g:setloading",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "SetLoading()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "ywft01",
      "nodeId": "file:1mpguez:settings-razor",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "Settings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "ui-to-backend",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1mpguez:settings-razor",
      "sourcePath": "NexusReader.UI.Shared/Pages/Settings.razor"
    },
    {
      "id": "10l0xis",
      "nodeId": "class:7rymm7:signalrsyncbroadcaster",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SignalRSyncBroadcaster",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
    },
    {
      "id": "xir9v0",
      "nodeId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SignalRSyncBroadcaster",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:10i5sd6:signalrsyncbroadcaster-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
    },
    {
      "id": "1qotidy",
      "nodeId": "class:1mgndci:storagekeys",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "StorageKeys",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:g197tx:storagekeys-cs",
      "sourcePath": "NexusReader.Application/Constants/StorageKeys.cs"
    },
    {
      "id": "1c4phig",
      "nodeId": "file:g197tx:storagekeys-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "StorageKeys",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:g197tx:storagekeys-cs",
      "sourcePath": "NexusReader.Application/Constants/StorageKeys.cs"
    },
    {
      "id": "18i0zef",
      "nodeId": "class:1mqu7tw:stripesettings",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "StripeSettings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:faws7u:stripesettings-cs",
      "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
    },
    {
      "id": "198v63h",
      "nodeId": "file:faws7u:stripesettings-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "StripeSettings",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:faws7u:stripesettings-cs",
      "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
    },
    {
      "id": "1g39q3x",
      "nodeId": "class:cmiilf:submitanswercommand",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SubmitAnswerCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:dskay:submitanswercommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"
    },
    {
      "id": "pdqrzi",
      "nodeId": "file:dskay:submitanswercommand-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SubmitAnswerCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:dskay:submitanswercommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"
    },
    {
      "id": "q1fgz5",
      "nodeId": "class:andjgd:submitanswercommandhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SubmitAnswerCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"
    },
    {
      "id": "1xw2zfs",
      "nodeId": "file:hc4koi:submitanswercommandhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SubmitAnswerCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:hc4koi:submitanswercommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"
    },
    {
      "id": "12q9j7x",
      "nodeId": "class:1ajhp9e:subscriptionplan",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SubscriptionPlan",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1b03oou:subscriptionplan-cs",
      "sourcePath": "NexusReader.Domain/Entities/SubscriptionPlan.cs"
    },
    {
      "id": "fdg877",
      "nodeId": "file:1b03oou:subscriptionplan-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SubscriptionPlan",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1b03oou:subscriptionplan-cs",
      "sourcePath": "NexusReader.Domain/Entities/SubscriptionPlan.cs"
    },
    {
      "id": "t4up6i",
      "nodeId": "class:1r9yuyl:subscriptionplandto",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SubscriptionPlanDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:9775p0:subscriptionplandto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"
    },
    {
      "id": "1k3gjik",
      "nodeId": "file:9775p0:subscriptionplandto-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SubscriptionPlanDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:9775p0:subscriptionplandto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"
    },
    {
      "id": "t5vhxw",
      "nodeId": "class:154519v:synchub",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SyncHub",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:47d4sb:synchub-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
    },
    {
      "id": "2u8js8",
      "nodeId": "file:47d4sb:synchub-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SyncHub",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "api-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:47d4sb:synchub-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
    },
    {
      "id": "r1t2hw",
      "nodeId": "class:1jwtkwo:syncservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "SyncService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs"
    },
    {
      "id": "3jyhrv",
      "nodeId": "file:1la6lrw:syncservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "SyncService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs"
    },
    {
      "id": "11tgogu",
      "nodeId": "class:1ehqpz0:themeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "ThemeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs"
    },
    {
      "id": "1pym67w",
      "nodeId": "file:i1pwrm:themeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ThemeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:i1pwrm:themeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/ThemeService.cs"
    },
    {
      "id": "o5b4x3",
      "nodeId": "method:17j6y8x:toggleasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "ToggleAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:xs3ks1:ifocusmodeservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
    },
    {
      "id": "1qmdruu",
      "nodeId": "class:dceqku:tokenlimithandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "TokenLimitHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs"
    },
    {
      "id": "1jvg9ma",
      "nodeId": "file:38gozs:tokenlimithandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "TokenLimitHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:38gozs:tokenlimithandler-cs",
      "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs"
    },
    {
      "id": "17x78r7",
      "nodeId": "class:9rdcag:tokenlimitrequirement",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "TokenLimitRequirement",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs"
    },
    {
      "id": "1qrtki9",
      "nodeId": "file:1wvs02p:tokenlimitrequirement-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "TokenLimitRequirement",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1wvs02p:tokenlimitrequirement-cs",
      "sourcePath": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs"
    },
    {
      "id": "yno9r6",
      "nodeId": "method:1x7fw9j:up",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "Up()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1m4p1ej:20260428185239-increasehashlength-cs",
      "sourcePath": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
    },
    {
      "id": "sxm5aw",
      "nodeId": "method:1gtjcaz:updategraph",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "UpdateGraph()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1x9xhbs:iknowledgegraphservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
    },
    {
      "id": "8wdo2q",
      "nodeId": "method:1gkzz9r:updateprogress",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "UpdateProgress()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "api-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:47d4sb:synchub-cs",
      "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
    },
    {
      "id": "183be7b",
      "nodeId": "method:1w7mi8p:updateprogressasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "UpdateProgressAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1la6lrw:syncservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/SyncService.cs"
    },
    {
      "id": "czwdvq",
      "nodeId": "class:1onwz:updatereadingprogresscommand",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "UpdateReadingProgressCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"
    },
    {
      "id": "s7jylb",
      "nodeId": "file:xocicc:updatereadingprogresscommand-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "UpdateReadingProgressCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:xocicc:updatereadingprogresscommand-cs",
      "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"
    },
    {
      "id": "hhh8og",
      "nodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "UpdateReadingProgressCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
    },
    {
      "id": "v3tvhb",
      "nodeId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "UpdateReadingProgressCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:13c5eb4:updatereadingprogresscommandhandler-cs",
      "sourcePath": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
    },
    {
      "id": "1uip88c",
      "nodeId": "class:1jcp5tl:updatesubscriptionplanisunlimitedtokens",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1psv1cv:20260506184227-updatesubscriptionplanisunlimited",
      "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
    },
    {
      "id": "136x47o",
      "nodeId": "class:588td0:updatesubscriptionplanisunlimitedtokens",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "UpdateSubscriptionPlanIsUnlimitedTokens",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1y1rue2:20260506184227-updatesubscriptionplanisunlimited",
      "sourcePath": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
    },
    {
      "id": "1b3x0jz",
      "nodeId": "class:vgmc9n:userprofiledto",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "UserProfileDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1fs0p2c:userprofiledto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/UserProfileDto.cs"
    },
    {
      "id": "11vule9",
      "nodeId": "file:1fs0p2c:userprofiledto-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "UserProfileDto",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1fs0p2c:userprofiledto-cs",
      "sourcePath": "NexusReader.Application/DTOs/User/UserProfileDto.cs"
    },
    {
      "id": "1p5whes",
      "nodeId": "method:1ol1cx2:verifygroundednessasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "VerifyGroundednessAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "2hzp8n",
      "nodeId": "file:2eckht:verifygroundednesscommand-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "VerifyGroundednessCommand",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
    },
    {
      "id": "ah4fs4",
      "nodeId": "class:109ebx2:verifygroundednesscommandhandler",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "VerifyGroundednessCommandHandler",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:2eckht:verifygroundednesscommand-cs",
      "sourcePath": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
    },
    {
      "id": "1jye4vw",
      "nodeId": "method:1lfokb3:vibrateasync",
      "nodeKind": "method",
      "seedKind": "method",
      "label": "VibrateAsync()",
      "grounded": true,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 4,
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs"
    },
    {
      "id": "1ykcq4m",
      "nodeId": "file:1rikffk:viewmodels-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "ViewModels",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1rikffk:viewmodels-cs",
      "sourcePath": "NexusReader.Application/Queries/Reader/ViewModels.cs"
    },
    {
      "id": "1s6cp5h",
      "nodeId": "class:veazt0:wasmepubreader",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "WasmEpubReader",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs"
    },
    {
      "id": "bfrq83",
      "nodeId": "file:hiutf5:wasmepubservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "WasmEpubService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:hiutf5:wasmepubservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmEpubService.cs"
    },
    {
      "id": "asu8za",
      "nodeId": "class:rcx5lg:wasmknowledgeservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "WasmKnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "1kbkatt",
      "nodeId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "WasmKnowledgeService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:1ufa6nr:wasmknowledgeservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
    },
    {
      "id": "akuo5p",
      "nodeId": "class:fhmi44:webplatformservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "WebPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs"
    },
    {
      "id": "fjvyol",
      "nodeId": "file:qt46oq:webplatformservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "WebPlatformService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:qt46oq:webplatformservice-cs",
      "sourcePath": "NexusReader.Web.Client/Services/WebPlatformService.cs"
    },
    {
      "id": "1nga4op",
      "nodeId": "class:1uirugg:webstorageservice",
      "nodeKind": "class",
      "seedKind": "class",
      "label": "WebStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "class-neighborhood",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 3,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    },
    {
      "id": "rube8p",
      "nodeId": "file:15km3l4:webstorageservice-cs",
      "nodeKind": "file",
      "seedKind": "file",
      "label": "WebStorageService",
      "grounded": false,
      "defaultDirection": "downstream",
      "preferredMode": "runtime-only",
      "preferredDiagramFamily": "flow-graph",
      "maxDepth": 2,
      "sourceFileId": "file:15km3l4:webstorageservice-cs",
      "sourcePath": "NexusReader.UI.Shared/Services/WebStorageService.cs"
    }
  ],
  "health": {
    "version": 1,
    "generatedAt": "2026-05-25T11:41:33.166Z",
    "runId": "v4-1779707139870-rlu0248l",
    "status": "warn",
    "issueCount": 854,
    "issues": [
      {
        "id": "1tvuxjx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "_epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:yrhxqp:epubreader-getepubcontentasync-request-ebookid-r"
      },
      {
        "id": "szoota",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "_Imports has no downstream runtime path in the current graph.",
        "nodeId": "file:163bafi:imports-razor",
        "path": "NexusReader.Web/Components/_Imports.razor"
      },
      {
        "id": "1muv42a",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "_Imports has no downstream runtime path in the current graph.",
        "nodeId": "file:e9w1fz:imports-razor",
        "path": "NexusReader.Maui/_Imports.razor"
      },
      {
        "id": "mqmsg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "_platformService.VibrateAsync(50) invoked to provide haptic feedback on correct answer is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1tw588t:platformservice-vibrateasync-50-invoked-to-provi"
      },
      {
        "id": "1ezrd5j",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": ".ctor (implicit) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:160zwvx:ctor-implicit",
        "path": "NexusReader.Domain/Entities/QuizResult.cs"
      },
      {
        "id": "jlwmqt",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "<module_init>() has no downstream runtime path in the current graph.",
        "nodeId": "method:15ixuxd:module-init",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "1xvftmi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "<module_init>() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:15ixuxd:module-init",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "dhwson",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Account Logout Form (GET /account/logout-form) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19x6wwx:account-logout-form-get-account-logout-form",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "lvizjt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ActiveNodeId() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cho50r:activenodeid",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "5mhsiq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddApplication() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:zf4i3h:addapplication",
        "path": "NexusReader.Application/DependencyInjection.cs"
      },
      {
        "id": "1k3357m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddAuthor() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1dgp7fr:addauthor",
        "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
      },
      {
        "id": "8wn53k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddAuthor() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:2iyuvn:addauthor",
        "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
      },
      {
        "id": "zofpru",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddDescriptionToEbook is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1ca124f:adddescriptiontoebook",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
      },
      {
        "id": "1bsh0xr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddDescriptionToEbook is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:tfj298:adddescriptiontoebook",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs"
      },
      {
        "id": "1ckp1nj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddDescriptionToEbook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:52venu:adddescriptiontoebook",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs"
      },
      {
        "id": "13b8yua",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddDescriptionToEbook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:8wi1r9:adddescriptiontoebook",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
      },
      {
        "id": "jjto9h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbook() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ij0vl0:addebook",
        "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
      },
      {
        "id": "1hcuuxy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookLastChapterIndex is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1kl84eu:addebooklastchapterindex",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
      },
      {
        "id": "16wuu3b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookLastChapterIndex is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1ojuflh:addebooklastchapterindex",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs"
      },
      {
        "id": "1d0yzjh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookLastChapterIndex is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1fj6zpl:addebooklastchapterindex",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs"
      },
      {
        "id": "rqsca5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookLastChapterIndex is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1obfu5w:addebooklastchapterindex",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
      },
      {
        "id": "k6fvdd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookProgressAndChapter is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1eh84ev:addebookprogressandchapter",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "1pjqkt8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookProgressAndChapter is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:kshwxo:addebookprogressandchapter",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"
      },
      {
        "id": "1iihjz9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookReadyFlag is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1eb2dy:addebookreadyflag",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
      },
      {
        "id": "opgn5e",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookReadyFlag is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:4p0c5r:addebookreadyflag",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs"
      },
      {
        "id": "1tac4h3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookReadyFlag is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1l23zuf:addebookreadyflag",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs"
      },
      {
        "id": "1t3s8vu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddEbookReadyFlag is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:swoy5w:addebookreadyflag",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
      },
      {
        "id": "1e8alqq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddInfrastructure() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:7atrx1:addinfrastructure",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "9a5sry",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddQuizResults is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:3a8sch:addquizresults",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
      },
      {
        "id": "1u7hibj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddQuizResults is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:9ftatg:addquizresults",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "v9ld2i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AddQuizResults is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1f6rpfs:addquizresults",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
      },
      {
        "id": "19217wb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AiActionTriggerBlock is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1jbz88m:aiactiontriggerblock",
        "path": "NexusReader.Application/Queries/Reader/ViewModels.cs"
      },
      {
        "id": "1k3qc56",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "AiAssistantBubble has no downstream runtime path in the current graph.",
        "nodeId": "file:83c16m:aiassistantbubble-razor",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "t5yw2t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AiSettings is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1e23oyo:aisettings",
        "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs"
      },
      {
        "id": "1873tg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AiSettings is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:7ek9gn:aisettings",
        "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs"
      },
      {
        "id": "16bhoic",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "AllQuestionsAnswered() has no downstream runtime path in the current graph.",
        "nodeId": "method:ty8u23:allquestionsanswered",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "156scr7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AllQuestionsAnswered() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ty8u23:allquestionsanswered",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "d5dnhr",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "App has no downstream runtime path in the current graph.",
        "nodeId": "file:qvoxmq:app-razor",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "untsli",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "App is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:a8yza:app",
        "path": "NexusReader.Maui/App.xaml.cs"
      },
      {
        "id": "1mpqqev",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "App is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1cq4i8l:app",
        "path": "NexusReader.Maui/App.xaml.cs"
      },
      {
        "id": "l3eaqm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "App() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1b26w2r:app",
        "path": "NexusReader.Maui/App.xaml.cs"
      },
      {
        "id": "vnryyi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:wtyati:appdbcontext",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "12rx7ve",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:c5amk9:appdbcontext",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1bppx7k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ex6nhz:appdbcontext",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1i5mvfc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContextFactory is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1g09xpu:appdbcontextfactory",
        "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs"
      },
      {
        "id": "1bdw61l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContextFactory is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1tyno9s:appdbcontextfactory",
        "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs"
      },
      {
        "id": "19jho5d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContextModelSnapshot is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1v2rkom:appdbcontextmodelsnapshot",
        "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs"
      },
      {
        "id": "1cfw45f",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppDbContextModelSnapshot is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:11t8gjy:appdbcontextmodelsnapshot",
        "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs"
      },
      {
        "id": "kdu4rn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppJsonContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:potzj8:appjsoncontext",
        "path": "NexusReader.Application/Common/AppJsonContext.cs"
      },
      {
        "id": "dvfm7h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AppJsonContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1si295l:appjsoncontext",
        "path": "NexusReader.Application/Common/AppJsonContext.cs"
      },
      {
        "id": "1tkp530",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AskLibraryQuestionQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:bzkzmt:asklibraryquestionquery",
        "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
      },
      {
        "id": "1xa5fnu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AskLibraryQuestionQueryHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:s4lsqg:asklibraryquestionqueryhandler",
        "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
      },
      {
        "id": "1irwjf5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AskLibraryQuestionQueryHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:r0ndyk:asklibraryquestionqueryhandler",
        "path": "NexusReader.Application/Queries/Library/AskLibraryQuestionQuery.cs"
      },
      {
        "id": "mspznw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AskQuestionAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:f76by4:askquestionasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "11pgfa8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AskQuestionRequest is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1jb5rcg:askquestionrequest",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "1711awi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AspNetRoleClaims / AspNetUserClaims / AspNetUserLogins / AspNetUserRoles / AspNetUserTokens is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1yhkunt:aspnetroleclaims-aspnetuserclaims-aspnetuserlogi",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "v09vu3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AspNetRoles is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:18g2en:aspnetroles",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "iwvn4x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AspNetUsers is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1iyorzj:aspnetusers",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "zzvfbw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Assembly (property getter) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:lhrad4:assembly-property-getter",
        "path": "NexusReader.Application/DependencyInjection.cs"
      },
      {
        "id": "1byi4so",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Assembly() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1c1pgjw:assembly",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "d1xmdg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AuthenticationHeaderHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:jvil15:authenticationheaderhandler",
        "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
      },
      {
        "id": "1sejhg6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AuthenticationHeaderHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:19q79ms:authenticationheaderhandler",
        "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
      },
      {
        "id": "1xxfa85",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "AuthLayout has no downstream runtime path in the current graph.",
        "nodeId": "class:1k4its0:authlayout",
        "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor"
      },
      {
        "id": "1l3016p",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "AuthLayout has no downstream runtime path in the current graph.",
        "nodeId": "file:18yxzxe:authlayout-razor",
        "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor"
      },
      {
        "id": "8w6w72",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AuthLayout is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1k4its0:authlayout",
        "path": "NexusReader.UI.Shared/Layout/AuthLayout.razor"
      },
      {
        "id": "1kkzo0e",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Author (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1d5hut9:author-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "1ou6eqj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Author is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1nsniny:author",
        "path": "NexusReader.Domain/Entities/Author.cs"
      },
      {
        "id": "36avho",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Author is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1trrs3x:author",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "gduw2i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Author is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:y9wry3:author",
        "path": "NexusReader.Domain/Entities/Author.cs"
      },
      {
        "id": "1la0xbj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AuthorDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:z1d2u7:authordto",
        "path": "NexusReader.Application/DTOs/User/AuthorDto.cs"
      },
      {
        "id": "1btctko",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "AuthorDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1m6ptus:authordto",
        "path": "NexusReader.Application/DTOs/User/AuthorDto.cs"
      },
      {
        "id": "1jufle1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Authors (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1r4sskm:authors-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "b252wj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await _broadcaster.BroadcastProgressAsync(request.UserId, request.PageId, now, request.ExcludedConnectionId, cancellationToken); is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1vdaqgp:await-broadcaster-broadcastprogressasync-request"
      },
      {
        "id": "77yznl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await _knowledgeService.GetGraphDataAsync(...) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:q33zpz:await-knowledgeservice-getgraphdataasync"
      },
      {
        "id": "7u58zb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await _knowledgeService.VerifyGroundednessAsync(...) and return its Result<GroundednessResult> is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:dk8fk1:await-knowledgeservice-verifygroundednessasync-a"
      },
      {
        "id": "1fkvqkz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await _storageService.GetSecureString(TokenKey) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1jiqvie:await-storageservice-getsecurestring-tokenkey"
      },
      {
        "id": "1t3rf7i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await epubService.GetEpubContentAsync(...) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:13f6i8d:await-epubservice-getepubcontentasync"
      },
      {
        "id": "pba5wc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await KnowledgeService.AskQuestionAsync(_question, \"tenantId\", ebookId) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1w6c46m:await-knowledgeservice-askquestionasync-question"
      },
      {
        "id": "1l890bk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await KnowledgeService.ClearCacheAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1j16x1b:await-knowledgeservice-clearcacheasync"
      },
      {
        "id": "10g3c9y",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await knowledgeService.GetGraphDataAsync(fullContent, tenantId) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:10lsi3f:await-knowledgeservice-getgraphdataasync-fullcon"
      },
      {
        "id": "iazwdc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "await PlatformService.VibrateAsync(40) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:7ksxes:await-platformservice-vibrateasync-40"
      },
      {
        "id": "so8fmf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Awaits InteractionService.NotifyTextSelected(string.Empty, string.Empty, null!) to clear selection globally is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:jtxfro:awaits-interactionservice-notifytextselected-str"
      },
      {
        "id": "16hb4c2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Book (component parameter) has no downstream runtime path in the current graph.",
        "nodeId": "method:1lzfzn4:book-component-parameter",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "1xu74wj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Book (component parameter) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lzfzn4:book-component-parameter",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "2ikafk",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "BookId has no downstream runtime path in the current graph.",
        "nodeId": "type:1t001js:bookid",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1wwv5y5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BookId is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1t001js:bookid",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1eyp1zi",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "BookIngestionModal has no downstream runtime path in the current graph.",
        "nodeId": "class:twnl84:bookingestionmodal",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "vv7kf7",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "BookIngestionModal has no downstream runtime path in the current graph.",
        "nodeId": "file:8kve74:bookingestionmodal-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "pftirz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BookIngestionModal is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:twnl84:bookingestionmodal",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1x1c6g3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BookStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:9todq3:bookstorageservice",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "1da878l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BookStorageService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:axmshz:bookstorageservice",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "179mvka",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BroadcastIngestionProgressAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:uqgfbl:broadcastingestionprogressasync",
        "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs"
      },
      {
        "id": "7txywx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BroadcastIngestionProgressAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:yo2gbi:broadcastingestionprogressasync",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1rcu0xj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BroadcastProgressAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:11t39ko:broadcastprogressasync",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1jmqm39",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BroadcastProgressAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:3uewqk:broadcastprogressasync",
        "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs"
      },
      {
        "id": "3m0w7n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1nrn8uy:buildmodel",
        "path": "NexusReader.Data/Migrations/AppDbContextModelSnapshot.cs"
      },
      {
        "id": "1hl4xoo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:13h9yo2:buildtargetmodel",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.Designer.cs"
      },
      {
        "id": "1lrjo6f",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:145q8gt:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "10m5ep4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16euo54:buildtargetmodel",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"
      },
      {
        "id": "1eti7cv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16i3kbl:buildtargetmodel",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.Designer.cs"
      },
      {
        "id": "11wlehq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1egmvje:buildtargetmodel",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs"
      },
      {
        "id": "1h484sx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1febov1:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.Designer.cs"
      },
      {
        "id": "psnie9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:4nawp0:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs"
      },
      {
        "id": "19mlvwa",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:b38ztv:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "q5vzp",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:e4n4cn:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "ohwbh6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "BuildTargetModel() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:eacfb6:buildtargetmodel",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "ev73wy",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "CalculateProgress() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ak3em3:calculateprogress",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "18k2p5q",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "CalculateProgress() has no downstream runtime path in the current graph.",
        "nodeId": "method:k7fbfq:calculateprogress",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "1qh9u5t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CalculateProgress() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ak3em3:calculateprogress",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "1tysxp7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CalculateProgress() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:k7fbfq:calculateprogress",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "jdcf1f",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ChapterTitle() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:wxhxya:chaptertitle",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "12wf8r2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CitationDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:h0u00k:citationdto",
        "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"
      },
      {
        "id": "1nhw18g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Class1 is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1133tob:class1",
        "path": "NexusReader.Infrastructure.Mobile/Class1.cs"
      },
      {
        "id": "163mawf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Class1 is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1n37540:class1",
        "path": "NexusReader.Infrastructure.Mobile/Class1.cs"
      },
      {
        "id": "6yrnzw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Clear() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ekp9ov:clear",
        "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
      },
      {
        "id": "1qmuhwy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ClearAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:b6ndo3:clearasync",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "xrs5ix",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ClearCache() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1r8a5jx:clearcache",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "irk9y",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ClearCacheAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:26njdb:clearcacheasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "13eacay",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ClearSearch() has no downstream runtime path in the current graph.",
        "nodeId": "method:1sx9yhe:clearsearch",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "vyjw2l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ClearSearch() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1sx9yhe:clearsearch",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "1vlhdzm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CloneHttpRequestMessageAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:oosx7v:clonehttprequestmessageasync",
        "path": "NexusReader.Web.Client/Handlers/AuthenticationHeaderHandler.cs"
      },
      {
        "id": "1kvnybe",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "CloseModal() has no downstream runtime path in the current graph.",
        "nodeId": "method:ujsh2c:closemodal",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "lyz8j5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CloseModal() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ujsh2c:closemodal",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1oy4dbu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ComponentRender() has no downstream runtime path in the current graph.",
        "nodeId": "method:10aseyf:componentrender",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "1tqwqvl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ComponentRender() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10aseyf:componentrender",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "br79hz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ContentBlock is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:aqqzdn:contentblock",
        "path": "NexusReader.Application/Queries/Reader/ViewModels.cs"
      },
      {
        "id": "t350mn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ContentHasher is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:lvxelt:contenthasher",
        "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
      },
      {
        "id": "c1d2oc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ContentHasher is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:7fsbyq:contenthasher",
        "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
      },
      {
        "id": "1cv7i90",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CountWords() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:85035t:countwords",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "k69smg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateAiTrigger() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:9ls8js:createaitrigger",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "134pwvs",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateDbContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:9hjjot:createdbcontext",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1rtoy4p",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateDbContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:nwogow:createdbcontext",
        "path": "NexusReader.Data/Persistence/AppDbContextFactory.cs"
      },
      {
        "id": "ole4v4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateMauiApp() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:197aset:createmauiapp",
        "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
      },
      {
        "id": "12qw3dd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateMauiApp() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:hh1uha:createmauiapp",
        "path": "NexusReader.Maui/MauiProgram.cs"
      },
      {
        "id": "1fy7s7l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CreateState() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16ct380:createstate",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "2spzru",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentChapterIndex() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:xv5ikh:currentchapterindex",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "f0dh6d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentEbookId() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:vlhvyc:currentebookid",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "b6zym9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentGraphData() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:n5kc06:currentgraphdata",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "1bxj97v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:dz8xj4:currentquiz",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "vsvaol",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentQuizBlockId() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:vdmrat:currentquizblockid",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "j6ugn1",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "CurrentReadingWidget has no downstream runtime path in the current graph.",
        "nodeId": "class:1tn889i:currentreadingwidget",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "6wwmia",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "CurrentReadingWidget has no downstream runtime path in the current graph.",
        "nodeId": "file:1uvdam9:currentreadingwidget-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "3a631q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "CurrentReadingWidget is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1tn889i:currentreadingwidget",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "17a5l77",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dashboard has no downstream runtime path in the current graph.",
        "nodeId": "class:140cn9s:dashboard",
        "path": "NexusReader.UI.Shared/Pages/Dashboard.razor"
      },
      {
        "id": "1m6qsk2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dashboard has no downstream runtime path in the current graph.",
        "nodeId": "file:1b5rrku:dashboard-razor",
        "path": "NexusReader.UI.Shared/Pages/Dashboard.razor"
      },
      {
        "id": "h6nzby",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dashboard is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:140cn9s:dashboard",
        "path": "NexusReader.UI.Shared/Pages/Dashboard.razor"
      },
      {
        "id": "1czfbyp",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DbInitializer is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1t4ptj6:dbinitializer",
        "path": "NexusReader.Data/Persistence/DbInitializer.cs"
      },
      {
        "id": "15wogpt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DependencyInjection is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:5jkcay:dependencyinjection",
        "path": "NexusReader.Application/DependencyInjection.cs"
      },
      {
        "id": "1f3nqo9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DependencyInjection is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:k4fx0v:dependencyinjection",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "kzl5ju",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DependencyInjection is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1f52ore:dependencyinjection",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "1as8ui8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DeviceContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:flcquz:devicecontext",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "1phi3h2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DeviceType is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1jksru0:devicetype",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "1lyoh46",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisplayOrientation is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1qhatfu:displayorientation",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "16ve51a",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:150wzsg:dispose",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "15oxk5g",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:1h2dsti:dispose",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "10bt7ah",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:1nyg1j6:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "7r0nrt",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:1p3ftme:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "1g84pa8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:9q9eda:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "1sb4o8r",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Dispose() has no downstream runtime path in the current graph.",
        "nodeId": "method:zb4rdj:dispose",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "xsht9h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:150wzsg:dispose",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "11qn5vc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:194t8sk:dispose",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1cnx98f",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1h2dsti:dispose",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "cny6dy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1nyg1j6:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "17qwrh2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1p3ftme:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "1lutbtc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1wlwqp0:dispose",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "16kr9b5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:9q9eda:dispose",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "gmroje",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Dispose() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:zb4rdj:dispose",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "1ysnz65",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "DisposeAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:46fkcr:disposeasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1nt53ra",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "DisposeAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:99k8q7:disposeasync",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "tj7g3b",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "DisposeAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:lvsss7:disposeasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1gk3c3m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:14llm2d:disposeasync",
        "path": "NexusReader.UI.Shared/Services/SyncService.cs"
      },
      {
        "id": "1ny1jxc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:163m6av:disposeasync",
        "path": "NexusReader.UI.Shared/Services/ISyncService.cs"
      },
      {
        "id": "1aydl96",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:46fkcr:disposeasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1j0ebrp",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:99k8q7:disposeasync",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1gkeh34",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:lvsss7:disposeasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1jkqy7n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10r2ds4:down",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
      },
      {
        "id": "1htby3c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1kuci8n:down",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "1a3p44j",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1sgd810:down",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
      },
      {
        "id": "1xyu98v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ste7vn:down",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
      },
      {
        "id": "qn381u",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xywi1n:down",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
      },
      {
        "id": "1hmaje0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:3zfaqn:down",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
      },
      {
        "id": "1ioi13k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:98t2qk:down",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
      },
      {
        "id": "tjlcit",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:llsrxk:down",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "1oasokx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:wcoxzi:down",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
      },
      {
        "id": "1mkbwdv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:xctw2t:down",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"
      },
      {
        "id": "7t904m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Down() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:y8prsw:down",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
      },
      {
        "id": "1tvj4zk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook (entity mapping) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:exuypx:ebook-entity-mapping",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "1rdvfym",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:q2ghu0:ebook-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "zgtppx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1k2zgaa:ebook",
        "path": "NexusReader.Domain/Entities/Ebook.cs"
      },
      {
        "id": "1a6um4a",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:19fc1gq:ebook",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "1s9yzn9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:kzfhbn:ebook",
        "path": "NexusReader.Domain/Entities/Ebook.cs"
      },
      {
        "id": "rslpl8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:mdf15q:ebook",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "wavlc5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EbookRepository is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14vwagc:ebookrepository",
        "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
      },
      {
        "id": "1y0ze0d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EbookRepository() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:13rxvog:ebookrepository",
        "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
      },
      {
        "id": "qwjfkf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebooks (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cfsfui:ebooks-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1knf6gr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Ebooks is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:96fzwh:ebooks",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "wvuibo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EnsureDirectoryExists() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:je6l0s:ensuredirectoryexists",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "1fb8v9x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EpubMetadataExtractor is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1oku42b:epubmetadataextractor",
        "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
      },
      {
        "id": "1uwh2ig",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EpubReaderService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1ynrixc:epubreaderservice",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "17g3gd6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EpubReaderService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1y3guy7:epubreaderservice",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "11qq4lq",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Error (component backing model) has no downstream runtime path in the current graph.",
        "nodeId": "type:clecc9:error-component-backing-model",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "1uls6hr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Error (component backing model) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:clecc9:error-component-backing-model",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "oxtlhf",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Error has no downstream runtime path in the current graph.",
        "nodeId": "class:1jtdq7s:error",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "h0fi2t",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Error has no downstream runtime path in the current graph.",
        "nodeId": "class:1v3riqz:error",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "71kx2c",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Error has no downstream runtime path in the current graph.",
        "nodeId": "file:1awldsb:error-razor",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "bdmecr",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Error has no downstream runtime path in the current graph.",
        "nodeId": "file:p5ean4:error-razor",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "10hlx9e",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Error is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1jtdq7s:error",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "sfcdu0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Error is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1v3riqz:error",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "1of56lv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "EstimateTokenCount() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1l8c2eg:estimatetokencount",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "1ovki78",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ExtractMetadataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1vt6hc7:extractmetadataasync",
        "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
      },
      {
        "id": "17ni2ax",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ExtractMetadataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:hwn6lg:extractmetadataasync",
        "path": "NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs"
      },
      {
        "id": "19eeu7t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ExtractParagraphs() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1tcm0y0:extractparagraphs",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "1c9226l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FinalNormalizedSubscriptionArchitecture is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:tkzvf7:finalnormalizedsubscriptionarchitecture",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "1xqf7zt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FinalNormalizedSubscriptionArchitecture is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:zj074q:finalnormalizedsubscriptionarchitecture",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "xvdm8l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FixKnowledgeUnitEbookId is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:181ukvc:fixknowledgeunitebookid",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"
      },
      {
        "id": "1p5e3wx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FixKnowledgeUnitEbookId is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1jh8uof:fixknowledgeunitebookid",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
      },
      {
        "id": "1r8bk54",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FixKnowledgeUnitEbookId is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1a7gg4i:fixknowledgeunitebookid",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
      },
      {
        "id": "8ue83k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FixKnowledgeUnitEbookId is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1sj29na:fixknowledgeunitebookid",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"
      },
      {
        "id": "fclrvv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FocusModeService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1af3t0x:focusmodeservice",
        "path": "NexusReader.UI.Shared/Services/FocusModeService.cs"
      },
      {
        "id": "8qa5f5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "FocusModeService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:wn38ys:focusmodeservice",
        "path": "NexusReader.UI.Shared/Services/FocusModeService.cs"
      },
      {
        "id": "gv1nlc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GenerateAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:x4i3zt:generateasync",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1dbj4be",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Get User Profile (GET /identity/profile) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:7u4uld:get-user-profile-get-identity-profile",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "2di4po",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GetBlockClass() has no downstream runtime path in the current graph.",
        "nodeId": "method:1dimc2e:getblockclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "lsnub",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetBlockClass() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1dimc2e:getblockclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "doqn8v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1oljw52:getboolasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "145cr2n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:jkfjp3:getboolasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "1465v6b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetDeviceContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:60f4ut:getdevicecontext",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "cgy3yo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetDeviceContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:fmgrt8:getdevicecontext",
        "path": "NexusReader.Web.Client/Services/WebPlatformService.cs"
      },
      {
        "id": "1hrpbjn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetDeviceContext() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:w31hua:getdevicecontext",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "1d8jolc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetEpubContentAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:121clyd:getepubcontentasync",
        "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs"
      },
      {
        "id": "1u3ai77",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GetFullPageContent() has no downstream runtime path in the current graph.",
        "nodeId": "method:1i9kqly:getfullpagecontent",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "18yrk42",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetFullPageContent() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1i9kqly:getfullpagecontent",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1jfjkg1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetGraphDataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1g8j6qo:getgraphdataasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "30cqb2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetGraphDataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:wcjzgl:getgraphdataasync",
        "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
      },
      {
        "id": "1pql0lv",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GetIcon() has no downstream runtime path in the current graph.",
        "nodeId": "method:zopugm:geticon",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "i6hiku",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetIcon() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:zopugm:geticon",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "sc6qpd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetInitializationStatusQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:904yf3:getinitializationstatusquery",
        "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"
      },
      {
        "id": "y4hn0n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetInitializationStatusQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:18ezfq6:getinitializationstatusquery",
        "path": "NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"
      },
      {
        "id": "2n1kbk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetInitializationStatusQueryHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:g3vwaj:getinitializationstatusqueryhandler",
        "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"
      },
      {
        "id": "1v3jmx5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ckhg6n:getknowledgeasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "cbpby5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1jw3y39:getknowledgeasync",
        "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
      },
      {
        "id": "nx50wi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lrpkzo:getknowledgeasync",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "cksjjy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeGraphQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1qgqpgy:getknowledgegraphquery",
        "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"
      },
      {
        "id": "vjqnhe",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeGraphQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:je3vog:getknowledgegraphquery",
        "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"
      },
      {
        "id": "hxelt9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeGraphQueryHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:rci0sa:getknowledgegraphqueryhandler",
        "path": "NexusReader.Application/Queries/Graph/GetKnowledgeGraphQueryHandler.cs"
      },
      {
        "id": "1ma9tu0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeMapAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1anyvp0:getknowledgemapasync",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "az6bq2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeMapAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cuqhj0:getknowledgemapasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "pj4224",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetKnowledgeMapAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:jq1xnu:getknowledgemapasync",
        "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
      },
      {
        "id": "jl6xv6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetMyEbooks (GET /api/library/books) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:veacg9:getmyebooks-get-api-library-books",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "ssezkf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetMyEbooksQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:y84j0y:getmyebooksquery",
        "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs"
      },
      {
        "id": "lq9k4r",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetMyEbooksQueryHandler (ctor) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:527vme:getmyebooksqueryhandler-ctor",
        "path": "NexusReader.Application/Queries/Library/GetMyEbooksQuery.cs"
      },
      {
        "id": "q17v9f",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GetOptionClass() has no downstream runtime path in the current graph.",
        "nodeId": "method:1q9e63q:getoptionclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "1dw7sda",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetOptionClass() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1q9e63q:getoptionclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "v241r3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetProfileAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1u6514u:getprofileasync",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "ncesc7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetProfileAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:yzr6ph:getprofileasync",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "acfv35",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetReaderPageQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:z6s0dl:getreaderpagequery",
        "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"
      },
      {
        "id": "1xifwnd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetReaderPageQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:a2sfsr:getreaderpagequery",
        "path": "NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"
      },
      {
        "id": "1gkgow7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetReaderPageQueryHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:4pvcwi:getreaderpagequeryhandler",
        "path": "NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"
      },
      {
        "id": "17nomiq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetRelevantContextAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1yhcrn6:getrelevantcontextasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "xf30ha",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetSecureString() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1070aok:getsecurestring",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "j0a576",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetSecureString() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xwytsy:getsecurestring",
        "path": "NexusReader.UI.Shared/Services/WebStorageService.cs"
      },
      {
        "id": "1f9bifu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:swctk:getservice",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "tk47f8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GetStatusClass() has no downstream runtime path in the current graph.",
        "nodeId": "method:8ug383:getstatusclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1kqh8wj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetStatusClass() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8ug383:getstatusclass",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1l0wyio",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetStringAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19tpzwe:getstringasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "1umlz9f",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetStringAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lg6b3p:getstringasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "1mhq31g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetSummaryAndQuizAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1025f5z:getsummaryandquizasync",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "jfyqhe",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetSummaryAndQuizAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1oz3km6:getsummaryandquizasync",
        "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
      },
      {
        "id": "1v17l0c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetSummaryAndQuizAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:7pcmld:getsummaryandquizasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "2oke3k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetUserProfileQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1opd2vh:getuserprofilequery",
        "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs"
      },
      {
        "id": "1p0ou0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetUserProfileQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1u9bw06:getuserprofilequery",
        "path": "NexusReader.Application/Queries/User/GetUserProfileQuery.cs"
      },
      {
        "id": "1dztb4l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GetUserProfileQueryHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1t48k4l:getuserprofilequeryhandler",
        "path": "NexusReader.Application/Queries/User/GetUserProfileQueryHandler.cs"
      },
      {
        "id": "1wtmxy5",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GlobalIntelligencePanel has no downstream runtime path in the current graph.",
        "nodeId": "class:cps3pc:globalintelligencepanel",
        "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
      },
      {
        "id": "1hgqmkx",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GlobalIntelligencePanel has no downstream runtime path in the current graph.",
        "nodeId": "file:1niza9w:globalintelligencepanel-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
      },
      {
        "id": "7i0ma6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GlobalIntelligencePanel is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:cps3pc:globalintelligencepanel",
        "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
      },
      {
        "id": "1yupb1b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GoToChapter() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:l29i6z:gotochapter",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "1ol7ja9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GoToChapter() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:orf66k:gotochapter",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "1il8o24",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GoToNextChapter() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1jsmnk6:gotonextchapter",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "10f0cr6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GoToPreviousChapter() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lzew1d:gotopreviouschapter",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "1225jqx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GraphDataDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:g75yh:graphdatadto",
        "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs"
      },
      {
        "id": "1ar3ml5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GraphLinkDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:4tuqh6:graphlinkdto",
        "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs"
      },
      {
        "id": "inar2s",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GraphNodeDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5sl01j:graphnodedto",
        "path": "NexusReader.Application/Queries/Graph/GraphViewModels.cs"
      },
      {
        "id": "tcr8iv",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GroundednessBadge has no downstream runtime path in the current graph.",
        "nodeId": "class:3ugxc0:groundednessbadge",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1yx46fy",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "GroundednessBadge has no downstream runtime path in the current graph.",
        "nodeId": "file:108l4jq:groundednessbadge-razor",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1rh01m4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GroundednessBadge is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:3ugxc0:groundednessbadge",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "ptky75",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GroundednessRequest is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:gyab7i:groundednessrequest",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "1b0hkrc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GroundednessResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1a84if1:groundednessresult",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "1lt23g8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "GroundedResponseDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:58td3x:groundedresponsedto",
        "path": "NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"
      },
      {
        "id": "1eu8er9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Handle() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:11mh753:handle",
        "path": "NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"
      },
      {
        "id": "1tlui4n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Handle() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:7ldigq:handle",
        "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"
      },
      {
        "id": "vn0ukf",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleActionClick() has no downstream runtime path in the current graph.",
        "nodeId": "method:1naqltb:handleactionclick",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "1wy8gqg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleActionClick() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1naqltb:handleactionclick",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "1d89075",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleActiveNodeChange() has no downstream runtime path in the current graph.",
        "nodeId": "method:16kjevr:handleactivenodechange",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1wgyor8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleActiveNodeChange() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16kjevr:handleactivenodechange",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "4yhw0y",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleBlockReached() has no downstream runtime path in the current graph.",
        "nodeId": "method:1p3f1im:handleblockreached",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1dslh7z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleBlockReached() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1p3f1im:handleblockreached",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "82py8u",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleFocusSimulation() has no downstream runtime path in the current graph.",
        "nodeId": "method:qjg1lv:handlefocussimulation",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "8ezod3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleFocusSimulation() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:qjg1lv:handlefocussimulation",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1t0b5hz",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleGoogleLogin() has no downstream runtime path in the current graph.",
        "nodeId": "method:ulfoov:handlegooglelogin",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "162iiiq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleGoogleLogin() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ulfoov:handlegooglelogin",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "64eafn",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleGraphUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:14hlcms:handlegraphupdate",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1g9rmso",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleGraphUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:14hlcms:handlegraphupdate",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1iuqg3d",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleHighlightRequested() has no downstream runtime path in the current graph.",
        "nodeId": "method:1nqcmix:handlehighlightrequested",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1errl6g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleHighlightRequested() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1nqcmix:handlehighlightrequested",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "6lfyf8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleKeyUp() has no downstream runtime path in the current graph.",
        "nodeId": "method:91tjy5:handlekeyup",
        "path": "NexusReader.UI.Shared/Pages/Intelligence.razor"
      },
      {
        "id": "1gj6v5d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleKeyUp() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:91tjy5:handlekeyup",
        "path": "NexusReader.UI.Shared/Pages/Intelligence.razor"
      },
      {
        "id": "g1434u",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleLoadingChange() has no downstream runtime path in the current graph.",
        "nodeId": "method:1xjbcak:handleloadingchange",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1ywlz6d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleLoadingChange() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xjbcak:handleloadingchange",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "id30o0",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleNavigationChanged() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ac31ry:handlenavigationchanged",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "1jg9lbv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleNavigationChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ac31ry:handlenavigationchanged",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "jlsm0f",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleNodeSelected() has no downstream runtime path in the current graph.",
        "nodeId": "method:6vyv4w:handlenodeselected",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "wg2r1s",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleNodeSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:6vyv4w:handlenodeselected",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "q4fm1d",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleQuizRequestedAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ib6h4r:handlequizrequestedasync",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "c5d340",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleQuizRequestedAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ib6h4r:handlequizrequestedasync",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1g70fv3",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "handleReconnectStateChanged() has no downstream runtime path in the current graph.",
        "nodeId": "method:1n08b99:handlereconnectstatechanged",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "gs4y8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "handleReconnectStateChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1n08b99:handlereconnectstatechanged",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "ip8htd",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleScrollRequested() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ejbaxq:handlescrollrequested",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "15vhwzi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleScrollRequested() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ejbaxq:handlescrollrequested",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1i485u4",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleSelectionCleared() has no downstream runtime path in the current graph.",
        "nodeId": "method:1rioxzo:handleselectioncleared",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1gxp1jl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSelectionCleared() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1rioxzo:handleselectioncleared",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "z9gspk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSubscriptionCancellation() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:72bnlj:handlesubscriptioncancellation",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "12cpuhx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSubscriptionDeletedAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16n7wyr:handlesubscriptiondeletedasync",
        "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs"
      },
      {
        "id": "gys12c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSubscriptionSuccess() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:13xh0j3:handlesubscriptionsuccess",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "oo9rto",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSubscriptionUpdatedAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1px2su2:handlesubscriptionupdatedasync",
        "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs"
      },
      {
        "id": "1oy7ql4",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleSyncProgressReceived() has no downstream runtime path in the current graph.",
        "nodeId": "method:o7fqko:handlesyncprogressreceived",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "s4vnvz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleSyncProgressReceived() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:o7fqko:handlesyncprogressreceived",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1y1ffpn",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleTextSelected() has no downstream runtime path in the current graph.",
        "nodeId": "method:16xot65:handletextselected",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "cmun4q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleTextSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16xot65:handletextselected",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1ji61wz",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:1b8lqka:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "1cmzymo",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:1l4808t:handleupdate",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "7pg6kk",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:1m8qyhe:handleupdate",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "e7lc7q",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:1qikoos:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "13lxu3n",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpdate() has no downstream runtime path in the current graph.",
        "nodeId": "method:oj5ghm:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "dxa4ci",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1b8lqka:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "1z0t4f9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1l4808t:handleupdate",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1s33rw9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1m8qyhe:handleupdate",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "19oift3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1qikoos:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "gnvads",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpdate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:oj5ghm:handleupdate",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "6ebj03",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HandleUpgrade() has no downstream runtime path in the current graph.",
        "nodeId": "method:12nkjhc:handleupgrade",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "1iwc0ws",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HandleUpgrade() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:12nkjhc:handleupgrade",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "16l96ev",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HasNewQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pu32eo:hasnewquiz",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "17qv7wu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "hidePreloader() has no downstream runtime path in the current graph.",
        "nodeId": "method:x1z3b8:hidepreloader",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "xcceor",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "hidePreloader() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:x1z3b8:hidepreloader",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "xm8n14",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Home has no downstream runtime path in the current graph.",
        "nodeId": "class:jfh85m:home",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "1s5ofuu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Home has no downstream runtime path in the current graph.",
        "nodeId": "file:h6mj95:home-razor",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "11zm3j9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Home is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:jfh85m:home",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "mbfip9",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "HttpContext (CascadingParameter property) has no downstream runtime path in the current graph.",
        "nodeId": "method:76zo3r:httpcontext-cascadingparameter-property",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "1ul8dpg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "HttpContext (CascadingParameter property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:76zo3r:httpcontext-cascadingparameter-property",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "93b6ac",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IAsyncDisposable.DisposeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1oqk0x0:iasyncdisposable-disposeasync",
        "path": "NexusReader.UI.Shared/Services/SyncService.cs"
      },
      {
        "id": "14s0ajr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IBillingService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:dvqqtf:ibillingservice",
        "path": "NexusReader.Application/Abstractions/Services/IBillingService.cs"
      },
      {
        "id": "ncgf9q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IBookStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:gqvtnh:ibookstorageservice",
        "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
      },
      {
        "id": "1cgo9wu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ICommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:3fxux:icommand",
        "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs"
      },
      {
        "id": "h3nnjy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ICommand<TResponse> is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:l6ns3r:icommand-tresponse",
        "path": "NexusReader.Application/Abstractions/Messaging/ICommand.cs"
      },
      {
        "id": "oqnpwv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ICommandHandler<TCommand, TResponse> is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1a1s3lb:icommandhandler-tcommand-tresponse",
        "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"
      },
      {
        "id": "a7yuei",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ICommandHandler<TCommand> is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:l7ofd8:icommandhandler-tcommand",
        "path": "NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"
      },
      {
        "id": "p8yz1y",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Identity Callback (GET /identity/callback/google) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19xkg6k:identity-callback-get-identity-callback-google",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "7ifhp2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Identity Login (GET /identity/login/google) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:eni3nx:identity-login-get-identity-login-google",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "spiixe",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IdentityService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:vgua1e:identityservice",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "1pzoxla",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IdentityService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8ggznb:identityservice",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "1y8weyo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IEbookRepository is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:sv23ol:iebookrepository",
        "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
      },
      {
        "id": "unqsu8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IEpubReader is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1yqx104:iepubreader",
        "path": "NexusReader.Application/Abstractions/Services/IEpubReader.cs"
      },
      {
        "id": "ka80ij",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IFocusModeService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:16mxgid:ifocusmodeservice",
        "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
      },
      {
        "id": "1nxmpw4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IIdentityService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:udpmrx:iidentityservice",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "151p043",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IIFE — bootstrap preloader handlers() has no downstream runtime path in the current graph.",
        "nodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "1sfah12",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IIFE — bootstrap preloader handlers() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:kjs6w7:iife-bootstrap-preloader-handlers",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "17bg5c5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IInfrastructureMarker is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1y9p8ya:iinfrastructuremarker",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "19xhm0n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "INativeStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1vae1rw:inativestorageservice",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "xc5h2j",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IncreaseHashLength is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:14xe27n:increasehashlength",
        "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
      },
      {
        "id": "2sa0an",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IncreaseHashLength is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:mi743e:increasehashlength",
        "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs"
      },
      {
        "id": "omr9is",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IncreaseHashLength is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:cn85p2:increasehashlength",
        "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.cs"
      },
      {
        "id": "15v3j3h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IncreaseHashLength is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:gbavgv:increasehashlength",
        "path": "NexusReader.Data/Migrations/20260428185239_IncreaseHashLength.Designer.cs"
      },
      {
        "id": "1owyli1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InfrastructureMarker is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14djij0:infrastructuremarker",
        "path": "NexusReader.Infrastructure/DependencyInjection.cs"
      },
      {
        "id": "z2yr2g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbook (POST /api/library/ingest) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ggo2op:ingestebook-post-api-library-ingest",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "100ldhg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbookCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:byhisx:ingestebookcommand",
        "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs"
      },
      {
        "id": "1y3s6e8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbookCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:dgxlfz:ingestebookcommand",
        "path": "NexusReader.Application/Commands/Library/IngestEbookCommand.cs"
      },
      {
        "id": "c7ac03",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbookCommandHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1kfw737:ingestebookcommandhandler",
        "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs"
      },
      {
        "id": "cyk4ui",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbookCommandHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:jlw375:ingestebookcommandhandler",
        "path": "NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs"
      },
      {
        "id": "bah21h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestEbookRequest is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1eqmnca:ingestebookrequest",
        "path": "NexusReader.Application/Commands/Library/IngestEbookRequest.cs"
      },
      {
        "id": "183iomk",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IngestResult has no downstream runtime path in the current graph.",
        "nodeId": "type:1p7g8wz:ingestresult",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "164mt6l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IngestResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1p7g8wz:ingestresult",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "ajml3n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitializeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1094u9:initializeasync",
        "path": "NexusReader.UI.Shared/Services/FocusModeService.cs"
      },
      {
        "id": "1skjwp",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitializeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10p42fw:initializeasync",
        "path": "NexusReader.UI.Shared/Services/ISyncService.cs"
      },
      {
        "id": "14it0cc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitializeAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:r2rlv7:initializeasync",
        "path": "NexusReader.UI.Shared/Services/SyncService.cs"
      },
      {
        "id": "p50ifu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "InitializeGraphAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1to2smv:initializegraphasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "127skz7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitializeGraphAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1to2smv:initializegraphasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "jjjkm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitialPostgres is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1a6v1w9:initialpostgres",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs"
      },
      {
        "id": "11rydzo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitialPostgres is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1xhm2de:initialpostgres",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "ub7jw6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "InitialPostgres is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1wumbre:initialpostgres",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.Designer.cs"
      },
      {
        "id": "ikff9v",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Intelligence has no downstream runtime path in the current graph.",
        "nodeId": "file:1kjntt:intelligence-razor",
        "path": "NexusReader.UI.Shared/Pages/Intelligence.razor"
      },
      {
        "id": "1voltvl",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IntelligenceToolbar has no downstream runtime path in the current graph.",
        "nodeId": "class:nsawvo:intelligencetoolbar",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "4mnkfj",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IntelligenceToolbar has no downstream runtime path in the current graph.",
        "nodeId": "file:q33ld0:intelligencetoolbar-razor",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "vndtg6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IntelligenceToolbar is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:nsawvo:intelligencetoolbar",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "qowxa1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IQuery<TResponse> is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:4nrp60:iquery-tresponse",
        "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs"
      },
      {
        "id": "ztnrwz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IQuery<TResponse> is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:dj3u3k:iquery-tresponse",
        "path": "NexusReader.Application/Abstractions/Messaging/IQuery.cs"
      },
      {
        "id": "i5qivo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IQueryHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:tpv4sn:iqueryhandler",
        "path": "NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"
      },
      {
        "id": "pqeq8u",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IReaderNavigationService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:xd8rr7:ireadernavigationservice",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "pr0yb8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IsActive (getter) has no downstream runtime path in the current graph.",
        "nodeId": "method:1p9w1qk:isactive-getter",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "17ddj77",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsActive (getter) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1p9w1qk:isactive-getter",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "wk8lef",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsFocusModeActive() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:aocpxz:isfocusmodeactive",
        "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
      },
      {
        "id": "q66a0k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsHydrating() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1iqnx8z:ishydrating",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "lta2jd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsLightMode() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xxkfgr:islightmode",
        "path": "NexusReader.UI.Shared/Services/IThemeService.cs"
      },
      {
        "id": "2t2rni",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsLoading() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10q1pr:isloading",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "4e9k12",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "IsVisible() has no downstream runtime path in the current graph.",
        "nodeId": "method:1kikefa:isvisible",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "y939f5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IsVisible() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1kikefa:isvisible",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "qgr5kz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ISyncBroadcaster is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:dqp6wm:isyncbroadcaster",
        "path": "NexusReader.Application/Abstractions/Messaging/ISyncBroadcaster.cs"
      },
      {
        "id": "hi4rli",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ISyncService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:yxmwa5:isyncservice",
        "path": "NexusReader.UI.Shared/Services/ISyncService.cs"
      },
      {
        "id": "16gqx85",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "IThemeService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5dm37d:ithemeservice",
        "path": "NexusReader.UI.Shared/Services/IThemeService.cs"
      },
      {
        "id": "1szjsos",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "JsonRepairHelper is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:ogoid1:jsonrepairhelper",
        "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
      },
      {
        "id": "msswo8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "JsonRepairHelper is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:awil0x:jsonrepairhelper",
        "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
      },
      {
        "id": "c2qbki",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KeyConcept is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:uvv2sw:keyconcept",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "1qjm3t6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Knowledge API group mappings() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:gc2kp9:knowledge-api-group-mappings",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "1a517tz",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "KnowledgeCheck has no downstream runtime path in the current graph.",
        "nodeId": "file:yno7se:knowledgecheck-razor",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "xcg3un",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeCoordinator is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1cca8vk:knowledgecoordinator",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "ps6uyb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeCoordinator() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1b2nffa:knowledgecoordinator",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "13qf9o2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "KnowledgeGraph has no downstream runtime path in the current graph.",
        "nodeId": "class:11lr4zo:knowledgegraph",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "mkjmbu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "KnowledgeGraph has no downstream runtime path in the current graph.",
        "nodeId": "file:jo64ly:knowledgegraph-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "f88adh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeGraph is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:11lr4zo:knowledgegraph",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "g1phqg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeGraphService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:pp4157:knowledgegraphservice",
        "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
      },
      {
        "id": "zkhqh7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeLinkDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1rne00x:knowledgelinkdto",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "1mdrvnv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgePacket is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1h9lza8:knowledgepacket",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "1oz4b9y",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgePacket is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:11qfbw:knowledgepacket",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "14330qv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeRequest is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14omw7a:knowledgerequest",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "ngcz5w",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:4eprgx:knowledgeservice",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "cg6jmg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnit (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:vznymy:knowledgeunit-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "1abinlx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnit is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:fvtez6:knowledgeunit",
        "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs"
      },
      {
        "id": "as4ifr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnit is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:brf3z8:knowledgeunit",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "1htv9d1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnit is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:mla8ro:knowledgeunit",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "d6zqsd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnit is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:sahnml:knowledgeunit",
        "path": "NexusReader.Domain/Entities/KnowledgeUnit.cs"
      },
      {
        "id": "mm9csl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1bqutxs:knowledgeunitdto",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "1342fop",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLink (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:12mtiix:knowledgeunitlink-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "hu6tnn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLink is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:mqaz6:knowledgeunitlink",
        "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs"
      },
      {
        "id": "ablvvx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLink is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1nn41cx:knowledgeunitlink",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "554i5x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLink is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5xf7z1:knowledgeunitlink",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "11f8i8v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLink is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:wq74ui:knowledgeunitlink",
        "path": "NexusReader.Domain/Entities/KnowledgeUnitLink.cs"
      },
      {
        "id": "5pxhha",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLinks (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1jwlkph:knowledgeunitlinks-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1etn9xa",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitLinks (table) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1pi9458:knowledgeunitlinks-table",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "3j8eze",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnits (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:zj5uq4:knowledgeunits-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1f7m2m1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnits (table) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:19jp6ev:knowledgeunits-table",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "btjier",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "KnowledgeUnitType is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1jmw5xq:knowledgeunittype",
        "path": "NexusReader.Domain/Enums/KnowledgeUnitType.cs"
      },
      {
        "id": "1clu5af",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LastReadBookDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1g1re12:lastreadbookdto",
        "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs"
      },
      {
        "id": "mnmo2l",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Library has no downstream runtime path in the current graph.",
        "nodeId": "class:g9nkgg:library",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1rcigh",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Library has no downstream runtime path in the current graph.",
        "nodeId": "file:1uhcs2l:library-razor",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1gzxdu2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Library is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:g9nkgg:library",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1b26nbo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LocalEpubMetadata is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1vvya1l:localepubmetadata",
        "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"
      },
      {
        "id": "16fhbbm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LocalEpubMetadata is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1b16u65:localepubmetadata",
        "path": "NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"
      },
      {
        "id": "bwdci2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogGeneratingGraph() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ip44st:loggeneratinggraph",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "1ig6k01",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogGraphError() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1nzct8x:loggrapherror",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "g5vggg",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Login has no downstream runtime path in the current graph.",
        "nodeId": "class:1qurvhs:login",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "e7u4jt",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Login has no downstream runtime path in the current graph.",
        "nodeId": "file:csf9l7:login-razor",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "17j27lh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Login is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1qurvhs:login",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "1ar4way",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LoginAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ww1s1:loginasync",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "1m8jryq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LoginAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:b6asoe:loginasync",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "159nn9g",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "LoginModel has no downstream runtime path in the current graph.",
        "nodeId": "type:gqgg0k:loginmodel",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "6hs0s7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LoginModel is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:gqgg0k:loginmodel",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "11t81at",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LoginResponse is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14gvkuy:loginresponse",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "y5lnv0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogoutAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1a1t07w:logoutasync",
        "path": "NexusReader.Web/Services/ServerIdentityService.cs"
      },
      {
        "id": "1tjtdvq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogoutAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1i33wis:logoutasync",
        "path": "NexusReader.UI.Shared/Services/IdentityService.cs"
      },
      {
        "id": "wyj3f4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogoutAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:urpd77:logoutasync",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "kkmozf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogRequestingSummary() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1sfi79b:logrequestingsummary",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "dmjy04",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogSummaryError() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1z06px6:logsummaryerror",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "16f5yre",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "LogSummaryWarning() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:arton1:logsummarywarning",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "1gs5z6x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainActivity is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1ay0je3:mainactivity",
        "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs"
      },
      {
        "id": "1bkgipx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainActivity is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:4pccjy:mainactivity",
        "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs"
      },
      {
        "id": "snxksg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainApplication is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:471u2p:mainapplication",
        "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
      },
      {
        "id": "dib782",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainApplication is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1143kg0:mainapplication",
        "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
      },
      {
        "id": "166itoc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainApplication() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1281z7w:mainapplication",
        "path": "NexusReader.Maui/Platforms/Android/MainApplication.cs"
      },
      {
        "id": "1g4gd4r",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainHubLayout has no downstream runtime path in the current graph.",
        "nodeId": "class:vf4020:mainhublayout",
        "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
      },
      {
        "id": "hktcr2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainHubLayout has no downstream runtime path in the current graph.",
        "nodeId": "file:1ain1yo:mainhublayout-razor",
        "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
      },
      {
        "id": "vtig8s",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainHubLayout is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:vf4020:mainhublayout",
        "path": "NexusReader.UI.Shared/Layout/MainHubLayout.razor"
      },
      {
        "id": "icmvpd",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainPage has no downstream runtime path in the current graph.",
        "nodeId": "class:8viv8y:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "mxvr0r",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainPage has no downstream runtime path in the current graph.",
        "nodeId": "type:5wsb01:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "1bjeooc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainPage is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:8viv8y:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "az4g8k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainPage is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5wsb01:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "132hhct",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainPage.xaml has no downstream runtime path in the current graph.",
        "nodeId": "file:ua9rra:mainpage-xaml-cs",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "1chsvvo",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "MainPage() has no downstream runtime path in the current graph.",
        "nodeId": "method:6gridz:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "1pe46qv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MainPage() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:6gridz:mainpage",
        "path": "NexusReader.Maui/MainPage.xaml.cs"
      },
      {
        "id": "1pcymn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MakeKnowledgeUnitEbookIdNullable is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1gb1hzf:makeknowledgeunitebookidnullable",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
      },
      {
        "id": "1mnyotb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MakeKnowledgeUnitEbookIdNullable is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1gem37m:makeknowledgeunitebookidnullable",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs"
      },
      {
        "id": "1j3ugmn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MakeKnowledgeUnitEbookIdNullable is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1e3plwu:makeknowledgeunitebookidnullable",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
      },
      {
        "id": "tqkiv2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MakeKnowledgeUnitEbookIdNullable is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1juajpg:makeknowledgeunitebookidnullable",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.Designer.cs"
      },
      {
        "id": "nijaqo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Map Identity API (MapGroup /identity) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1rb8gnn:map-identity-api-mapgroup-identity",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "jgadml",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MapDeviceType() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:18ccdu4:mapdevicetype",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "unlgdh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MapOrientation() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:jhc678:maporientation",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "157w7f2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MappingConfig is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1lmiwem:mappingconfig",
        "path": "NexusReader.Application/Mappings/MappingConfig.cs"
      },
      {
        "id": "kxngp7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MarkQuizAsSeen() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:13pj2z1:markquizasseen",
        "path": "NexusReader.UI.Shared/Services/QuizStateService.cs"
      },
      {
        "id": "2v0t6x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MarkQuizAsSeen() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:2bqrkc:markquizasseen",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "10rfrjd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiProgram is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1e8p0hy:mauiprogram",
        "path": "NexusReader.Maui/MauiProgram.cs"
      },
      {
        "id": "11xc6xx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiProgram is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1dhxtbx:mauiprogram",
        "path": "NexusReader.Maui/MauiProgram.cs"
      },
      {
        "id": "152dyaj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:18xcrf7:mauistorageservice",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "15vs65s",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:jm4wx0:mauistorageservice",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
      },
      {
        "id": "ao7m37",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1nbofxi:mauistorageservice",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiStorageService.cs"
      },
      {
        "id": "ga5d89",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MauiStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:f4i93d:mauistorageservice",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "1myacqa",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "MetadataExtractor.ExtractMetadataAsync(memoryStream) -> result (IsSuccess / Value / Errors) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:od15wz:metadataextractor-extractmetadataasync-memorystr"
      },
      {
        "id": "14xf1rl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Microsoft.AspNetCore.Identity.IdentityRole is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:hhlqtu:microsoft-aspnetcore-identity-identityrole",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "opv96q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NativeStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5hfl1o:nativestorageservice",
        "path": "NexusReader.Web/Services/NativeStorageService.cs"
      },
      {
        "id": "zsrxug",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NativeStorageService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:4dh69s:nativestorageservice",
        "path": "NexusReader.Web/Services/NativeStorageService.cs"
      },
      {
        "id": "1ey6y2w",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NavigateToBook() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1la3caq:navigatetobook",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "1x3n659",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusAuthenticationStateProvider is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1yjf0sw:nexusauthenticationstateprovider",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "njvv3m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusAuthenticationStateProvider is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1rcw5yd:nexusauthenticationstateprovider",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "16y4tjy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusAuthenticationStateProvider() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:15b2jq7:nexusauthenticationstateprovider",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "pgplm9",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusButton has no downstream runtime path in the current graph.",
        "nodeId": "file:1bp3my2:nexusbutton-razor",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
      },
      {
        "id": "1imj5kh",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusButton parameters (component props) has no downstream runtime path in the current graph.",
        "nodeId": "type:120koss:nexusbutton-parameters-component-props",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
      },
      {
        "id": "1wc06c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusButton parameters (component props) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:120koss:nexusbutton-parameters-component-props",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
      },
      {
        "id": "1v53nlj",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusIcon (component parameters) has no downstream runtime path in the current graph.",
        "nodeId": "type:1wz8rxq:nexusicon-component-parameters",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "sowm8a",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusIcon (component parameters) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1wz8rxq:nexusicon-component-parameters",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "97f1vu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusIcon has no downstream runtime path in the current graph.",
        "nodeId": "class:rzlm6n:nexusicon",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "1f2dl3w",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusIcon has no downstream runtime path in the current graph.",
        "nodeId": "file:q8opk3:nexusicon-razor",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "1j5tuzt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusIcon is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:rzlm6n:nexusicon",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "832q6e",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.Ebook is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:7ob3p3:nexusreader-domain-entities-ebook",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "1ermima",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.KnowledgeUnit is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:13day2p:nexusreader-domain-entities-knowledgeunit",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "16mwinh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.KnowledgeUnitLink is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:9y8b30:nexusreader-domain-entities-knowledgeunitlink",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "pm7eoy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.NexusUser is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:15ow7t1:nexusreader-domain-entities-nexususer",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "jcg6cm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.QuizResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:6xl8d4:nexusreader-domain-entities-quizresult",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "avt4qe",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:30kk08:nexusreader-domain-entities-semanticknowledgecac",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "jsegd8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusReader.Domain.Entities.SubscriptionPlan is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14w07kf:nexusreader-domain-entities-subscriptionplan",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.Designer.cs"
      },
      {
        "id": "sf2nyq",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusReader.UI.Shared has no downstream runtime path in the current graph.",
        "nodeId": "file:69lwdf:nexusreader-ui-shared-csproj",
        "path": "NexusReader.UI.Shared/NexusReader.UI.Shared.csproj"
      },
      {
        "id": "187zvfs",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusSearchBox (component) has no downstream runtime path in the current graph.",
        "nodeId": "type:1tp07fo:nexussearchbox-component",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "1pgcd0d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusSearchBox (component) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1tp07fo:nexussearchbox-component",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "63qc1s",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusSearchBox has no downstream runtime path in the current graph.",
        "nodeId": "class:c49vab:nexussearchbox",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "jzdamy",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusSearchBox has no downstream runtime path in the current graph.",
        "nodeId": "file:igeyi7:nexussearchbox-razor",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "1szmtld",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusSearchBox is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:c49vab:nexussearchbox",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusSearchBox.razor"
      },
      {
        "id": "1mseo5a",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusTypography has no downstream runtime path in the current graph.",
        "nodeId": "class:vspg7j:nexustypography",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "74z45t",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NexusTypography has no downstream runtime path in the current graph.",
        "nodeId": "file:184ajmn:nexustypography-razor",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "wd7z9t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusTypography is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:vspg7j:nexustypography",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "ojgujg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser (entity mapping) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1dtv9c0:nexususer-entity-mapping",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "4c5c18",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1p6mlsn:nexususer-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "1jgl56",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:q7xqjm:nexususer",
        "path": "NexusReader.Domain/Entities/NexusUser.cs"
      },
      {
        "id": "3lz2c4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:16wzuux:nexususer",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "he0s5i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1fmha7h:nexususer",
        "path": "NexusReader.Domain/Entities/NexusUser.cs"
      },
      {
        "id": "brja7z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NexusUser is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:bldst0:nexususer",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "1dq7y9u",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Normalize() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1e84qm4:normalize",
        "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
      },
      {
        "id": "1ayjojt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NormalizeAuthor is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1j6dl20:normalizeauthor",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
      },
      {
        "id": "2ce0d2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NormalizeAuthor is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1l7wkbd:normalizeauthor",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "t9pu9g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NormalizeAuthor is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1p2z625:normalizeauthor",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
      },
      {
        "id": "wcxd0g",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "NotFound has no downstream runtime path in the current graph.",
        "nodeId": "file:13jb3vh:notfound-razor",
        "path": "NexusReader.UI.Shared/Pages/NotFound.razor"
      },
      {
        "id": "1rcxqi8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NotifyNodeSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1r1tcl2:notifynodeselected",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "fc86v8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NotifyNodeSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:qegcuf:notifynodeselected",
        "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
      },
      {
        "id": "10o1l2m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NotifyUserAuthentication() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1csperg:notifyuserauthentication",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "13rl4d7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "NotifyUserLogout() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ppivt7:notifyuserlogout",
        "path": "NexusReader.UI.Shared/Services/NexusAuthenticationStateProvider.cs"
      },
      {
        "id": "1krm1wo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnActiveNodeChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1d2tbk0:onactivenodechanged",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "1qt4dxc",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1bl306q:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "cgi2wk",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1cayj92:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1fcnfyr",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1nedo1:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "10aqfuh",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:bktx49:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1wklmy4",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:qspmus:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "11rired",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1bl306q:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "4ny9ip",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1cayj92:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1di64no",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1nedo1:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "yysz6m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:bktx49:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1sq78rz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnAfterRenderAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:qspmus:onafterrenderasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "vfacmi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnBlockReachedAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pdmx9l:onblockreachedasync",
        "path": "NexusReader.UI.Shared/Services/KnowledgeCoordinator.cs"
      },
      {
        "id": "1h9fbll",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnConfiguring() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1wn8qlw:onconfiguring",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "d8iv12",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnCreate() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:t9hn2c:oncreate",
        "path": "NexusReader.Maui/Platforms/Android/MainActivity.cs"
      },
      {
        "id": "ja9jpx",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnDragEnter() has no downstream runtime path in the current graph.",
        "nodeId": "method:1u9mlsa:ondragenter",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "hr9zha",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnDragEnter() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1u9mlsa:ondragenter",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "be3v2j",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnDragLeave() has no downstream runtime path in the current graph.",
        "nodeId": "method:6bf66s:ondragleave",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "fgqgo6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnDragLeave() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:6bf66s:ondragleave",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1dvfbkk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnFocusModeChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:dzihxd:onfocusmodechanged",
        "path": "NexusReader.UI.Shared/Services/IFocusModeService.cs"
      },
      {
        "id": "13z4fxa",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnGraphUpdated() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:88y0cc:ongraphupdated",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "1laob8o",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnHighlightBlockRequested() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:15b21oe:onhighlightblockrequested",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "1tjpzve",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:13emvrm:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "1qbv7x0",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ari3ha:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1b4uw55",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ef8df:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "1rdy4p",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:1se6qsi:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "139x5ta",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:1v0viho:oninitialized",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "27lie9",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:1yypduz:oninitialized",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "108uy9a",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:7gn3l8:oninitialized",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "1if0ll7",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitialized() has no downstream runtime path in the current graph.",
        "nodeId": "method:fu1sr5:oninitialized",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "l2tzh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:13emvrm:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Molecules/KnowledgeCheck.razor"
      },
      {
        "id": "mycpov",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ari3ha:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1kz7b74",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ef8df:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Molecules/IntelligenceToolbar.razor"
      },
      {
        "id": "l7tw3u",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1se6qsi:oninitialized",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "1ibcl8x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1v0viho:oninitialized",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "f3lk1a",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1yypduz:oninitialized",
        "path": "NexusReader.UI.Shared/Pages/Home.razor"
      },
      {
        "id": "7azoz3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:7gn3l8:oninitialized",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "1gyoyde",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitialized() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:fu1sr5:oninitialized",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "682l2g",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnInitializedAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:1pp2oro:oninitializedasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "tppwx5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnInitializedAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pp2oro:oninitializedasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "yfew7e",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnLoadingChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1qc1jbv:onloadingchanged",
        "path": "NexusReader.UI.Shared/Services/IKnowledgeGraphService.cs"
      },
      {
        "id": "1xnepr1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnModelCreating() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1of3kqt:onmodelcreating",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "2oipxl",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnNavigationChanged() has no downstream runtime path in the current graph.",
        "nodeId": "method:1k0kfjg:onnavigationchanged",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1seidk2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnNavigationChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1d0xirt:onnavigationchanged",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "t5oyuu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnNavigationChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1k0kfjg:onnavigationchanged",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1c94tyu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnNodeClicked() has no downstream runtime path in the current graph.",
        "nodeId": "method:66cucs:onnodeclicked",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1o2d5yn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnNodeClicked() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:66cucs:onnodeclicked",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "3slp4r",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnNodeSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:mhcg2e:onnodeselected",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "137k36u",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnParametersSet() has no downstream runtime path in the current graph.",
        "nodeId": "method:gfuk2l:onparametersset",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1e2sybq",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnParametersSet() has no downstream runtime path in the current graph.",
        "nodeId": "method:ilkln5:onparametersset",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "194qfjb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnParametersSet() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:gfuk2l:onparametersset",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "dh4l93",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnParametersSet() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ilkln5:onparametersset",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "16sjygu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnParametersSetAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:16cvbhq:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "1iqji6w",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnParametersSetAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:etczkb:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "vz2cqd",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OnParametersSetAsync() has no downstream runtime path in the current graph.",
        "nodeId": "method:mes1h8:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1wf54xn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnParametersSetAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:16cvbhq:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/AiAssistantBubble.razor"
      },
      {
        "id": "r6qbd7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnParametersSetAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:etczkb:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "118xgcy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnParametersSetAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:mes1h8:onparameterssetasync",
        "path": "NexusReader.UI.Shared/Components/Molecules/GroundednessBadge.razor"
      },
      {
        "id": "1wjzyrs",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnProgressReceived() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:pqi00v:onprogressreceived",
        "path": "NexusReader.UI.Shared/Services/ISyncService.cs"
      },
      {
        "id": "11dak7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnQuizRequested() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1s6rrbj:onquizrequested",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "rvvbn0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnQuizUpdated() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pa87x9:onquizupdated",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "1iycdac",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnScrollToBlockRequested() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ecn87d:onscrolltoblockrequested",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "cvgvj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnStateInvalidated() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:d5t49u:onstateinvalidated",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "1xu0el3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnTextSelected() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:18zc3my:ontextselected",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "1mlh6v0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OnThemeChanged() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1fw96o1:onthemechanged",
        "path": "NexusReader.UI.Shared/Services/IThemeService.cs"
      },
      {
        "id": "1pqbhty",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "OpenBook() has no downstream runtime path in the current graph.",
        "nodeId": "method:8gksn2:openbook",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "plzcmd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "OpenBook() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8gksn2:openbook",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "16wdfw9",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "PanelStyle() has no downstream runtime path in the current graph.",
        "nodeId": "method:8m5lws:panelstyle",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "955u9i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PanelStyle() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8m5lws:panelstyle",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "1vasgmu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Percentage (getter) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ml3mse:percentage-getter",
        "path": "NexusReader.Domain/Entities/QuizResult.cs"
      },
      {
        "id": "bvet53",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PlanConstants is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:59bgj0:planconstants",
        "path": "NexusReader.Application/Constants/PlanConstants.cs"
      },
      {
        "id": "1u5ywd9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PlanConstants is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1l8om0z:planconstants",
        "path": "NexusReader.Application/Constants/PlanConstants.cs"
      },
      {
        "id": "cd1lta",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "PositionBelow() has no downstream runtime path in the current graph.",
        "nodeId": "method:1g73g8y:positionbelow",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "1si8z5p",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PositionBelow() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1g73g8y:positionbelow",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "1ryhxtf",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Profile has no downstream runtime path in the current graph.",
        "nodeId": "file:11crtur:profile-razor",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "12w9hiu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Program (top-level) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1c802h4:program-top-level",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "etqs9a",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PromptRegistry is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1x9y5vk:promptregistry",
        "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs"
      },
      {
        "id": "11vlmd6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "PromptRegistry is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:16wdv5z:promptregistry",
        "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs"
      },
      {
        "id": "tx9m6l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ProUserHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1hxasb:prouserhandler",
        "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs"
      },
      {
        "id": "b6v0so",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ProUserHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1va0nah:prouserhandler",
        "path": "NexusReader.Application/Security/Authorization/ProUserHandler.cs"
      },
      {
        "id": "14a5419",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ProUserRequirement is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:42ukrv:prouserrequirement",
        "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs"
      },
      {
        "id": "to6js",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ProUserRequirement is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:11vxpr5:prouserrequirement",
        "path": "NexusReader.Application/Security/Authorization/ProUserRequirement.cs"
      },
      {
        "id": "xgdldv",
        "kind": "publisher-without-consumer",
        "severity": "warn",
        "summary": "publish Implementation should raise OnGraphUpdated/OnActiveNodeChanged/OnLoadingChanged as appropriate after clearing. is published but has no consumer edge in the current graph.",
        "nodeId": "event:tkjlxe:implementation-should-raise-ongraphupdated-onact"
      },
      {
        "id": "eq84hc",
        "kind": "publisher-without-consumer",
        "severity": "warn",
        "summary": "publish Implementation should trigger OnActiveNodeChanged with nodeId after change. is published but has no consumer edge in the current graph.",
        "nodeId": "event:jny8e8:implementation-should-trigger-onactivenodechange"
      },
      {
        "id": "7z0qu7",
        "kind": "publisher-without-consumer",
        "severity": "warn",
        "summary": "publish Implementation should trigger OnGraphUpdated after updating state. is published but has no consumer edge in the current graph.",
        "nodeId": "event:1mffawr:implementation-should-trigger-ongraphupdated-aft"
      },
      {
        "id": "1u8oir0",
        "kind": "publisher-without-consumer",
        "severity": "warn",
        "summary": "publish Implementation should trigger OnLoadingChanged with the new boolean value. is published but has no consumer edge in the current graph.",
        "nodeId": "event:1qjyz5n:implementation-should-trigger-onloadingchanged-w"
      },
      {
        "id": "i3lz2v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1mrj3g3:quizdto",
        "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs"
      },
      {
        "id": "1td24xu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizQuestion is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1nt1924:quizquestion",
        "path": "NexusReader.Application/DTOs/AI/KnowledgePacket.cs"
      },
      {
        "id": "1udfngh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizQuestionDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5b8im:quizquestiondto",
        "path": "NexusReader.Application/Queries/Quiz/QuizViewModels.cs"
      },
      {
        "id": "1dqvybg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult (entity mapping) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:ffgofm:quizresult-entity-mapping",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "14kx099",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:xrqv0u:quizresult-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "glqkh0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:xbp5rm:quizresult",
        "path": "NexusReader.Domain/Entities/QuizResult.cs"
      },
      {
        "id": "8ef9zk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1j77tf7:quizresult",
        "path": "NexusReader.Domain/Entities/QuizResult.cs"
      },
      {
        "id": "1me1ipe",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:d7ymkn:quizresult",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "edq6f9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResult is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:n866i0:quizresult",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "303zyg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResults (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:w8lt4l:quizresults-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1tfdvni",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizResults (table schema) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1tv21lf:quizresults-table-schema",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
      },
      {
        "id": "6hu79z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "QuizStateService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:n36vet:quizstateservice",
        "path": "NexusReader.UI.Shared/Services/QuizStateService.cs"
      },
      {
        "id": "1bdk79y",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderCanvas has no downstream runtime path in the current graph.",
        "nodeId": "class:scmh0y:readercanvas",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "16ykyk8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderCanvas has no downstream runtime path in the current graph.",
        "nodeId": "file:3sb16d:readercanvas-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1jfq7vn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ReaderCanvas is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:scmh0y:readercanvas",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderCanvas.razor"
      },
      {
        "id": "1bzn5j1",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderFooter has no downstream runtime path in the current graph.",
        "nodeId": "class:gqmtg:readerfooter",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "1eihldw",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderFooter has no downstream runtime path in the current graph.",
        "nodeId": "file:1foudu6:readerfooter-razor",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "6on91i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ReaderFooter is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:gqmtg:readerfooter",
        "path": "NexusReader.UI.Shared/Components/Organisms/ReaderFooter.razor"
      },
      {
        "id": "1jf1r3i",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderLayout has no downstream runtime path in the current graph.",
        "nodeId": "class:15qe4r2:readerlayout",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "187lswu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReaderLayout has no downstream runtime path in the current graph.",
        "nodeId": "file:mm1vnb:readerlayout-razor",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "kanjr1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ReaderLayout is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:15qe4r2:readerlayout",
        "path": "NexusReader.UI.Shared/Layout/ReaderLayout.razor"
      },
      {
        "id": "140pwfa",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ReaderNavigationService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19botw9:readernavigationservice",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "1dgjjs6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ReaderPageViewModel is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:6l0ozw:readerpageviewmodel",
        "path": "NexusReader.Application/Queries/Reader/ViewModels.cs"
      },
      {
        "id": "v99ix9",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReconnectModal has no downstream runtime path in the current graph.",
        "nodeId": "file:uzi8zg:reconnectmodal-razor",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor"
      },
      {
        "id": "13d7lp5",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ReconnectModal.razor has no downstream runtime path in the current graph.",
        "nodeId": "file:1wkle85:reconnectmodal-razor-js",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "vsias3",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "RedirectToLogin has no downstream runtime path in the current graph.",
        "nodeId": "file:82rsqa:redirecttologin-razor",
        "path": "NexusReader.UI.Shared/Components/RedirectToLogin.razor"
      },
      {
        "id": "10kh6av",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "RefreshLibrary() has no downstream runtime path in the current graph.",
        "nodeId": "method:1ffpsuv:refreshlibrary",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1ei9aym",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RefreshLibrary() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ffpsuv:refreshlibrary",
        "path": "NexusReader.UI.Shared/Pages/Library.razor"
      },
      {
        "id": "1kx9q4m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RefreshTokenAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1gbqw83:refreshtokenasync",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "1wrq2n3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RefreshTokenAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:pcq8ik:refreshtokenasync",
        "path": "NexusReader.Web/Services/ServerIdentityService.cs"
      },
      {
        "id": "zuchbj",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Register has no downstream runtime path in the current graph.",
        "nodeId": "file:1hn70tz:register-razor",
        "path": "NexusReader.UI.Shared/Pages/Account/Register.razor"
      },
      {
        "id": "13123jl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RegisterAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:12nj2l:registerasync",
        "path": "NexusReader.Application/Abstractions/Services/IIdentityService.cs"
      },
      {
        "id": "z2dow8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "RegisterModel has no downstream runtime path in the current graph.",
        "nodeId": "type:gonkkw:registermodel",
        "path": "NexusReader.UI.Shared/Pages/Account/Register.razor"
      },
      {
        "id": "1stvaox",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RegisterModel is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:gonkkw:registermodel",
        "path": "NexusReader.UI.Shared/Pages/Account/Register.razor"
      },
      {
        "id": "11ur061",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RelevantContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1wekmss:relevantcontext",
        "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs"
      },
      {
        "id": "1ga3ej",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RelevantContext is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:hegy2r:relevantcontext",
        "path": "NexusReader.Application/DTOs/AI/RelevantContext.cs"
      },
      {
        "id": "11h5ql",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1jbr3bv:removeasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "1rqa0hq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ne3mm3:removeasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "1bmn46z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveSecureAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1bx0ikl:removesecureasync",
        "path": "NexusReader.UI.Shared/Services/WebStorageService.cs"
      },
      {
        "id": "1ogz7u3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveSecureAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1k49ns3:removesecureasync",
        "path": "NexusReader.Web/Services/NativeStorageService.cs"
      },
      {
        "id": "1t3bv5t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveSecureAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1rgip6d:removesecureasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "2f0542",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RemoveSecureAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:xfwbbe:removesecureasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "fdbi9r",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (component markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:1bnazn2:render-component-markup",
        "path": "NexusReader.UI.Shared/Routes.razor"
      },
      {
        "id": "1c58hr2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (component markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:4skxop:render-component-markup",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
      },
      {
        "id": "1bo58in",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (component markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:cylg7j:render-component-markup",
        "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
      },
      {
        "id": "r70iew",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (component markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:u5zr3n:render-component-markup",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "1h8fsuw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (component markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1bnazn2:render-component-markup",
        "path": "NexusReader.UI.Shared/Routes.razor"
      },
      {
        "id": "15443j",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (component markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:4skxop:render-component-markup",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusButton.razor"
      },
      {
        "id": "18aeh1i",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (component markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cylg7j:render-component-markup",
        "path": "NexusReader.UI.Shared/Components/Organisms/GlobalIntelligencePanel.razor"
      },
      {
        "id": "ruy1wt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (component markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:u5zr3n:render-component-markup",
        "path": "NexusReader.Web/Components/Error.razor"
      },
      {
        "id": "10kxz24",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:hkgxib:render-markup",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "gcu3n9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:hkgxib:render-markup",
        "path": "NexusReader.UI.Shared/Pages/Account/Profile.razor"
      },
      {
        "id": "1wqd6a7",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (razor markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:boip8u:render-razor-markup",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "kxh0ly",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (Razor markup) has no downstream runtime path in the current graph.",
        "nodeId": "method:lwiyp5:render-razor-markup",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "klrx8m",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (razor markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:boip8u:render-razor-markup",
        "path": "NexusReader.Web/Components/App.razor"
      },
      {
        "id": "5pht4b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (Razor markup) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:lwiyp5:render-razor-markup",
        "path": "NexusReader.UI.Shared/Components/Organisms/CurrentReadingWidget.razor"
      },
      {
        "id": "qgeh47",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render (Razor template / component render) has no downstream runtime path in the current graph.",
        "nodeId": "method:viikop:render-razor-template-component-render",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "mvl38g",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render (Razor template / component render) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:viikop:render-razor-template-component-render",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusIcon.razor"
      },
      {
        "id": "wq1msn",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Render: conditional RequestId block() has no downstream runtime path in the current graph.",
        "nodeId": "method:1oj8i7o:render-conditional-requestid-block",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "11cir22",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Render: conditional RequestId block() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1oj8i7o:render-conditional-requestid-block",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "cp58oz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Repair() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1diht7t:repair",
        "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
      },
      {
        "id": "19galq1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestHighlightBlock() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lb2q26:requesthighlightblock",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "bbrc68",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestHighlightBlock() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1om56u0:requesthighlightblock",
        "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
      },
      {
        "id": "phv4gz",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "RequestId (backing state) has no downstream runtime path in the current graph.",
        "nodeId": "method:1jr0xbp:requestid-backing-state",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "1xzr1mg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestId (backing state) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1jr0xbp:requestid-backing-state",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "1bdqsve",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8psub5:requestquiz",
        "path": "NexusReader.UI.Shared/Services/QuizStateService.cs"
      },
      {
        "id": "184k8g6",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:tuoc3y:requestquiz",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "8rhrke",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestScrollToBlock() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:iyd7fv:requestscrolltoblock",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "1wjtx2b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "RequestScrollToBlock() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:nvgthi:requestscrolltoblock",
        "path": "NexusReader.UI.Shared/Services/ReaderInteractionService.cs"
      },
      {
        "id": "1tu9qv8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Reset() has no downstream runtime path in the current graph.",
        "nodeId": "method:d54w6c:reset",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "1bw8dr1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Reset() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:d54w6c:reset",
        "path": "NexusReader.UI.Shared/Components/Organisms/BookIngestionModal.razor"
      },
      {
        "id": "at0aw9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ResolvePath() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:fxyqm0:resolvepath",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "1f664s",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "resume() has no downstream runtime path in the current graph.",
        "nodeId": "method:12nt8as:resume",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "18hvk3h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "resume() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:12nt8as:resume",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "k0sdmh",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "retry() has no downstream runtime path in the current graph.",
        "nodeId": "method:mdoq3y:retry",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "qpy2a8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "retry() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:mdoq3y:retry",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "2tql5f",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "retryWhenDocumentBecomesVisible() has no downstream runtime path in the current graph.",
        "nodeId": "method:1js2qbs:retrywhendocumentbecomesvisible",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "6epvvg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "retryWhenDocumentBecomesVisible() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1js2qbs:retrywhendocumentbecomesvisible",
        "path": "NexusReader.UI.Shared/Layout/ReconnectModal.razor.js"
      },
      {
        "id": "noggd",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Returns result of _knowledgeService.AskQuestionAsync(...) is isolated from runtime edges in the V5 graph.",
        "nodeId": "external:1p27t29:returns-result-of-knowledgeservice-askquestionas"
      },
      {
        "id": "1vbrhd2",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Routes has no downstream runtime path in the current graph.",
        "nodeId": "class:19wn0m3:routes",
        "path": "NexusReader.UI.Shared/Routes.razor"
      },
      {
        "id": "144gmmm",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Routes has no downstream runtime path in the current graph.",
        "nodeId": "file:1sm6kjd:routes-razor",
        "path": "NexusReader.UI.Shared/Routes.razor"
      },
      {
        "id": "1klxm7x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Routes is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:19wn0m3:routes",
        "path": "NexusReader.UI.Shared/Routes.razor"
      },
      {
        "id": "jnxde9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SanitizeParagraph() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1mthy2:sanitizeparagraph",
        "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      },
      {
        "id": "293341",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:18714ak:saveboolasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "fs2nac",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19ghosy:saveboolasync",
        "path": "NexusReader.Web/Services/NativeStorageService.cs"
      },
      {
        "id": "1fl4c2d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8lkc9b:saveboolasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "c2002b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveBoolAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:hj2kxb:saveboolasync",
        "path": "NexusReader.UI.Shared/Services/WebStorageService.cs"
      },
      {
        "id": "129jvpz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveChangesAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:grwwrg:savechangesasync",
        "path": "NexusReader.Application/Abstractions/Persistence/IEbookRepository.cs"
      },
      {
        "id": "8lw5ub",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveChangesAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:xqcyw0:savechangesasync",
        "path": "NexusReader.Infrastructure/Persistence/EbookRepository.cs"
      },
      {
        "id": "1iqsw58",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync (byte[]) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:161c21f:savecoverasync-byte",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "h04f2o",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync (Stream) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xlrbb1:savecoverasync-stream",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "n5p02h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1o0t990:savecoverasync",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "pbl3lw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ouv7tw:savecoverasync",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "ubzokp",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pww9i7:savecoverasync",
        "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
      },
      {
        "id": "196em7q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveCoverAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1sosafx:savecoverasync",
        "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
      },
      {
        "id": "1c72z2z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync (byte[]) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:9ytc6k:saveebookasync-byte",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1jy8qv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync (Stream) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:k4xtk2:saveebookasync-stream",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "14w7e9z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1bjnsl7:saveebookasync",
        "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
      },
      {
        "id": "187agm8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1cxlt22:saveebookasync",
        "path": "NexusReader.Application/Abstractions/Services/IBookStorageService.cs"
      },
      {
        "id": "14ua3yh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1iw78py:saveebookasync",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "132sxbr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveEbookAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:mpmpcx:saveebookasync",
        "path": "NexusReader.Infrastructure/Services/BookStorageService.cs"
      },
      {
        "id": "1dcu6nf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveSecureString() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10perg:savesecurestring",
        "path": "NexusReader.Web/Services/NativeStorageService.cs"
      },
      {
        "id": "1k66il0",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveSecureString() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ly29k7:savesecurestring",
        "path": "NexusReader.UI.Shared/Services/WebStorageService.cs"
      },
      {
        "id": "cl4ald",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveSecureString() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:zxocvw:savesecurestring",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "1es3ihx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveStringAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1wrq6fu:savestringasync",
        "path": "NexusReader.Application/Abstractions/Services/INativeStorageService.cs"
      },
      {
        "id": "69k637",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SaveStringAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:lftqc:savestringasync",
        "path": "NexusReader.Maui/Services/MauiStorageService.cs"
      },
      {
        "id": "8zaoqq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SearchLibrarySemanticallyAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1odjeej:searchlibrarysemanticallyasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "cve6gb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SearchLibrarySemanticallyQuery is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:17161bt:searchlibrarysemanticallyquery",
        "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
      },
      {
        "id": "4bfs4b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SearchLibrarySemanticallyQueryHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:165f8vd:searchlibrarysemanticallyqueryhandler",
        "path": "NexusReader.Application/Queries/Library/SearchLibrarySemanticallyQuery.cs"
      },
      {
        "id": "1bg5arp",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "SelectionAiPanel has no downstream runtime path in the current graph.",
        "nodeId": "class:5wh0z0:selectionaipanel",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "1py7pp8",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "SelectionAiPanel has no downstream runtime path in the current graph.",
        "nodeId": "file:1ez5kuw:selectionaipanel-razor",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "16pnov8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SelectionAiPanel is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:5wh0z0:selectionaipanel",
        "path": "NexusReader.UI.Shared/Components/Molecules/SelectionAiPanel.razor"
      },
      {
        "id": "1jib08l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SelectionCoordinates is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:14glqwn:selectioncoordinates",
        "path": "NexusReader.UI.Shared/Services/IReaderInteractionService.cs"
      },
      {
        "id": "1s9w8mh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1v6tqnu:semanticknowledgecache-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "1lxdlos",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache (entity mapping) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1agxbak:semanticknowledgecache-entity-mapping",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"
      },
      {
        "id": "1clhpiw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1w5eq5k:semanticknowledgecache-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "98suu9",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:e0216a:semanticknowledgecache",
        "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"
      },
      {
        "id": "bum0tb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:10b7z70:semanticknowledgecache",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "8n5ini",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1gdonul:semanticknowledgecache",
        "path": "NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"
      },
      {
        "id": "1v5rh9l",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:4o1nar:semanticknowledgecache",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "uab0q2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticKnowledgeCache is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:nk74zf:semanticknowledgecache",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "np1x1u",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticSearchRequest is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:i2x134:semanticsearchrequest",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "rqk6kt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticSearchResultDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1lzvao4:semanticsearchresultdto",
        "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"
      },
      {
        "id": "1tsuns7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SemanticSearchResultDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1qfkwqz:semanticsearchresultdto",
        "path": "NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"
      },
      {
        "id": "1ft0m1c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ServerIdentityService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1l2fmrv:serveridentityservice",
        "path": "NexusReader.Web/Services/ServerIdentityService.cs"
      },
      {
        "id": "uu7dyh",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ServerIdentityService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:icuddu:serveridentityservice",
        "path": "NexusReader.Web/Services/ServerIdentityService.cs"
      },
      {
        "id": "qyuaci",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetActiveNode() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ii06co:setactivenode",
        "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
      },
      {
        "id": "13d0wsy",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetBook() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ecwzho:setbook",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "1r08hco",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetHydrating() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:gisz9i:sethydrating",
        "path": "NexusReader.UI.Shared/Services/QuizStateService.cs"
      },
      {
        "id": "wl8e3b",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetHydrating() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:pd4yo:sethydrating",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "19pef5c",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetLoading() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:90e1ug:setloading",
        "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
      },
      {
        "id": "h3raed",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:5hhpkw:setquiz",
        "path": "NexusReader.UI.Shared/Services/IQuizStateService.cs"
      },
      {
        "id": "1yd9s6z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SetQuiz() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:o6n51:setquiz",
        "path": "NexusReader.UI.Shared/Services/QuizStateService.cs"
      },
      {
        "id": "a5gl6w",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "Settings has no downstream runtime path in the current graph.",
        "nodeId": "file:1mpguez:settings-razor",
        "path": "NexusReader.UI.Shared/Pages/Settings.razor"
      },
      {
        "id": "1boc9bp",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ShowRequestId (computed property) has no downstream runtime path in the current graph.",
        "nodeId": "method:z2iy0h:showrequestid-computed-property",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "j7w1zo",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ShowRequestId (computed property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:z2iy0h:showrequestid-computed-property",
        "path": "NexusReader.Web/Components/Pages/Error.razor"
      },
      {
        "id": "uweni1",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SignalRSyncBroadcaster is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1lq0yf5:signalrsyncbroadcaster",
        "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
      },
      {
        "id": "dhv2lg",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SignalRSyncBroadcaster() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1mtzd71:signalrsyncbroadcaster",
        "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
      },
      {
        "id": "wob8bc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "StorageKeys is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1mgndci:storagekeys",
        "path": "NexusReader.Application/Constants/StorageKeys.cs"
      },
      {
        "id": "j24q2k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "StorageKeys is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:7t3l5d:storagekeys",
        "path": "NexusReader.Application/Constants/StorageKeys.cs"
      },
      {
        "id": "1s05670",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "StripeSettings is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1mqu7tw:stripesettings",
        "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
      },
      {
        "id": "rig8iq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "StripeSettings is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:mcoiln:stripesettings",
        "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
      },
      {
        "id": "uqgm15",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "StripeWebhook (POST /api/StripeWebhook) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8lc46f:stripewebhook-post-api-stripewebhook",
        "path": "NexusReader.Web/Program.cs"
      },
      {
        "id": "1dfg3sj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubmitAnswerCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:cmiilf:submitanswercommand",
        "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"
      },
      {
        "id": "zgc3bt",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubmitAnswerCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:dvy3sa:submitanswercommand",
        "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"
      },
      {
        "id": "ckexwz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubmitAnswerCommandHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:andjgd:submitanswercommandhandler",
        "path": "NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"
      },
      {
        "id": "1fc5pa7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlan (model configured) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:mrafiy:subscriptionplan-model-configured",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.Designer.cs"
      },
      {
        "id": "1f0rp3k",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlan is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1ajhp9e:subscriptionplan",
        "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs"
      },
      {
        "id": "gflnjf",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlan is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1cvgax3:subscriptionplan",
        "path": "NexusReader.Domain/Entities/SubscriptionPlan.cs"
      },
      {
        "id": "xurg0p",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlan is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1djp2cc:subscriptionplan",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "1jlxdu3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlan is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:brf48c:subscriptionplan",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.Designer.cs"
      },
      {
        "id": "11p2yti",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlanDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1r9yuyl:subscriptionplandto",
        "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"
      },
      {
        "id": "y65kal",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlanDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:2f6m0y:subscriptionplandto",
        "path": "NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"
      },
      {
        "id": "wuhx72",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlans (DbSet property) is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cusclc:subscriptionplans-dbset-property",
        "path": "NexusReader.Data/Persistence/AppDbContext.cs"
      },
      {
        "id": "16qsij2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SubscriptionPlans (table) is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:11syh06:subscriptionplans-table",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "ipvo1h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SyncHub is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:154519v:synchub",
        "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
      },
      {
        "id": "12pji0h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SyncHub is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:wpqby2:synchub",
        "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
      },
      {
        "id": "c94jql",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SyncHub() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:vlrx66:synchub",
        "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs"
      },
      {
        "id": "1c3zzv7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SyncService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1sbj28q:syncservice",
        "path": "NexusReader.UI.Shared/Services/SyncService.cs"
      },
      {
        "id": "1x0x6om",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "SyncService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:171cr2c:syncservice",
        "path": "NexusReader.UI.Shared/Services/SyncService.cs"
      },
      {
        "id": "5ift4n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TextSegmentBlock is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:15iy4fl:textsegmentblock",
        "path": "NexusReader.Application/Queries/Reader/ViewModels.cs"
      },
      {
        "id": "1702147",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThemeService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1mmobgz:themeservice",
        "path": "NexusReader.UI.Shared/Services/ThemeService.cs"
      },
      {
        "id": "2tylpx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThrowingBookStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1mye80d:throwingbookstorageservice",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "j4vn6z",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThrowingDbContextFactory is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:k9hk67:throwingdbcontextfactory",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "f0jbz2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThrowingEbookRepository is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1dhn7tl:throwingebookrepository",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "2hatv2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThrowingEmbeddingGenerator is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1b5mqrj:throwingembeddinggenerator",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "1vo36cl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ThrowingSyncBroadcaster is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:ms3ont:throwingsyncbroadcaster",
        "path": "NexusReader.Web.Client/Program.cs"
      },
      {
        "id": "u1y83t",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ToggleAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:439s8m:toggleasync",
        "path": "NexusReader.UI.Shared/Services/FocusModeService.cs"
      },
      {
        "id": "1copn4s",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "TogglePassword() has no downstream runtime path in the current graph.",
        "nodeId": "method:5hqhux:togglepassword",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "1dlz77",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TogglePassword() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:5hqhux:togglepassword",
        "path": "NexusReader.UI.Shared/Pages/Account/Login.razor"
      },
      {
        "id": "qfsy8n",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ToggleTheme() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1fcqnzv:toggletheme",
        "path": "NexusReader.UI.Shared/Services/ThemeService.cs"
      },
      {
        "id": "121k542",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ToggleTheme() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:dw3sqb:toggletheme",
        "path": "NexusReader.UI.Shared/Services/IThemeService.cs"
      },
      {
        "id": "dnrfw7",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TokenLimitHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:dceqku:tokenlimithandler",
        "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs"
      },
      {
        "id": "ecqau5",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TokenLimitHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1xc3hml:tokenlimithandler",
        "path": "NexusReader.Infrastructure/Identity/TokenLimitHandler.cs"
      },
      {
        "id": "4wtowl",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TokenLimitRequirement is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:9rdcag:tokenlimitrequirement",
        "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs"
      },
      {
        "id": "7pgjxc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TokenLimitRequirement is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:h4q16i:tokenlimitrequirement",
        "path": "NexusReader.Infrastructure/Identity/TokenLimitRequirement.cs"
      },
      {
        "id": "1e8hqhc",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TotalChapters() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:l33fvs:totalchapters",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "iwg91k",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "TypographyVariant has no downstream runtime path in the current graph.",
        "nodeId": "type:oa0wy5:typographyvariant",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "rwabtx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "TypographyVariant is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:oa0wy5:typographyvariant",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "7es3xx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:19ym4q4:up",
        "path": "NexusReader.Data/Migrations/20260428184727_InitialPostgres.cs"
      },
      {
        "id": "1c563l8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1b2dxzu:up",
        "path": "NexusReader.Data/Migrations/20260503175906_FinalNormalizedSubscriptionArchitecture.cs"
      },
      {
        "id": "1rj4t2x",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1cxxeft:up",
        "path": "NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"
      },
      {
        "id": "e2g6lu",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1lw55w9:up",
        "path": "NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"
      },
      {
        "id": "122pbpx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1pxp1t3:up",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
      },
      {
        "id": "yx5hgm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1sa6em1:up",
        "path": "NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"
      },
      {
        "id": "n0g2fm",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:5tn4c6:up",
        "path": "NexusReader.Data/Migrations/20260510151022_NormalizeAuthor.cs"
      },
      {
        "id": "xflw1v",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:8mq94d:up",
        "path": "NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"
      },
      {
        "id": "93e0e2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:cdxwj:up",
        "path": "NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"
      },
      {
        "id": "jgjaam",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:e05nak:up",
        "path": "NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"
      },
      {
        "id": "nqex2q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "Up() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:jenau5:up",
        "path": "NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"
      },
      {
        "id": "4fn2x2",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateGraph() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:b27zpe:updategraph",
        "path": "NexusReader.UI.Shared/Services/KnowledgeGraphService.cs"
      },
      {
        "id": "1y3lpg4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateMetadataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:4hij31:updatemetadataasync",
        "path": "NexusReader.UI.Shared/Services/IReaderNavigationService.cs"
      },
      {
        "id": "1m4tyed",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateMetadataAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:tx9z61:updatemetadataasync",
        "path": "NexusReader.UI.Shared/Services/ReaderNavigationService.cs"
      },
      {
        "id": "1ppvejk",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateProgressAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1op2ws5:updateprogressasync",
        "path": "NexusReader.UI.Shared/Services/ISyncService.cs"
      },
      {
        "id": "sgxyzs",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateReadingProgressCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1onwz:updatereadingprogresscommand",
        "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"
      },
      {
        "id": "10y4tug",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateReadingProgressCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:lwz5af:updatereadingprogresscommand",
        "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"
      },
      {
        "id": "ujh51q",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateReadingProgressCommandHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:2zm0w9:updatereadingprogresscommandhandler",
        "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
      },
      {
        "id": "10rdofx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateReadingProgressCommandHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:1hf0y4h:updatereadingprogresscommandhandler",
        "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
      },
      {
        "id": "1pzbq8y",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateReadingProgressCommandHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ed5bhs:updatereadingprogresscommandhandler",
        "path": "NexusReader.Application/Commands/Sync/UpdateReadingProgressCommandHandler.cs"
      },
      {
        "id": "6vh5jr",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateSubscriptionPlanIsUnlimitedTokens is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1jcp5tl:updatesubscriptionplanisunlimitedtokens",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.Designer.cs"
      },
      {
        "id": "4nq74d",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateSubscriptionPlanIsUnlimitedTokens is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:588td0:updatesubscriptionplanisunlimitedtokens",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
      },
      {
        "id": "fsmrjn",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UpdateSubscriptionPlanIsUnlimitedTokens is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:bqctk6:updatesubscriptionplanisunlimitedtokens",
        "path": "NexusReader.Data/Migrations/20260506184227_UpdateSubscriptionPlanIsUnlimitedTokens.cs"
      },
      {
        "id": "1xzdq0h",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UserProfileDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:vgmc9n:userprofiledto",
        "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs"
      },
      {
        "id": "1m30pd3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "UserProfileDto is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:wh8ieq:userprofiledto",
        "path": "NexusReader.Application/DTOs/User/UserProfileDto.cs"
      },
      {
        "id": "18o3jgw",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "VariantCssClass() has no downstream runtime path in the current graph.",
        "nodeId": "method:1vxob4r:variantcssclass",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "p0euj3",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VariantCssClass() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1vxob4r:variantcssclass",
        "path": "NexusReader.UI.Shared/Components/Atoms/NexusTypography.razor"
      },
      {
        "id": "1gwvj01",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VerifyGroundednessAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1oclqd:verifygroundednessasync",
        "path": "NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"
      },
      {
        "id": "1jpgg75",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VerifyGroundednessAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:6gn0zk:verifygroundednessasync",
        "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs"
      },
      {
        "id": "dicwy4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VerifyGroundednessCommand is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:6i8iop:verifygroundednesscommand",
        "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
      },
      {
        "id": "1dmit20",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VerifyGroundednessCommandHandler is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:109ebx2:verifygroundednesscommandhandler",
        "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
      },
      {
        "id": "spckgv",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VerifyGroundednessCommandHandler() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10jkor8:verifygroundednesscommandhandler",
        "path": "NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"
      },
      {
        "id": "1e6e8jb",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:sdo0jm:vibrateasync",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "1e5c8s4",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:va46s8:vibrateasync",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "ejpzbz",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateErrorAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1ro58qu:vibrateerrorasync",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "1sdyhgi",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateErrorAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:eown21:vibrateerrorasync",
        "path": "NexusReader.Web.Client/Services/WebPlatformService.cs"
      },
      {
        "id": "vypwja",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateErrorAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:qdnq0x:vibrateerrorasync",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "1xa1ve",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateSuccessAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ev8hjj:vibratesuccessasync",
        "path": "NexusReader.Web.Client/Services/WebPlatformService.cs"
      },
      {
        "id": "16h5z88",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateSuccessAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:ptkxhj:vibratesuccessasync",
        "path": "NexusReader.Application/Abstractions/Services/IPlatformService.cs"
      },
      {
        "id": "g3j6se",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "VibrateSuccessAsync() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:twu1zj:vibratesuccessasync",
        "path": "NexusReader.Infrastructure.Mobile/Services/MauiPlatformService.cs"
      },
      {
        "id": "akbdsq",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "WasmEpubMetadataExtractor is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:5mx9m5:wasmepubmetadataextractor",
        "path": "NexusReader.Web.Client/Services/WasmEpubService.cs"
      },
      {
        "id": "1i4babj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "WasmEpubReader is isolated from runtime edges in the V5 graph.",
        "nodeId": "type:uf4ds6:wasmepubreader",
        "path": "NexusReader.Web.Client/Services/WasmEpubService.cs"
      },
      {
        "id": "1481ttx",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "WasmEpubReader() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:10zr37d:wasmepubreader",
        "path": "NexusReader.Web.Client/Services/WasmEpubService.cs"
      },
      {
        "id": "1bq28l8",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "WasmKnowledgeService() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1k4gp5:wasmknowledgeservice",
        "path": "NexusReader.Web.Client/Services/WasmKnowledgeService.cs"
      },
      {
        "id": "pq0shs",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "WebStorageService is isolated from runtime edges in the V5 graph.",
        "nodeId": "class:1uirugg:webstorageservice",
        "path": "NexusReader.UI.Shared/Services/WebStorageService.cs"
      },
      {
        "id": "u5bcfu",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ZoomIn() has no downstream runtime path in the current graph.",
        "nodeId": "method:1muyu85:zoomin",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "1aeudpj",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ZoomIn() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1muyu85:zoomin",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "11a3kk6",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ZoomOut() has no downstream runtime path in the current graph.",
        "nodeId": "method:1l8ubet:zoomout",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "gqwlml",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ZoomOut() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:1l8ubet:zoomout",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "tt88lb",
        "kind": "ui-action-without-downstream-path",
        "severity": "warn",
        "summary": "ZoomReset() has no downstream runtime path in the current graph.",
        "nodeId": "method:129w46l:zoomreset",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      },
      {
        "id": "46lifw",
        "kind": "isolated-node",
        "severity": "warn",
        "summary": "ZoomReset() is isolated from runtime edges in the V5 graph.",
        "nodeId": "method:129w46l:zoomreset",
        "path": "NexusReader.UI.Shared/Components/Organisms/KnowledgeGraph.razor"
      }
    ]
  }
}